Форум программистов, компьютерный форум, киберфорум
OpenGL
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
6 / 6 / 1
Регистрация: 08.12.2009
Сообщений: 58
1

Экпорт модели из 3D Max

25.03.2010, 17:12. Показов 2721. Ответов 12
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здрасьте.

Вощем такой вопрос у меня.
Экспортирую значица 3d модель из Маха в ОпенГЛ (через .obj). Но в OpenGL почему-то модель начинает как-то странно мерцать или, скорее, поблёскивать(особенно, если двигать "камеру"). По ней какие-то полупрозрачные полосы идут и иногда прыгают по поверхности небольшие бугорки. Вроде бы на глюки из-за нехватки аппаратной мощности непохоже (ИМХО). Нормали считываются из .obj-файла, мне кажется, что корректно, хотя фиг знает...

Как вы думаете, в чём может быть проблема?

P.S. Чёрт, дико извиняюсь за название темы, перепутал поле ввода...
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.03.2010, 17:12
Ответы с готовыми решениями:

Даны векторы a и b , состоящие из семи компонентов. Найти max(max(Ai), max(Bi), max(¦Ai-Bi¦), max(Ai+Bі),1)
Даны векторы a и b , состоящие из семи компонентов. Найти max(max(Ai), max(Bi), max(¦Ai-Bi¦),...

Фрактальные 3D-модели в 3Ds Max, Houdini или Cinema 4D
Нужно сгенерить фракталы в профессиональном 3D-софте. Фракталы – это различные объекты,...

Задать значения вещественным элементам массивов A(6),B(3),C(10) и вычислить Y=max(max(A),max(B),max(C)
Задать значения вещественным элементам массивов A(6),B(3),C(10) и вычислить...

Даны действительные числа A, B, C. Получить max(a,a+b)+max(a,b+c,a+b) \ 1+max(ab,bc)+max(a+bc,15,ac)
Всем привет)Помогите пожалуйста написать в С++ Даны действительные числа A, B, C. Получить...

12
3420 / 1607 / 236
Регистрация: 26.02.2009
Сообщений: 7,859
Записей в блоге: 5
25.03.2010, 18:54 2
Цитата Сообщение от Tom Vonzet Посмотреть сообщение
Вроде бы на глюки из-за нехватки аппаратной мощности непохоже (ИМХО)
Мне тоже так кажется...
Tom Vonzet, 90% виноват загрузчик ОГЛа. Думаю стОит начать искать ошибки там. Хотя может быть и экспортёр подтраивает. Где брал загрузчик? SourceForge? Там ребята много чего делают и бесплатно, но качество не 100%. Впринципе как и всё ПО =)
1
6 / 6 / 1
Регистрация: 08.12.2009
Сообщений: 58
25.03.2010, 19:14  [ТС] 3
загрузчик ОГЛа
эммм... немного не понял, что имеется ввиду?
0
3420 / 1607 / 236
Регистрация: 26.02.2009
Сообщений: 7,859
Записей в блоге: 5
25.03.2010, 19:21 4
Имеется ввиду то, чем вы преобразуете данные в файле *.obj в массивы нормалей, вершин, текстур...
судя по всему глючат нормали. Вершины вроде бы норм, по описанию артефактов...
0
6 / 6 / 1
Регистрация: 08.12.2009
Сообщений: 58
25.03.2010, 20:39  [ТС] 5
Э... сам писал как бэ.

Нда, я щас ещё покрутил модельку немного, кажется, вы правы. Пойду искать ошибки в считывании нормалей. Хотя не знаю, где я мог ошибиться, там же всё вроде ясно как день...

Добавлено через 1 час 5 минут
snake32, как думаете, вот это из-за нормалей?



Я щас порылся в коде... да вроде бы и негде ошибиться...

