【问题标题】:Math behind computing world space view direction - cg shader Unity计算世界空间视图方向背后的数学 - cg shader Unity
【发布时间】:2016-01-05 07:48:16
【问题描述】:

有人可以指出使用以下等式计算世界空间视图方向背后的解释:

float3 worldSpaceViewDir = _WorldSpaceCameraPos.xyz - worldPos;
  1. 为什么我们要从 worldspaceCameraPos 中减去 worldspacePos 来得到 viewDirection。
  2. 可能是,我应该问到底什么是世界空间视图方向?

当我尝试进行数学运算时,我得到以下结果。 例子 : 一个点位于 (0,5,0) 世界位置,相机位于 (0,0,50) 世界位置并获取世界视图方向:

worldSpaceViewDir = _WorldSpaceCameraPos.xyz - worldPos
= (0,0,50) - (0,5,0)
= (0,-5,50)

这是怎么回事?

【问题讨论】:

    标签: unity3d shader


    【解决方案1】:
    float3 worldSpaceViewDir = _WorldSpaceCameraPos.xyz - worldPos;
    

    这给出了从世界坐标中的对象位置到世界坐标中的相机位置的方向。

    我猜你会期望这些数据是相机正在寻找的地方。 在shader方面,你不会这么想,没关系。

    假设您希望像素在相机正前方时显示为白色(而在视线移开时显示为黑色)。你会做一个点积产品来看看方向是否与法线对齐,但相机是否在看它并不重要。您的像素获取信息,如果相机正对,那么它将渲染,但在此之前,着色器并不关心并做它应该做的。

    注意CG里已经有这个方法了:

    float3 WorldSpaceViewDir (float4 v) 
    

    【讨论】:

    • 谢谢fafase!我得到了计算的点积部分(用于计算菲涅耳)。但我试图理解笛卡尔/几何解释:float3 worldSpaceViewDir = _WorldSpaceCameraPos.xyz - worldPos;
    • 它是从顶点(或像素)到相机的向量。这与顶点(或像素)的法线或相机的方向无关。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多