Поскольку вы работаете с 2D и орто, я обнаружил, что это помогает иметь видовой экран с координатами, которые соответствуют вашему разрешению, так что это сделает вещи более читабельными:
CGRect rect = self.view.bounds;
if (ORTHO) {
if (highRes && (retina == 1)) {
glOrthof(0.0, rect.size.width/2, 0.0 , rect.size.height/2, -1, 1000.0);
} else {
glOrthof(0.0, rect.size.width, 0.0 , rect.size.height, -1, 1000.0);
}
glViewport(0, 0, rect.size.width*retina, rect.size.height*retina);
}
Обратите внимание, что я всегда использую координаты 320x480даже на сетчатке я могу использовать одни и те же координаты для обоих res, и .5 даст мне идеальный пиксель на сетчатке, но вы можете пойти другим путем.
Что касается глубины, я использую -1 для1000 глубины, так что я могу нарисовать до -1000 Z.
Убедитесь, что вы правильно связываете буфер глубины, что-то вроде этого:
// Need a depth buffer
glGenRenderbuffersOES(1, &depthRenderbuffer);
glBindRenderbufferOES(GL_RENDERBUFFER_OES, depthRenderbuffer);
glRenderbufferStorageOES(GL_RENDERBUFFER_OES, GL_DEPTH_COMPONENT16_OES, framebufferWidth, framebufferHeight);
glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_DEPTH_ATTACHMENT_OES, GL_RENDERBUFFER_OES, depthRenderbuffer);
Или ваша проблема может быть настолько простойиспользуя глубину, которая находится позади вашей камеры и освещается или больше, чем ваш буфер, попробуйте использовать глубину от 0 до -1 (-0,5 для примера), с моим glOrthof вы можете подняться до -1000;
РЕДАКТИРОВАТЬ
Значения в glOrthof для ближнего и дальнего указывают количество (расстояние), а не координаты, это может сбивать с толку при указании значений глубины.Когда вы указываете 1000 для дальнего параметра, мы на самом деле говорим, что дальняя плоскость отсечения находится на расстоянии 1000 единиц от наблюдателя, то же самое с ближним полем, к сожалению, указание плоскости отсечения позади зрителя будет принимать отрицательные значения, что способствуетдо путаницы.
Так что, когда приходит время рисования, у нас есть отсеченная плоскость, которая находится в 1000 единицах от зрителя впереди (далеко или в экран), с точки зрения координат Z отрицательно, когда ниже плоскости просмотра (на экран)На самом деле наш мир рисования находится между Z = 1 и Z = -1000, что составляет -1000 - самое дальнее, что мы можем пройти с этими параметрами.