Сначала считываем все координаты поверхности, координаты нормалей, текстурн. координаты, грани (индексы координат) в массивы Vertices, Normals, TexVertices и Faces соответственно.
Потом, с помощью следующего кода, их прорисовываем:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
for (int i=0; i<Count[3]; i++)
{
glPushMatrix();
glBegin(GL_TRIANGLES);
    glNormal3f(Normals[Faces[i][2]-1][0], Normals[Faces[i][2]-1][1],  Normals[Faces[i][2]-1][2]);
 
  glTexCoord3f(TexVertices[Faces[i][1]-1][0], TexVertices[Faces[i][1]-1][1],  TexVertices[Faces[i][1]-1][2]);
 
glVertex3f(Vertices[Faces[i][0]-1][0], Vertices[Faces[i][0]-1][1],  Vertices[Faces[i][0]-1][2]);
 
    glNormal3f(Normals[Faces[i][5]-1][0], Normals[Faces[i][5]-1][1],  Normals[Faces[i][5]-1][2]);
 
  glTexCoord3f(TexVertices[Faces[i][4]-1][0], TexVertices[Faces[i][4]-1][1],  TexVertices[Faces[i][4]-1][2]);
 
glVertex3f(Vertices[Faces[i][3]-1][0], Vertices[Faces[i][3]-1][1],  Vertices[Faces[i][3]-1][2]);
 
    glNormal3f(Normals[Faces[i][8]-1][0], Normals[Faces[i][8]-1][1],  Normals[Faces[i][8]-1][2]);
 
  glTexCoord3f(TexVertices[Faces[i][7]-1][0], TexVertices[Faces[i][7]-1][1],  TexVertices[Faces[i][7]-1][2]);
 
glVertex3f(Vertices[Faces[i][6]-1][0], Vertices[Faces[i][6]-1][1],  Vertices[Faces[i][6]-1][2]);
 
glEnd();
glPopMatrix();
}
0
3420 / 1607 / 236
Регистрация: 26.02.2009
Сообщений: 7,859
Записей в блоге: 5
25.03.2010, 22:01 6
Фиг знает.... так не разберёшь с одной картикой.... тут и без нормалей по-моему, касяки есть...
Похоже что Вы напутали что-то с передними и задими гранями. Попробуйте выключите cullface и свет. должно быть всё нормально отображатся.... потом разберитесь с перечислением вершин треугольников... ну и вконце включите свет и уже над нормалями шаманьте....
0
6 / 6 / 1
Регистрация: 08.12.2009
Сообщений: 58
26.03.2010, 17:00  [ТС] 7
Возможно, косяки есть. Но при более близком рассмотрении моделей их вроде не очень-то видно. Это вероятно нормали издалека создают такие иллюзии... Хотя опять же фиг знает...
Насчёт передних и задней граней - не знаю, у меня же всё считывается с obj-файла, который на совести 3ds Maxа.

А как раз с нормалями я вот что заметил. Похоже, постарался obj-экспортёр 3d Maxа:
Я попробовал экспортировать куб. И он тоже в OpenGL почти залит однотонным цветом! Открываю obj-Файл и вижу, что записано только 8 нормалей. И точек у куба тоже 8, но используется-то каждая точка по 3 раза! ведь к каждой точке примыкает три грани(треугольника), которые обращены в совершенно разные стороны. Значит и нормали у них должны быть разные. И всего нормалей должно быть 24(8 точек, по 3 раза используется каждая). Причём в Maxе, если включить галочку "Show Normals", то отображаются все 24! А записываются только 8 и у них разная только координата по Y. Вот код obj-файла с кубом:

# Max2Obj Version 4.0 Mar 10th, 2001
#
# object Box01 to come ...
#
v -2.737986 0.000000 1.785242
v 2.737986 0.000000 1.785242
v -2.737986 0.000000 -1.785242
v 2.737986 0.000000 -1.785242
v -2.737986 3.418602 1.785242
v 2.737986 3.418602 1.785242
v -2.737986 3.418602 -1.785242
v 2.737986 3.418602 -1.785242
# 8 vertices

vt 0.000000 0.000000 0.000000
vt 1.000000 0.000000 0.000000
vt 0.000000 1.000000 0.000000
vt 1.000000 1.000000 0.000000
vt 0.000000 0.000000 0.000000
vt 1.000000 0.000000 0.000000
vt 0.000000 1.000000 0.000000
vt 1.000000 1.000000 0.000000
vt 0.000000 0.000000 0.000000
vt 1.000000 0.000000 0.000000
vt 0.000000 1.000000 0.000000
vt 1.000000 1.000000 0.000000
# 12 texture vertices

vn 0.000000 -2.000000 -0.000000
vn 0.000000 -1.000000 -0.000000
vn 0.000000 -1.000000 -0.000000
vn 0.000000 -2.000000 -0.000000
vn 0.000000 2.000000 -0.000000
vn 0.000000 1.000000 -0.000000
vn 0.000000 1.000000 -0.000000
vn 0.000000 2.000000 -0.000000
# 8 vertex normals

g Box01
s 2
f 1/10/1 3/12/3 4/11/4
f 4/11/4 2/9/2 1/10/1
s 4
f 5/9/5 6/10/6 8/12/8
f 8/12/8 7/11/7 5/9/5
s 8
f 1/5/1 2/6/2 6/8/6
f 6/8/6 5/7/5 1/5/1
s 16
f 2/1/2 4/2/4 8/4/8
f 8/4/8 6/3/6 2/1/2
s 32
f 4/5/4 3/6/3 7/8/7
f 7/8/7 8/7/8 4/5/4
s 64
f 3/1/3 1/2/1 5/4/5
f 5/4/5 7/3/7 3/1/3
# 12 faces

