xcode – OpenGL深度问题
发布时间:2020-12-14 17:40:50 所属栏目:百科 来源:网络整理
导读:我在OpenGL中渲染深度有问题 以下代码是发生问题的代码的简单示例.它在同一个地方渲染出2个梯形,其中一个旋转.但旋转的一个总是显示在顶部,即使旋转时应该在第一个梯形后面. 我想我通过初始化OpenGL搞砸了一些东西.此外,当搜索stackoverflow时,我发现有人建
我在OpenGL中渲染深度有问题
以下代码是发生问题的代码的简单示例.它在同一个地方渲染出2个梯形,其中一个旋转.但旋转的一个总是显示在顶部,即使旋转时应该在第一个梯形后面. 我想我通过初始化OpenGL搞砸了一些东西.此外,当搜索stackoverflow时,我发现有人建议执行以下代码并查看输出的帖子. int depth; glGetIntegerv(GL_DEPTH_BITS,&depth); printf("%i bits depth",depth); 好的输出是,0位深度,这是不好我猜:( 我正在使用glfw库在xCode上开发Mac #include <GL/glfw.h> #include <stdlib.h> int main( void ) { int running = GL_TRUE; if( !glfwInit() ) { exit( EXIT_FAILURE ); } // Open an OpenGL window if( !glfwOpenWindow( 640,480,GLFW_WINDOW )) { glfwTerminate(); exit( EXIT_FAILURE ); } glEnable(GL_DEPTH_TEST); float angle = 0; // Main loop while( running ) { double elapsedTime = glfwGetTime(); glfwSetTime(0); angle += 90 * elapsedTime; // OpenGL rendering goes here... glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glPushMatrix(); //Save the transformations performed thus far glColor3f(1.0f,1.0,0.0); glTranslatef(0.0f,0.0f,0.0f); //Move to the center of the trapezoid //glRotatef(angle,1.0f,0.0f); //Rotate about the y-axis glBegin(GL_QUADS); //Trapezoid glVertex3f(-0.7f,-0.5f,0.0f); glVertex3f(0.7f,0.0f); glVertex3f(0.4f,0.5f,0.0f); glVertex3f(-0.4f,0.0f); glEnd(); glPopMatrix(); glPushMatrix(); //Save the transformations performed thus far glColor3f(1.0f,0.0,0.0f); //Move to the center of the trapezoid glRotatef(angle,0.0f); glEnd(); glPopMatrix(); //Undo the move to the center of the trapezoid glfwSwapBuffers(); // Check if ESC key was pressed or window was closed running = !glfwGetKey( GLFW_KEY_ESC ) && glfwGetWindowParam( GLFW_OPENED ); } // Close window and terminate GLFW glfwTerminate(); // Exit program exit( EXIT_SUCCESS ); } 解决方法
为什么你通过所有这些零?那些参数很重要. GLFW reference documentation (pdf)显示这些参数描述了颜色,深度和模板所需的位数.倒数第二个零是深度位的数量.你为帧缓冲要求了0位深度,这就是你得到的. 你不能责怪API做你所要求的;) 一个更合理的命令是: if( !glfwOpenWindow( 640,8,24,GLFW_WINDOW )) 这为RGBA提供了8位,深度为24位,模板为8位. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |