【问题标题】:Making two separate teapots in OpenGL在 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 不需要双缓冲上下文

标签: c++ opengl glut glm-math


【解决方案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 通过添加矩阵堆栈和反转转换顺序解决了这个问题 - 现在所有这些都已过时。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-29
  • 1970-01-01
  • 1970-01-01
  • 2020-09-15
  • 1970-01-01
相关资源
最近更新 更多