在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;
}
书上是写说一个红色正方形的显示列表
展开
 我来答
ssilspro
2011-08-08 · TA获得超过2625个赞
知道大有可为答主
回答量:1148
采纳率:0%
帮助的人:1729万
展开全部
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 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();
//.........
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式