使用计算着色器的GLSL中一周内光线跟踪的非递归光线颜色函数

使用计算着色器的GLSL中一周内光线跟踪的非递归光线颜色函数,glsl,raytracing,opengl-4,compute-shader,non-recursive,Glsl,Raytracing,Opengl 4,Compute Shader,Non Recursive,我正在尝试使用OpenGL4.3中的计算着色器编写实时光线跟踪器。我知道这是一个颇受欢迎的问题。 我已经检查了,并且,但是那里提供的架构并不真正符合我的用例 我只是想把p.Shirley的书中提供的ray\u color函数转换成一个非递归函数 所述的ray\u color功能: color-ray\u-color(常量光线&r、常量可命中&world、int-depth){ 点击记录记录; //如果我们超过了光线反弹限制,就不会再聚集光线。 如果(深度> p>我已经确认了实现是正确的。这里是G

我正在尝试使用OpenGL4.3中的计算着色器编写实时光线跟踪器。我知道这是一个颇受欢迎的问题。 我已经检查了,并且,但是那里提供的架构并不真正符合我的用例

我只是想把p.Shirley的书中提供的
ray\u color
函数转换成一个非递归函数

所述的
ray\u color
功能:

color-ray\u-color(常量光线&r、常量可命中&world、int-depth){
点击记录记录;
//如果我们超过了光线反弹限制,就不会再聚集光线。

如果(深度> p>我已经确认了实现是正确的。这里是GLSL版本和C++版本,供将来参考。 它应该为以后实现更复杂的东西提供一个方向

//glsl版本
vec3光线颜色(光线r中、场景中、int深度){
//
雷·鲁因;
r_in.origin=r.origin;
r_in.方向=r.方向;
vec3-bcolor=vec3(1);
while(true){

如果(深度我认为
if(depth@Spektre您是对的,但如果我没有弄错的话,本书中使用的原始代码中也存在同样的问题,我的目标是在本书中生成代码的非递归版本。您可以随意修改它。此外,我还没有机会在很多设置上测试此代码。我相当确信您的备注对于具有大量金属表面的场景非常有效。但函数应给出总体思路。