在以正常方式使用OpenGL时,是否可以使用GLSL进行光线追踪

时间:2014-10-18 14:46:47

标签: opengl glsl raytracing

是否可以在GLSL中编写着色器以便我可以将OpenGL转换为光线跟踪器?如下所示。

glUseProgram(rayTracer);
//than do anything you do in OpenGL normally
glEnable(GL_LIGHT0);
gl....//Set light parameters
...
//Draw The theme
glDrawArray(.......);

结果将由光线跟踪渲染。例如:物理上正确的照明

我试过这个。但是我失败了,我无法在顶点/片段着色器中获取所有三角形顶点和颜色/纹理以进行光线追踪。

是否可以创建这种着色器?如果可能的话,我该如何以及在哪里开始?

2 个答案:

答案 0 :(得分:1)

不,这是不可能的。光线追踪是一种高尔夫球照明模型。这意味着需要使用所有对象和光源访问整个场景,原因很明显。渲染pipleine OpenGL实现从不会一次看到多个原语。虽然可以在GPU上进行射线对比,但这与仅编写一些可以作为替代替换的着色器完全不同,同时保持渲染算法的其余部分相同。您需要完全重新数字化数据,并且GL绘图功能完全没有用处。

答案 1 :(得分:0)

从OpenGl中检查这个例子。 http://www.openglsuperbible.com/example-code/

有一个名为" raytracer"的例子。

在Windows / Visual studio express上,为了使其正常运行, 您可能希望将路径更改为绝对路径,使用" \\"目录分隔符而不是" /" in" load_shaders()"功能

然后,+ / - 键改变递归深度,以及在源代码中找到的其他控制键。

也许这个例子并不像你期望的那么简单, 但是......在这里你可以开始。