我正在尝试创建一个简单的光线跟踪器.我有一个透视图,可以显示光线以便进行调试.
在我下面的示例屏幕截图中,我有一个白色球体进行光线跟踪,一个绿色球体代表眼睛.
光线绘制为线条
glLineWidth(10.0f)
如果光线错过了球体,则会给出颜色
glColor4ub(100,100,100,100);
在我的初始化代码中,我有以下内容:
glEnable(GL_ALPHA_TEST);
glAlphaFunc(GL_GREATER, 0.0f);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA,GL_SRC_ALPHA);
您可以在屏幕截图中看到,由于某种原因,在透视视点和球体之间传递的光线与球体后面的轴线颜色混合,而不是与球体本身混合.
这是一个截图:

谁能解释我在这里做错了什么?
谢谢!!
你在绘制球体之前是否有可能投射这些光线?
然后,如果启用Z缓冲区,则不会渲染球体的碎片,因为这些射线部分更接近.当您绘制半透明的东西(使用混合)时,您应该仔细观察绘制内容的顺序.
事实上,我认为你不能以任何合理的方式使用Z-buffer和光线追踪过程.您必须手动跟踪Z顺序.虽然我们处于这种状态,但OpenGL可能不是可视化光线跟踪过程的最佳API.(它可能会比纯软件光线跟踪器慢得多)