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);に変更しました。結果は良好です。そのため、ルックを使用して交差させ、結果が正しいベクトルになる理由がわかりませんでした。