问题描述
我正在为学校开展一个项目,我需要在该项目中实施鱼眼着色器,但我正在努力确定顶点深度值的过程。我知道对于空间 P1 = (x,y,z,w) 中的一个点 P * 我的投影矩阵应该产生一个新点 P2 = (a,b,c,d) 其中对于附近和远剪裁平面 P2.c/P2.d 产生一个介于 0 和 1 之间的数字。
我的 hlsl 顶点着色器包含此代码,其中 input.Position 是原始顶点位置
float distance3d(float4 input) // Finds 3d hypotenuse
{
return sqrt(input[0] * input[0] + input[1] * input[1] + input[3] * input[3]);
}
//Vertex Position data
float4 worldPosition = mul(input.Position,World); // object to world xform
float4 viewPosition = mul(worldPosition,View); // world to camera xform
output.Position = mul(viewPosition,Projection); // perspective xform
float z = output.Position[3];
float distance = distance3d(output.Position) * (z < 0 ? -1 : 1);
float f = Projection[2][2];
float n = Projection[3][2];
output.Position[3] = distance;
output.Position[2] = -distance * f + square * n;
我的投影矩阵是使用此代码生成的。
new Matrix( -focalLength * Math.Sin(-FOV),-focalLength * Math.Sin(-FOV),-farPlane / (farPlane - nearPlane),-1,-farPlane / (farPlane - nearPlane) * nearPlane,0);
法线投影:https://imgur.com/Z00CPP3
鱼眼投影:https://imgur.com/0qPv87V
如您所见,远处的三角形呈现在近处三角形的前面。
感谢您的帮助。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)