Поверхности сломались, когда объект находится далеко в iphone - PullRequest
0 голосов
/ 27 марта 2011

Я использую открытые окна для отображения объектов.

когда объект находится рядом с камерой, все идеально. но если объекты будут перемещаться далеко от камеры, поверхность объектов разрушится.

Разбитые объекты будут выглядеть так:

the broken object at (0,0,-500.0)

фрагмент кода рисованных объектов:

glVertexPointer(3, GL_FLOAT, 32, self.vertices);
glNormalPointer(GL_FLOAT, 32, &(self.vertices[3]));
glTexCoordPointer(2, GL_FLOAT, 32, &(self.vertices[6]));    

glDrawElements(GL_TRIANGLES, self.indexNumber, GL_UNSIGNED_SHORT, &(self.faces[0]));

Полагаю, причиной может быть точность числа с плавающей точкой.

У кого-нибудь есть решение для этого? спасибо

1 Ответ

2 голосов
/ 28 марта 2011

Проблема в точности буфера глубины.

Значения глубины масштабируются таким образом, чтобы более близкие объекты имели больший диапазон возможных значений глубины, чем те, которые находятся дальше. Поэтому на удаленных объектах больше вероятности возникновения z-боев и других подобных проблем. См. Вопрос 12.070 в этом FAQ.

Ближние и дальние плоскости усеченного контура всегда должны быть установлены как можно ближе друг к другу, то есть: ближняя плоскость должна быть как можно дальше от камеры, оставаясь ближе к визуализируемому объекту, а дальняя плоскость должна быть как можно ближе, но при этом еще дальше, чем визуализированный объект.

Похоже, вы просто визуализируете один объект - найдите ближайшую и ближайшую точки на этом объекте, добавьте немного отступов для безопасности и используйте эти значения для ближней и дальней плоскостей.

Если вам нужно визуализировать сцену с объектами как на расстоянии, так и на переднем плане, и вы столкнулись с похожими проблемами, вы можете разделить рендеринг на две фазы. Сначала выполните рендеринг удаленных объектов с соответствующими значениями ближнего и дальнего расстояний, затем очистите буфер глубины и отобразите объекты переднего плана с их собственными соответствующими значениями ближнего и дальнего расстояний.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...