Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Мультимедия, OpenGL/DirectX > неправильное наложение текстуры на UVW


Автор: Egnech 28.12.2007, 11:58
День добрый! 
Немогу понять в чем дело, при наложении текстуры (скажем на куб) в 3ДМаксе, она отбражается нормально, но при загрузке модели в программе происходит косяк как показанно на скриншоте... 
Вот так выглядит в Максе:
user posted image
Вот так в программе:
user posted image
Мне советовали отрисовывать модель по фейсам текстуры, но при этом геометрия выглядет ужастно. 
ЗЫ. API - OpenGL.

Автор: Solomon 28.12.2007, 12:03
Цитата(Egnech @  28.12.2007,  10:58 Найти цитируемый пост)
программе происходит косяк как показанно на скриншоте... 
 А косяк в чем? в том что только на одной грани лицо видно? 


Цитата(Egnech @  28.12.2007,  10:58 Найти цитируемый пост)
Мне советовали отрисовывать модель по фейсам текстуры, но при этом геометрия выглядет ужастно. 
 ЭЭЭ а ты как рисуеш если не по фейсам?

Автор: Egnech 28.12.2007, 12:16
Да, - косяк именно в том что лицо видно только на одной грани, а на остальных - текстура смазана, как будто "протянута" =)
Отрисовываю я по фейсам точек.

Автор: Solomon 28.12.2007, 13:03
А в максе это все одной текстурой или для каждого фейса оттельно? 
и если можно покажи код

Автор: Egnech 28.12.2007, 13:33
В максе все идет одной текстурой... Вобщем алгоритм такой:
1) Достаю из файла координаты точек
2) фейсы точек
3) координаты нормалей
4) текстурные координаты
5) текстурные фейсы
Потом отрисовываю:
gl.glNormalPointer (GL.GL_FLOAT, 0, координаты нормалей);  
gl.glTexCoordPointer(3, gl.GL_FLOAT, 0 , текстурные координаты);
gl.glVertexPointer(3, GL.GL_FLOAT, 0, координаты точек);
gl.glDrawElements(GL.GL_TRIANGLES, sml.getLenght, GL.GL_UNSIGNED_INT,фейсы точек);

И в результате вижу на экране неправильно затекстуренный бокс =(
ЗЫ. Я кстате даже и не представляю как текстурить одну модель разными текстурными раскладками =(

Добавлено через 2 минуты и 24 секунды
Если отрисовывать по фейсам текстуры, то на экране видно только два верхних горизонтально лежащих полигона и два нижних (те на которых в первом случае текстура легла правильно).

Автор: atavinta 31.1.2008, 14:42
Элементрано это делаеттся, не надо Хлмсом быть - Ватсон справится. Просто разбери модель на части, каждую обзови самостоятельной моделью и затекстурь как хочешь. А потом состыкуй их.

Добавлено через 2 минуты и 12 секунд
Кстати, что вообще за прикол - рисовать рожи сразу на всех поверхностиях. Я еще понимаю кирпичи, но рожи зачем. Рожа должна быть где-нибудь в одном месте.

Автор: NOT 7.3.2008, 12:39
Это происходит потому, что вершин у бокса 8, а фейсов текстурный 12, потому ена дону вершину будет приходиться по несколько текстурных вершин в конечном счете. При экспорте можешь перестроить кол-во вершин, чтоб было NumFace() * 3 и соответсвенно изменить индексы.

Автор: FIaR 9.3.2008, 13:58
Уже и не помню конечно, но сталкивался я с этой проблемой.

Если память не изменяет, то у OGRE 3D в скриптовом экспортере в *.mesh как раз используется этот алгоритм перестроения вертексов и фейсов. Это конечно не самый легкий вариант, но разобраться можно. Удачи...

ЗЫ
... чьято рожа на кубе, ...ммм, ...оригинально  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)