g
Странно, не правда ли?

Добавлено через 4 часа 36 минут
Написал функцию для вычисления нормалей (пока что без сгаживания).
Результат тот же (только теперь гранённый, но глюки те же). Уже думается мне, что нормали тут и не при чём...
Так что я вообще в ступоре...

Что вы там говорили про передние и задние грани? Можно поподробнее? Э... как их можно спутать?

А когда я выключаю cullface и свет (если я это правильно делаю), то у меня получается плоское изображение, полностью залитое одним цветом.
0
3420 / 1607 / 236
Регистрация: 26.02.2009
Сообщений: 7,859
Записей в блоге: 5
26.03.2010, 20:17 8
Цитата Сообщение от Tom Vonzet Посмотреть сообщение
А когда я выключаю cullface и свет (если я это правильно делаю), то у меня получается плоское изображение, полностью залитое одним цветом.
Да. всё верно. только оно кажется что плоское как раз из-за сплошного цвета.
Цитата Сообщение от Tom Vonzet Посмотреть сообщение
Что вы там говорили про передние и задние грани? Можно поподробнее? Э... как их можно спутать?
ну как бэ я тоже в своё время делал загрузчик только с WRML файла и не правильно перечислял вершины для треугольника. Получилось что треугольники через один были: то были то небыли. Как бы cullface их отсекал. Немного подшаманил и нормально стало определятся где треугольники передом стоят а где задом =)

С *.obj не работал щаз анализирую...
Цитата Сообщение от Tom Vonzet Посмотреть сообщение
Странно, не правда ли?
Да... действительно...
Цитата Сообщение от Tom Vonzet Посмотреть сообщение
g Box01
s 2
f 1/10/1 3/12/3 4/11/4
f 4/11/4 2/9/2 1/10/1
s 4
f 5/9/5 6/10/6 8/12/8
f 8/12/8 7/11/7 5/9/5
s 8
f 1/5/1 2/6/2 6/8/6
f 6/8/6 5/7/5 1/5/1
s 16
f 2/1/2 4/2/4 8/4/8
f 8/4/8 6/3/6 2/1/2
s 32
f 4/5/4 3/6/3 7/8/7
f 7/8/7 8/7/8 4/5/4
s 64
f 3/1/3 1/2/1 5/4/5
f 5/4/5 7/3/7 3/1/3
# 12 faces
Не понятное построение граней.....как у вас вообще что-то отображается?
ААА!! Понял логику: Одна строчка - один треугольник:
v1/t1/n1 v2/t2/n2 v3/t3/n3
где v1-v3 индекс вершин, n - нормалей, t-тексурных координат
Цитата Сообщение от Tom Vonzet Посмотреть сообщение
vn 0.000000 -2.000000 -0.000000
vn 0.000000 -1.000000 -0.000000
vn 0.000000 -1.000000 -0.000000
vn 0.000000 -2.000000 -0.000000
vn 0.000000 2.000000 -0.000000
vn 0.000000 1.000000 -0.000000
vn 0.000000 1.000000 -0.000000
vn 0.000000 2.000000 -0.000000
# 8 vertex normals
Интересные нормали. Почему они не единичные? И почему они только по вдоль оси Y?
Либо экспортер врёт. Либо Вы в максе что-то напутали. Хотя как там можно напутать так напутать?
Попробуйте с минимальными действиями создать куб с нуля и сохранить его. Если нормали опять врут, то ищите другой экспортер.
Цитата Сообщение от Tom Vonzet Посмотреть сообщение
и вижу, что записано только 8 нормалей. И точек у куба тоже 8, но используется-то каждая точка по 3 раза!
На самом деле для куба достаточно 6 нормалей! Там по индексам адресация идёт(так же как и с вершинами). То есть кол-во вершин и нормалей не обязательно должно совпадать. Вот почему их 8?
Вы точно просто куб создали?
1
6 / 6 / 1
Регистрация: 08.12.2009
Сообщений: 58
26.03.2010, 20:53  [ТС] 9
Цитата Сообщение от snake32 Посмотреть сообщение
Не понятное построение граней.....как у вас вообще что-то отображается?
ААА!! Понял логику: Одна строчка - один треугольник:
v1/t1/n1 v2/t2/n2 v3/t3/n3
где v1-v3 индекс вершин, n - нормалей, t-тексурных координат
да, всё верно. во всяком случае я именно так и пользуюсь obj-файлом.



