在Opengl中渲染。重叠对象

时间:2011-04-17 04:20:32

标签: c++ opengl

我无法在OpenGL中渲染重叠对象。

我正在调用绘制对象的函数,这样如果我调用drawB()然后调用drawA(),则A位于B之上,B可能会被A隐藏。

一切正常,直到发生A是一条线(GL_LINES)而B是一个多边形(GL_POLYGON)。如果发生这种情况,应将B放置在底部,将其绘制在A。

此时我已禁用GL_DEPTH_TEST。我尝试启用它,我尝试了glDepthMask和glPolygonOffset,但没有一个工作。我认为我一直在使用它们。 任何想法如何以正确的顺序绘制这些对象?

**编辑: 显然问题是我没有清除GL_COLOR_BUFFER_BIT,但我不是为了速度而清除。我必须找到一种不擦除gl_color_buffer_bit的方法,按顺序绘制对象**

它有一个由。定义的ortographic投影 glOrtho(r.left(),r.right(),r.bottom(),r.top(),0,2);

调用该函数时,将绘制背景对象,然后绘制前景。 我希望背景对象在前景下面绘制。

我的想法是我有两个布局,一个用于前景,一个用于背景。首先,背景中的每个对象都会自行绘制。然后前景中的每个对象都做同样的事情。每个对象都有一个显示列表,根据需要变换自己的坐标系。该显示列表的想法是允许对象嵌套,每个对象都有自己的坐标系,尽管它们是父坐标系。

在某种程度上,我在后台有一组对象

glBegin (GL_POLYGON) ;
        for (angle = 0; angle<PI * 2;angle+=1){
            glVertex2f (X + sin(angle) * Radius, Y + cos(angle) * Radius);
        }
        glEnd () ;

另一个对象,在前景布局中

 glBegin(GL_LINES);
            glVertex2f(m_x[m_currentPositionP1],m_y[m_currentPositionP1]);
            glVertex2f(m_x[m_currentPositionP],m_y[m_currentPositionP]);
        glEnd();

但这些线条看起来被多边形隐藏了

1 个答案:

答案 0 :(得分:1)

只要你画到前后,

glVertex2f会得到很好的效果。

由于您需要不同的订单,因此需要指定Z坐标以确定哪个位于顶部。 glVertex3f ftw。