1

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

4

2 に答える 2