2010-06-24 96 views
1

我正在编写一些Java OpenGL代码(尽管原理在C++ openGL中是相同的)。我有一种情况,我想把某些物品放在其他物品上面。我可以通过禁用深度测试或通过将其设置为GL_ALWAYS来实现这些功能,并且效果很好。问题是,顶部的物品的颜色似乎被它下面的物品弄脏。我不确定它是否是照明问题,或者它是一些混合问题,但我试图显示该项目的颜色而不受其周围颜色的影响,而不考虑此项目的z位置(因为深度测试设置为始终)。有没有我应该使用的照明设置或混合设置?OpenGL混合(Java)

感谢, 杰夫

+0

有两个问题:你的意思是你希望最后绘制的东西始终显示在特定的像素中,而不管之前绘制的是什么,而不管深度如何;其次,你确定你没有在任何地方使用透明度? – DJClayworth 2010-06-24 21:23:23

+0

@DJClayworth,我希望绘制的最后一个对象是在特定点上显示的对象,正确的,没有深度测试就能很好地工作。而且,是的,我没有使用透明度。当我旋转场景时,它看起来是正确的。真的,我认为需要一个两遍渲染,我渲染场景的底部,然后是一组没有进行深度测试的对象,并在基础场景上渲染整个结果。 – 2010-06-24 22:54:06

回答

1

我认为在这种情况下,我会独自离开深度设置,但调整基于绘制顺序(对于要绘制的那些项目上的物体的Z值基于订单而不是正常的深度)。

glBegin(GL_WHATEVER); 
    for (int i=0; i<num_objects; i++) 
     glVertex(object[i].x, object[i].y, i/-100.0f); 
glEnd(GL_WHATEVER); 
+0

谢谢。在这个应用程序中,我将一些东西添加到地球表面,用户可以旋转地球。如果z值被改变,那么这些项目实际上不会在表面上。 – 2010-06-25 13:05:35