我需要提高矿井大气散射GLSL片段着色器之一的功能的精度,该着色器可计算单射线与轴对齐的椭球之间的交点。
这是矿山大气散射着色器的核心功能。旧的原始着色器已启用,floats并且可以正常渲染,但是添加缩放后,我发现距离相对较小时会失去精度。在浮子上,地球的可用距离仅为0.005 AU(天文单位)。因此,我尝试将关键功能移植到该端口上,double并且它有所帮助,因此现在可用距离约为1.0 AU(带有较小的伪像)
这是doubleFragment Shader中函数的版本(旧版本的源代码已弃用!!!)
#extension GL_ARB_gpu_shader_fp64 : enable
double abs(double x) { if (x<0.0) x=-x; return x; }
// compute length of ray(p0,dp) to intersection with ellipsoid((0,0,0),r) -> view_depth_l0,1
// where r.x is elipsoid rx^-2, r.y = ry^-2 and r.z=rz^-2
float view_depth_l0=-1.0,view_depth_l1=-1.0;
bool _view_depth(vec3 _p0,vec3 _dp,vec3 _r)
{
double a,b,c,d,l0,l1;
dvec3 p0,dp,r;
p0=dvec3(_p0);
dp=dvec3(_dp);
r =dvec3(_r );
view_depth_l0=-1.0;
view_depth_l1=-1.0;
a=(dp.x*dp.x*r.x)
+(dp.y*dp.y*r.y)
+(dp.z*dp.z*r.z); a*=2.0;
b=(p0.x*dp.x*r.x)
+(p0.y*dp.y*r.y)
+(p0.z*dp.z*r.z); b*=2.0;
c=(p0.x*p0.x*r.x) …Run Code Online (Sandbox Code Playgroud) OpenGL中是否有任何Ray球体交互代码.我真的需要了解该程序,所以我正在寻找它,但找不到它.这似乎是流行的问题,但我只能找到公式和基本原理而不是任何一个例子. http://wiki.cgsociety.org/index.php/Ray_Sphere_Intersection
我不知道该如何去做.这就是我得到的:http://www.sendspace.com/file/8gb6fj
你有没有人做过这件事,或者知道某些来源我可以获得该计划?