背景:投影矩阵
我努力学习OpenGLES 2.0的iPhone和模板项目,苹果提供在Xcode已经难住了。
默认的项目显示一个2D平方,但我想尝试在Z轴上添加不同深度的顶点。
在Apple的默认OpenGL项目中,它们只使用传递给顶点着色器的x和y坐标绘制一个2d正方形。
为了尝试将顶点放置在三维空间中,我在示例项目的顶点数据中添加了一个z值。然后我将glVertexAttribPointer方法中的大小参数从2更改为3.我更改了顶点上的z值,希望在运行程序时它会使方块向后倾斜。
问题是,它仍然显示为相同的2D广场。从我的阅读中,我认为这是由投影矩阵设置为正交而不是透视引起的。
问:
如何改变苹果的模板的OpenGL项目中使用OpenGLES 2.0的投影矩阵从正交透视?
我曾尝试:
glMatrixMode(GL_PROJECTION); glLoadIdentity(); glFrustumf(-0.5,0.5,-0.5,0.5,1,10);
但它没有改变结果。
我还尝试添加像这样的顶点着色器程序:
MAT4 projectionMatrix = {2.0/320.0,0.0,0.0,-1.0, 0.0,2.0/480.0,0.0,-1.0 , 0.0,0.0,-1.0,0.0, 0.0,0.0,0.0,1.0};
gl_Position * = projectionMatrix;
但是,这也没有工作。
设置OpenGLES 2.0投影矩阵的方法与1.0相同。我想也许我正在尝试的东西与2.0不兼容。
在此先感谢。
迈克
更新
感谢您的帮助约翰。对此,我真的非常感激。我尝试在我的EAGL视图中将以下代码添加到createFramebuffer方法中,根据您的建议添加深度缓冲区,但仍然没有更改。
// Create depth render buffer and allocate backing store.
glGenRenderbuffers(1, &depthRenderbuffer);
glBindRenderbuffer(GL_RENDERBUFFER, depthRenderbuffer);
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT16, framebufferWidth, framebufferHeight);
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, depthRenderbuffer);
如果我下面的代码添加到我的渲染方法:
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glFrustumf(-0.5, 0.5, -0.5, 0.5, 1, 10);
Xcode中抛出异常。有什么想法吗?
嗨,John,我认为问题在于glMatrixMode在OpenGLES 2.0中不起作用。我查看了头文件,它并没有显示在2.0版本中,而是在1.0版本中。我在网上阅读了一些内容,glViewport函数取代了glMatrixMode和2.0版本中的一些其他相关函数。任何人都可以确认吗?谢谢! – Hivebrain 2010-12-21 00:15:00