在opengl中重叠矩形并在底部裁剪

Posted

技术标签:

【中文标题】在opengl中重叠矩形并在底部裁剪【英文标题】:Overlaping rectangels and clipping at the bottom in opengl 【发布时间】:2014-11-04 19:43:05 【问题描述】:

我必须使用 opengl(旧版本)制作一些 3D 人物。我创建了 3 个GL_POLYGON 矩形,它们相互连接并且具有不同的颜色。

我的问题是,当图形旋转时,最后添加的颜色(最后添加的矩形)总是在其他颜色之上。例如,青色的在粉红色和黄色的上方,而粉红色的在黄色的上方。我还注意到图底部的一些剪裁,我认为这是由gluPerspective() 引起的。我想要实现的是让眼睛从 z+ 向中心看,并且图形围绕 y+ 轴旋转(我认为我设法做到了),并且还去除了重叠和剪裁。

任何想法为什么会发生这种情况以及如何解决它?

代码如下:

#include <GL/glfw.h>

int main()

int     width, height;
int     frame = 0;
bool    running = true;

glfwInit();

if( !glfwOpenWindow( 700, 800, 0, 0, 0, 0, 0, 0, GLFW_WINDOW ) )

    glfwTerminate();
    return 0;


glfwSetWindowTitle("GLFW Application");

while(running)

    frame++;

    glfwGetWindowSize( &width, &height );
    height = height > 0 ? height : 1;

    glViewport( 0, 0, width, height );

    glClearColor( 0.0f, 0.0f, 0.0f, 0.0f );
    glClear( GL_COLOR_BUFFER_BIT );

    glMatrixMode( GL_PROJECTION );
    glLoadIdentity();
    gluPerspective( 65.0f, (GLfloat)width/(GLfloat)height, 1.0f, 100.0f );


    glMatrixMode( GL_MODELVIEW );
    glLoadIdentity();
    gluLookAt(0.0f, 0.0f, 40.0f,
            0.0f, 0.0f, 0.0f,
            0.0f, 1.0f, 0.0f );


    glRotatef(frame, 0.0f, 1.0f, 0.0f);


    glColor3ub(255,255,0);
    glBegin( GL_POLYGON );
      glVertex3f(5.0f, 0.0f, 0.0f);
      glVertex3f(0.0f, 0.0f, 0.0f);
      glVertex3f(0.0f, 10.0f, 0.0f);
      glVertex3f(5.0f, 10.0f, 0.0f);
    glEnd();
     glColor3ub(255,0,255);
    glBegin( GL_POLYGON );
      glVertex3f(5.0f, 0.0f, -2.0f);
      glVertex3f(0.0f, 0.0f, -2.0f);
      glVertex3f(0.0f, 10.0f, -2.0f);
      glVertex3f(5.0f, 10.0f, -2.0f);
    glEnd();
    glColor3ub(0,255,255);
    glBegin( GL_POLYGON );
      glVertex3f(5.0f, 0.0f, 0.0f);
      glVertex3f(5.0f, 0.0f, -2.0f);
      glVertex3f(5.0f, 10.0f, -2.0f);
      glVertex3f(5.0f, 10.0f, 0.0f);
    glEnd();

    glfwSwapBuffers();

    running = !glfwGetKey(GLFW_KEY_ESC) && glfwGetWindowParam( GLFW_OPENED);

glfwTerminate();

return 0;

【问题讨论】:

0/10 并深入研究文档... @j-p 我尝试了文档,但我无法理解所有内容。如果不先查资料,我不会寻求帮助。 我在你的代码中没有看到深度特征,尝试寻找depth bufferGL_DEPTH_TEST,如果没有实现,绘制顺序规则... @j-p 谢谢我的朋友,我添加了glEnable( GL_DEPTH_TEST );glClear( GL_COLOR_BUFFER_BIT+GL_DEPTH_BUFFER_BIT );,它成功了。您可以发表您的评论作为答案,以便我接受。 【参考方案1】:

我在你的代码中没有看到深度特征,尝试寻找depth bufferGL_DEPTH_TEST,如果没有实现,绘制顺序规则..

【讨论】:

以上是关于在opengl中重叠矩形并在底部裁剪的主要内容,如果未能解决你的问题,请参考以下文章

如何投影openGL控件的顶部和底部区域

OpenGL 裁剪

使用 lwjgl/opengl 进行简单裁剪

OpenGL非常大的网格裁剪

光照在 OpenGL 中不显示

OpenGL-坐标系