在 OpenGL 中制作两个独立的茶壶
Posted
技术标签:
【中文标题】在 OpenGL 中制作两个独立的茶壶【英文标题】:Making two separate teapots in OpenGL 【发布时间】:2017-04-30 07:36:06 【问题描述】:我想做两个独立的茶壶,但是两个茶壶重叠了。
如何修复代码以将两个茶壶分开?
void display()
glClearColor(0,0,1,0);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
mat4 mv;
const vec3 center(0.0,0.0,0.0);
if (useGlu) mv = glm::lookAt(eye,center,up);
else
mv = Transform::lookAt(eye,up);
glLoadMatrixf(&mv[0][0]);
glutSolidTeapot(2);
glutSolidTeapot(2.5);
glutSwapBuffers();
【问题讨论】:
除了回答我在glutSwapBuffers()
之前看不到glFlush()
或glFinish()
...
@Spektre Flush/Finish 不需要双缓冲上下文
【参考方案1】:
尝试在生成第二个茶壶之前设置您的建模坐标原点:
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glTranslatef(-6.0, 0.0, 0.0);
glutSolidTeapot(2.5);
【讨论】:
我照你说的做,没看到茶壶(2.5) 哦,我刚刚注意到您已经在使用上面的 GL_MODELVIEW。您应该使用 GL_PROJECTION 进行查看,使用 GL_MODELVIEW 进行建模。 @PaulBentley:您绝对不应该使用投影矩阵进行查看。这将使整个照明管道无效,因为这必须发生在固定功能管道的视图空间中。 -6 可能太多了, @PaulBentley 实际上,没有区别。您可以将任何变换放在任何矩阵中。这种分离只是为了方便。通常,投影矩阵仅用于投影变换,模型视图用于模型和视图——我认为这是一种 OpenGL 设计错误。在 DX ffp 中,模型(称为世界)、视图和投影具有三个独立的矩阵。它们只是完全应用于顶点,您可以使用一个复合矩阵进行任何变换。 OpenGL 通过添加矩阵堆栈和反转转换顺序解决了这个问题 - 现在所有这些都已过时。以上是关于在 OpenGL 中制作两个独立的茶壶的主要内容,如果未能解决你的问题,请参考以下文章