首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >gluLookAt外部显示功能

gluLookAt外部显示功能
EN

Stack Overflow用户
提问于 2016-03-13 20:00:50
回答 1查看 171关注 0票数 0

我正在尝试使用GLUT显示带有鼠标旋转的茶壶

如果将gluLookAt放在display函数中,则会渲染茶壶

代码语言:javascript
复制
void displayPot()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();

gluLookAt(              // set up the camera
    0.0, 0.0, 5.0,      // eye position
    0.0, 0.0, 0.0,      // lookat position
    0.0, 1.0, 0.0);     // up direction

glRotatef(xrot, 1.0f, 0.0f, 0.0f);
glRotatef(yrot, 0.0f, 1.0f, 0.0f);

glEnable(GL_COLOR_MATERIAL);    // specify object color
glColor3f(1.0, 0.1, 0.1);       // redish
glutSolidTeapot(1);

glFlush();
glutSwapBuffers();
}

但是如果我把它放在我的init函数中,茶壶就消失了

代码语言:javascript
复制
bool init()
{
glClearColor(0.93f, 0.93f, 0.93f, 0.0f);

glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(45, 1, 1, 100);  // setup a perspective projection

glMatrixMode(GL_MODELVIEW);
glLoadIdentity();

gluLookAt(              // set up the camera
    0.0, 0.0, 5.0,      // eye position
    0.0, 0.0, 0.0,      // lookat position
    0.0, 1.0, 0.0);     // up direction

glEnable(GL_LIGHTING);      // enable lighting
glEnable(GL_LIGHT0);        // enable

float lpos[] = { 5, 5, 5, 0 };
glLightfv(GL_LIGHT0, GL_POSITION, lpos);

//glShadeModel(GL_FLAT);        // flat shading
glShadeModel(GL_SMOOTH);        // smooth shading

glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LEQUAL);
glClearDepth(1.0f);

return true;
}

我在这里做错了什么?

EN

回答 1

Stack Overflow用户

发布于 2016-03-13 20:53:50

,我做错了什么?

您将它放在init函数中。这就是问题所在。

OpenGL是一个状态机,依赖于您的程序中的其他内容,可能会以某种方式改变状态,这将在以后使您陷入困境。例如,您或某个库(意外地)清除了模型视图矩阵(或投影矩阵或其他东西)。

作为OpenGL的一般规则(少数异常值除外),所有函数都会调用前缀为gl…的函数和glu…应该进入绘图代码,因为它是绘图代码。这包括像glViewport这样的东西,以及人们可能在“初始化代码”中天真地解释的其他东西。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35969949

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档