Цитата Сообщение от snake32 Посмотреть сообщение
Интересные нормали. Почему они не единичные? И почему они только по вдоль оси Y?
да я вот тоже никак не могу найти ответа на вот эти вопросы...


Цитата Сообщение от snake32 Посмотреть сообщение
Либо экспортер врёт. Либо Вы в максе что-то напутали. Хотя как там можно напутать так напутать?
Попробуйте с минимальными действиями создать куб с нуля и сохранить его. Если нормали опять врут, то ищите другой экспортер.
Во-во. Да-да, именно простой куб. Ага, уже ищу... Но поскольку даже рассчёт нормалей вручную (вернее, в самой программе) не помог - значит ошибки кроются где-то ещё, верно?



Цитата Сообщение от snake32 Посмотреть сообщение
На самом деле для куба достаточно 6 нормалей! Там по индексам адресация идёт(так же как и с вершинами). То есть кол-во вершин и нормалей не обязательно должно совпадать. Вот почему их 8?
Согласен, знаю. Но по крайней мере тогда уж было бы логичнее видеть 24 нормали, но никак не 8, не единичных и... кароче левых...



Цитата Сообщение от snake32 Посмотреть сообщение
Вы точно просто куб создали?
ага. Если не верите (), то прочитайте название вверху obj-файла: "Box01".

Блин, чё ж делать-та...

P.S.

snake32, спасибо большое за умные мысли, подсказки и за то, что я вам ещё не очень надоел(или вы об этом этично молчите)...)))
0
3420 / 1607 / 236
Регистрация: 26.02.2009
Сообщений: 7,859
Записей в блоге: 5
26.03.2010, 22:00 10
Цитата Сообщение от Tom Vonzet Посмотреть сообщение
ага. Если не верите (), то прочитайте название вверху obj-файла: "Box01".
Написано много чего может. Но судя по вершином похоже на куб.

Цитата Сообщение от Tom Vonzet Посмотреть сообщение
Блин, чё ж делать-та...
попробуйте загрузите "нормальный" *.obj который 100% правильный. Например, в комплекте с рендерманки идут много моделей, среди которых есть и *.obj файлы. Так Вы узнаете наверняка правильный ли загрузчик сделали или нет.
Цитата Сообщение от Tom Vonzet Посмотреть сообщение
snake32, спасибо большое за умные мысли, подсказки и за то, что я вам ещё не очень надоел(или вы об этом этично молчите)...)))
Рад помочь разобраться в этом не легком, увлекательном(для меня) мире 3D! Если надоест, просто - игнор. Форум - дело добровольное. Правда не всегда время есть на это дело...
0
6 / 6 / 1
Регистрация: 08.12.2009
Сообщений: 58
27.03.2010, 07:41  [ТС] 11
Хм, кажется дело в том, что если камеру отодвинуть подальше, то некоторые "задние грани" (но которые расположены очень близко к передним) начинают вылезать на первый план.
Как бы это исправить?
0
3420 / 1607 / 236
Регистрация: 26.02.2009
Сообщений: 7,859
Записей в блоге: 5
27.03.2010, 10:13 12
Z-buffer правильно инициализировали? Очищаете? Может что-то с коррекцией перспективы....хз...
1
6 / 6 / 1
Регистрация: 08.12.2009
Сообщений: 58
27.03.2010, 17:35  [ТС] 13
Ох, ну вот в чём дело! У меня глубина z-буфера стояла 16 бит! Поменял на 24 - результат в несколько раз лучше.


snake32, 1024 благодарностей!!! Извините, что по такому глупому пустяку (как выяснилось) я вас ээ... беспокоил)

Правда я так и не разобрался, почему Max'овский экспортер мне предложил такие нормали к кубу, но со сложными моделями вроде всё нормально.

0
27.03.2010, 17:35
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.03.2010, 17:35
Помогаю со студенческими работами здесь

Экпорт из blender в юнити3Д
Привет,когда появлялось время создавал анимацию для модели,и по окончанию проверял в юнити,все было...

Экпорт запроса в шаблон Excel
Создана функция экспорта запроса в шаблон Excell, подскажите как указать конкретно лист для...

Экпорт нового приложения на ipad тестера
Всех приветствую! Сделал приложение, могу выливать его на свой ipad через шнур, соответственно...

Экпорт таблицы в excel с сохранением форматирования
Здраствуйте. До этого момента для экспорта таблиц я использовал следующий код Dim str As String...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru