在VC6.0运行的有关OPenGL程序,编译、运行时都没有错误,只是在显示时,没有显示,该如何解决!如:
#include<GL/glut.h>#defineRED_SOUARE1voidmyDisplay(void){glNewList(RED_SOUARE,GL_COMP...
#include<GL/glut.h>
#define RED_SOUARE 1
void myDisplay(void)
{
glNewList(RED_SOUARE, GL_COMPILE);
glPushAttrib(GL_CURRENT_BIT);
glColor3f(1.0,0.0,0.0);
glRectf(-1.0,-1.0,1.0,1.0);
glPopAttrib();
glEndList();
}
int main(int argc, char* argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE);
glutInitWindowPosition(200, 200);
glutInitWindowSize(400, 400);
glutCreateWindow("OpenGL 窗口");
glutDisplayFunc(&myDisplay);
//glutIdleFunc(&myIdle);
glutMainLoop();
return 0;
}
书上是写说一个红色正方形的显示列表 展开
#define RED_SOUARE 1
void myDisplay(void)
{
glNewList(RED_SOUARE, GL_COMPILE);
glPushAttrib(GL_CURRENT_BIT);
glColor3f(1.0,0.0,0.0);
glRectf(-1.0,-1.0,1.0,1.0);
glPopAttrib();
glEndList();
}
int main(int argc, char* argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE);
glutInitWindowPosition(200, 200);
glutInitWindowSize(400, 400);
glutCreateWindow("OpenGL 窗口");
glutDisplayFunc(&myDisplay);
//glutIdleFunc(&myIdle);
glutMainLoop();
return 0;
}
书上是写说一个红色正方形的显示列表 展开
1个回答
展开全部
glNewList用错地方了, 这个是建立显示列表, 把能保存的命令先保存好, 然后之后直接用glCallList就行, 如果命令不变的话, 没必要每次都从新建立啊,
你这个暂时不用显示列表也行
void myDisplay(void)
{
glClearColor (0.0f, 0.0f, 0.0f, 0.0f);
glClear (GL_COLOR_BUFFER_BIT); //每次要把上一次的擦掉,尤其是以后要画动画的时候
//glPushAttrib(GL_CURRENT_BIT); //没有改变属性, 暂时不用这个
glColor3f(1.0,0.0,0.0);
glRectf(-1.0,-1.0,1.0,1.0);
//glPopAttrib();
}
你这个暂时不用显示列表也行
void myDisplay(void)
{
glClearColor (0.0f, 0.0f, 0.0f, 0.0f);
glClear (GL_COLOR_BUFFER_BIT); //每次要把上一次的擦掉,尤其是以后要画动画的时候
//glPushAttrib(GL_CURRENT_BIT); //没有改变属性, 暂时不用这个
glColor3f(1.0,0.0,0.0);
glRectf(-1.0,-1.0,1.0,1.0);
//glPopAttrib();
}
更多追问追答
追问
那是在哪里建立显示列表啊!有没有简单的例子看看!
追答
在开始的时候, 或需要的时候,
比如:
//....
void init()
{
glClearColor (0.0f, 0.0f, 0.0f, 0.0f);
glNewList(RED_SOUARE, GL_COMPILE);
//...
glEndList();
}
void myDisplay(void)
{
glClear (GL_COLOR_BUFFER_BIT);
glCallList(RED_SOUARE);
glutSwapBuffers();// 你用了GLUT_DOUBLE 双缓冲, 是在后台缓冲画的, 所以画好了要和前台交换
}
int main(int argc, char* argv[])
{
//.........
glutCreateWindow("OpenGL 窗口");
init();
//.........
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询