ビットマップを表示するために単純な頂点シェーダーを実装しています。4 つの頂点が定義され、各頂点シェーダーは、ビットマップの幅/高さをビューポートの幅/高さで割ったものと組み合わせて、それぞれの UV を使用して、クリップ空間の位置を変更します。かなり典型的なものです。そのためのスタブコードを次に示します。
// Project positions to clip space.
float4 clipPosition = vertexPosition * objectToClipSpaceTransform;
// Get constants.
float2 viewPort = float2(props[0], props[1]);
float2 spriteSize = float2(props[2], props[3]);
// Calculate window offset.
float2 windowOffset;
windowOffset.x = (vertexUV.x - 0.5) * spriteSize.x;
//neg because V increases down, but Y in clip-space increases up
windowOffset.y = -(vertexUV.y - 0.5) * spriteSize.y;
windowOffset /= viewPort;
clipPosition.xy += windowOffset * clipPosition.w * 2.0;
// Output shifted vertex.
vertexClipPosition = clipPosition;
私がやりたいことは、大きさが固定数のピクセルであるワールド空間で定義されたベクトルの方向にビットマップをオフセットすることです。ここで難しいのは、ワールド空間ベクトルをクリップ空間に変換する方法です。翻訳コンポーネントなしで objectToClipSpaceTransform を使用しようとしましたが、結果が正しくありません。それで、どうすればいいですか?