在 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 中制作两个独立的茶壶的主要内容,如果未能解决你的问题,请参考以下文章

OpenGL 缺陷 - 不需要的插值

OpenGL Transformation(openGL zh)

带有 OpenCV 和 OpenGL 的 AR

OpenGL没有将最近的片段绘制到相机

QT笔记 -- opengl

OPENGL ES 2.0 知识串讲 ——SHADER的功能&GLSL语法(I)