是否可以在GLSL中编写着色器以便我可以将OpenGL转换为光线跟踪器?如下所示。
glUseProgram(rayTracer);
//than do anything you do in OpenGL normally
glEnable(GL_LIGHT0);
gl....//Set light parameters
...
//Draw The theme
glDrawArray(.......);
结果将由光线跟踪渲染。例如:物理上正确的照明
我试过这个。但是我失败了,我无法在顶点/片段着色器中获取所有三角形顶点和颜色/纹理以进行光线追踪。
是否可以创建这种着色器?如果可能的话,我该如何以及在哪里开始?
答案 0 :(得分:1)
不,这是不可能的。光线追踪是一种高尔夫球照明模型。这意味着需要使用所有对象和光源访问整个场景,原因很明显。渲染pipleine OpenGL实现从不会一次看到多个原语。虽然可以在GPU上进行射线对比,但这与仅编写一些可以作为替代替换的着色器完全不同,同时保持渲染算法的其余部分相同。您需要完全重新数字化数据,并且GL绘图功能完全没有用处。
答案 1 :(得分:0)
从OpenGl中检查这个例子。 http://www.openglsuperbible.com/example-code/
有一个名为" raytracer"的例子。
在Windows / Visual studio express上,为了使其正常运行, 您可能希望将路径更改为绝对路径,使用" \\"目录分隔符而不是" /" in" load_shaders()"功能
然后,+ / - 键改变递归深度,以及在源代码中找到的其他控制键。
也许这个例子并不像你期望的那么简单, 但是......在这里你可以开始。