我想知道如何确定 HLSL 中方法 cross 的方向。我的意思是在 OpenGL 中,我们可以使用右手法则来获得结果,而在 direct3d 中我们可以使用左手法则。事情是这样的,我们使用哪个规则来获取 HLSL 中结果的方向?感谢大家 。事情是这样的,这些天我在研究 3D 技术,当我在广告牌上做运动时,我遇到了一个问题。在本书的第12章中,有一个关于广告牌的练习,作者给出了一个实现广告牌的顶点着色器的例子。这是代码:
OutputVS AABillBoardVS(
float3 posL : POSITION0,
float3 bbOffset : TEXCOORD0, // Offsets to world space position.
float2 tex0: TEXCOORD1)
{
// Zero out our output.
OutputVS outVS = (OutputVS)0;
// Vertex world position without rotation applied to make
// face the camera.
float3 tempPosW = posL + bbOffset;
float3 look = gEyePosW - tempPosW;
look.y = 0.0f; // axis-aligned, so keep look in xz-plane.
look = normalize(look);
float3 up = float3(0.0f, 1.0f, 0.0f);
float3 right = cross(up, look);
// Rotate to make face the camera.
float3x3 R;
R[0] = right;
R[l] = up;
R[2] = look;
// Offset to world position.
float3 posW = mul(posL, R) + bbOffset;
// Transform to homogeneous clip space.
outVS.posH = mul(float4(posW, 1.0f), gViewProj);
// Pass on texture coordinates to be interpolated in
// rasterization.
outVS.tex0 = tex0;
// Done--return the output.
return outVS;
}
当我使用上面的代码时,它不起作用。所以我检查了它,并将右向量的计算更改为float3 right = cross(look, up); 结果很好。所以,我不明白为什么要用look来交叉,结果是正确的向量。