Graphics 三维光线投射算法中的光线遍历

Graphics 三维光线投射算法中的光线遍历,graphics,opengl-es,glsl,webgl,Graphics,Opengl Es,Glsl,Webgl,我正在进行体积光线投射,我很难找到计算步长的方法,这样每一步,光线都会步进到片段着色器GLSL中的新体素 我有一个三维长方体,它的所有边(x,y,z)的尺寸都不相等,我已经有了这个值,我还有一个vec3射线方向 我需要知道光线或规范化光线从立方体中击中点的起点和终点穿过的步长 从轴对齐的长方体交点,我知道tmin和tmax 我知道AABI的代码是不相关的,但如果需要的话,我将添加此代码以供参考 vec2 boxIntersection(vec3 ray_direction2, float ori

我正在进行体积光线投射,我很难找到计算步长的方法,这样每一步,光线都会步进到片段着色器GLSL中的新体素

我有一个三维长方体,它的所有边(x,y,z)的尺寸都不相等,我已经有了这个值,我还有一个vec3射线方向

我需要知道光线或规范化光线从立方体中击中点的起点和终点穿过的步长

从轴对齐的长方体交点,我知道tmin和tmax

我知道AABI的代码是不相关的,但如果需要的话,我将添加此代码以供参考

vec2 boxIntersection(vec3 ray_direction2, float origin[3]){
  
  float boxmin[3] = float[3](0.0, 0.0, 0.0);
  float boxmax[3] = float[3](1.0, 1.0, 1.0);
  vec3 invdir = 1.0/ray_direction2;

  float inv_raydirection[3] = float[3](invdir.x, invdir.y, invdir.z);
  for(int i=0; i<3; i++ ){
    float t1 = (boxmin[i]-origin[i])*inv_raydirection[i];
    float t2 = (boxmax[i]-origin[i])*inv_raydirection[i];

    tmin = min(tmin, min(t1, t2));
    tmax = max(tmax, max(t1, t2));

    if(tmax>max(tmin,0.0)){
      return vec2(tmin, tmax);
    }
    else{
      discard;
    }
  }

vec2盒交叉点(vec3射线方向2,浮动原点[3]){
float-boxmin[3]=float[3](0.0,0.0,0.0);
float-boxmax[3]=float[3](1.0,1.0,1.0);
vec3 invdir=1.0/射线方向2;
float inv_射线方向[3]=float[3](invdir.x,invdir.y,invdir.z);
对于(inti=0;imax(tmin,0.0)){
返回向量2(tmin,tmax);
}
否则{
丢弃;
}
}

感谢您的回复,我已经更新了我的问题。你能帮我解决我的问题吗!!!如果是体素,而不是碎片?,则需要3个向量,每个平面1个(x、y、z)。每个向量的长度为步进一个体素平面。使用3个起始坐标(一个在进入平面上,另两个在进入前返回到最近的其他平面),您可以步进3个向量平面,寻找最近的新平面交叉点,以获得下一个体素,当用作最近的平面交叉点时,仅向前步进平面(许多注意事项),或采用Bresenham的直线算法。用误差(y,z)替换的3个平面向量为
vec2
,误差累加器为
vec2
(y,z)将给出vox坐标和vox数,直到下一个平面y,或者zI已经阅读了多篇论文,我想我理解你的意思。请你努力在答案中多加一些词,以便我和其他将来会遇到这个问题的人能够学到更多,如果可能的话,可以举例说明。非常感谢您的回复。非常感谢!!!也许这将有助于它的立方体体素,所以你只需要调整不同大小的比例。。。这只是一个3D端口,图像最后解释了它的工作原理。感谢您的回复,我已经更新了我的问题。你能帮我解决我的问题吗!!!如果是体素,而不是碎片?,则需要3个向量,每个平面1个(x、y、z)。每个向量的长度为步进一个体素平面。使用3个起始坐标(一个在进入平面上,另两个在进入前返回到最近的其他平面),您可以步进3个向量平面,寻找最近的新平面交叉点,以获得下一个体素,当用作最近的平面交叉点时,仅向前步进平面(许多注意事项),或采用Bresenham的直线算法。用误差(y,z)替换的3个平面向量为
vec2
,误差累加器为
vec2
(y,z)将给出vox坐标和vox数,直到下一个平面y,或者zI已经阅读了多篇论文,我想我理解你的意思。请你努力在答案中多加一些词,以便我和其他将来会遇到这个问题的人能够学到更多,如果可能的话,可以举例说明。非常感谢您的回复。非常感谢!!!也许这将有助于它的立方体体素,所以你只需要调整不同大小的比例。。。它只是一个3D端口,图像最后解释了它是如何工作的