如何解决3D射线投射算法中的射线遍历
我正在研究体积射线投射,并且很难找到计算步长的方法,以便每一步射线都可以步入片段着色器GLSL中的新体素。
我有一个3D尺寸的盒子,在所有侧面(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;
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。