Не удается получить 3D-модель с текстурой для правильного отображения

Я «пытаюсь» изучить OpenGL, используя книгу Эрика М. Бака «Изучение OpenGL ES для iOS: практическое руководство по программированию современной 3D-графики».

Я дошел до стадии, когда я пытаюсь загрузить 3D-модель в приложение для тестирования, чтобы подтвердить свои знания, и хотя я могу отобразить модель, она выглядит перевернутой, а текстура кажется частично отображаемой (или отображается неправильно).

Я пробовал GL_BLEND, GL_DEPTH_TEST, используя орто, не используя орто, но безрезультатно и понимаю, что, вероятно, упускаю что-то целостное... думаю, это может быть как-то связано с нормалями лица?

вот что должно появиться:

введите здесь описание изображения

и вот что я получаю:

введите здесь описание изображениякто-нибудь может помочь?

Спасибо


person Piginhat    schedule 31.08.2013    source источник
comment
Это точно текстура? Для меня это похоже на проблему отбраковки обратной стороны. Попробуйте отключить это и попробуйте изменить направление намотки, которое считается обратным.   -  person ClayMontgomery    schedule 01.09.2013
comment
Не уверен, что я использовал данные obj сферы в примере книги, чтобы увидеть, какие результаты я получаю, и он отображает землю с примененной текстурой, как в книге. Итак, я думаю, что делаю это правильно, иначе земная сфера не будет отображаться правильно? Странный. В основном я беру пример приложения, которое я переписал и заменил объект земной сферы объектом молекулы. Я также попробовал это с другим примером из книги, в котором используется 3D-модель, которую можно вращать, переводить и масштабировать и т. д., и пример работает нормально, но когда я пытаюсь ввести свой собственный объект, я получаю такое отображение?   -  person Piginhat    schedule 01.09.2013
comment
Я могу выложить проект, если это поможет?   -  person Piginhat    schedule 01.09.2013


Ответы (2)


Я думаю, что код для вашей модели сферы предполагает, что отбраковка обратной стороны либо отключена, либо требует противоположного направления намотки (по часовой стрелке или против часовой стрелки) для ее треугольных полос. Вы должны попытаться правильно инициализировать OpenGL ES для того, что ожидает этот код. Я бы попробовал это:

gl.glDisable(GL10.GL_CULL_FACE);

OR

gl.glEnable(GL10.GL_CULL_FACE);
gl.glFrontFace(GL10.GL_CCW);
gl.glCullFace(GL10.GL_BACK);

OR

gl.glEnable(GL10.GL_CULL_FACE);
gl.glFrontFace(GL10.GL_CW);
gl.glCullFace(GL10.GL_BACK);

Для получения дополнительной информации см. «Детали полигона» в Красной книге OpenGL, глава 2:

http://www.glprogramming.com/red/chapter02.html
person ClayMontgomery    schedule 01.09.2013
comment
Привет, очень ценю вашу помощь, спасибо! Я попробовал ваши предложения, и есть некоторое улучшение, по крайней мере, цвета, похоже, применяются к правильной части модели. это с отключенной отбраковкой лица [IMG]i41.tinypic.com/2i9366x.jpg[/ IMG], и здесь используется фронтфейс cw [IMG]i41.tinypic.com /fk19hk.jpg[/IMG] - person Piginhat; 01.09.2013
comment
Я вижу, что сфера ожидает систему координат glFrustumf или glOrthof. таким образом, используя орто-ориентацию, например self.baseEffect.transform.projectionMatrix = GLKMatrix4MakeOrtho(-0,5 * аспектное отношение, 0,5 * аспектное соотношение, -0,5f, 0,5, -5,0, 5,0); дает это [IMG]i43.tinypic.com/2a6ozds.jpg[/IMG] - person Piginhat; 01.09.2013

Автор книги посмотрел на это для меня и выяснил следующее:

Модель .obj была создана с использованием четырехугольников, четырехсторонних многоугольников, но OpenGL ES может отображать только точки, линии и треугольники. В результате рендерилась только половина (1 треугольник) каждого квадрацикла.

Открытие файла .obj в Blender и экспорт с использованием треугольников привели к правильному отображению.

Спасибо Эрику Баку за то, что он нашел время помочь одному из своих читателей, а также спасибо @clayMontgomery за его помощь ;-)

person Piginhat    schedule 03.09.2013