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

在以正常方式使用OpenGL时,是否可以使用GLSL进行光线跟踪,opengl,glsl,raytracing,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(.......); 结果将由光线跟踪渲染。物理校正照明 我试过这个。但我失败了,因为我无法在顶点/片段着色器

是否可以在GLSL中编写着色器,以便将OpenGL转换为光线跟踪器?类似下面的内容

glUseProgram(rayTracer);
//than do anything you do in OpenGL normally
glEnable(GL_LIGHT0);
gl....//Set light parameters
...
//Draw The theme
glDrawArray(.......);
结果将由光线跟踪渲染。物理校正照明

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


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

查看OpenGl superbible中的示例。

有一个例子叫做“光线跟踪器”

在Windows/Visual studio express上,要使其正确运行, 您可能希望使用“\\”目录分隔符而不是“/”将路径更改为绝对路径 在“加载着色器()”函数中

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

也许这个例子并不像你想象的那么简单,
但是您可以从这里开始。

不,这是不可能的。光线跟踪是一种golbal照明模型。这意味着出于明显的原因,需要访问包含所有对象和光源的整个场景。渲染pipleine OpenGL实现一次只能看到一个基本体。虽然可以在GPU上进行光线渲染,但这与只编写一些着色器完全不同,这些着色器可以作为替代品使用,而渲染算法的其余部分保持不变。您需要完全重新格兰化数据,而GL绘图功能已不再有用。

一句话:不。使用OpenGL实现光线跟踪器是可能的(虽然不是很简单),但它将不会以您想象的方式工作。