【问题标题】:Render in Opengl. Overlapping Objects在 Opengl 中渲染。重叠对象
【发布时间】:2011-04-17 04:20:32
【问题描述】:

我在 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 的方法,按顺序绘制对象**

它的正投影定义为 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();

但是线条似乎被多边形隐藏了

【问题讨论】:

  • 你能展示一个源代码的sn-p来展示你是如何绘图的吗?
  • 这有点复杂,但我已经编辑了帖子,添加了信息。源码在svn:qoglplot.svn.sourceforge.net/svnroot/qoglplot/trunk,文件夹example,有个程序叫simple。这个程序显示了问题

标签: c++ opengl


【解决方案1】:

glVertex2f 只要你从后往前画,效果就会很好。

由于您需要不同的顺序,因此您需要指定 Z 坐标以确定哪个在顶部。 glVertex3fftw.

【讨论】:

  • 我是从后到前绘制的。我试过使用 glVertex3f,以防万一,但它不起作用。我认为我的代码有问题
  • @Luciano:根据你的问题,你是从前到后画的。可能只是一个错字,但它确实令人困惑,需要更正。
猜你喜欢
  • 2016-05-10
  • 2015-01-19
  • 2013-10-30
  • 1970-01-01
  • 2017-01-08
  • 1970-01-01
  • 2011-01-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多