Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unity3d 计算世界空间视图方向背后的数学-cg着色器统一_Unity3d_Shader - Fatal编程技术网

Unity3d 计算世界空间视图方向背后的数学-cg着色器统一

Unity3d 计算世界空间视图方向背后的数学-cg着色器统一,unity3d,shader,Unity3d,Shader,有人能告诉我使用以下等式计算世界空间视图方向背后的解释吗 float3 worldSpaceViewDir = _WorldSpaceCameraPos.xyz - worldPos; 为什么我们要从worldspaceCameraPos中减去worldspacePos来获得viewDirection 也许,我应该问世界空间观的方向到底是什么 当我尝试做数学时,以下是我得到的。 例子: 点位于(0,5,0)世界位置,相机位于(0,0,50)世界位置,要获取世界视图方向: worldSpaceV

有人能告诉我使用以下等式计算世界空间视图方向背后的解释吗

float3 worldSpaceViewDir = _WorldSpaceCameraPos.xyz - worldPos;
  • 为什么我们要从worldspaceCameraPos中减去worldspacePos来获得viewDirection
  • 也许,我应该问世界空间观的方向到底是什么
  • 当我尝试做数学时,以下是我得到的。 例子: 点位于(0,5,0)世界位置,相机位于(0,0,50)世界位置,要获取世界视图方向:

    worldSpaceViewDir = _WorldSpaceCameraPos.xyz - worldPos
    = (0,0,50) - (0,5,0)
    = (0,-5,50)
    
    为什么这是视图方向

    float3 worldSpaceViewDir = _WorldSpaceCameraPos.xyz - worldPos;
    
    这将提供从世界坐标中的对象位置到世界坐标中的摄影机位置的方向

    我猜你会期望这些数据在摄像机所看到的地方。 就着色器而言,您不会这样想,这并不重要

    假设您希望一个像素在相机正前方时显示为白色(而在向外看时显示为黑色)。你可以做点积,看看方向是否与法线对齐,但相机是否在看它并不重要。您的像素获取信息,如果摄影机朝向,则将进行渲染,但在此之前,着色器并不关心并执行它应该执行的操作

    请注意,CG中已有此方法:

    float3 WorldSpaceViewDir (float4 v) 
    

    谢谢你,法法斯!我得到计算的点积部分(用于计算菲涅耳)。但我试图理解笛卡尔/几何解释:float3 worldSpaceViewDir=\u WorldSpaceCameraPos.xyz-worldPos;它是从顶点(或像素)到摄影机的向量。这与顶点(或像素)的法线或摄影机的方向无关。