1

OpenGL では、3D テクスチャを作成した後、常に GL_QUADS などのプロキシ ジオメトリを描画して 3D テクスチャを格納し、この関数 glTexCoord3f でテクスチャ座標を設定する必要があります。

しかし、CUDA で 3D テクスチャを使用する場合、glTexCoord3f のようなテクスチャ座標を示す関数が見つかりませんでした。実際には、CUDA 配列を使用して、その配列をテクスチャにバインドするだけです。この後、テクスチャ フェッチ関数 tex3D を使用して値を取得できます。

したがって、これまでにテクスチャ座標を設定したことがないにもかかわらず、tex3D 関数がどのように正しく実行されるのかについて、私は非常に混乱しています????

回答ありがとうございます。

4

1 に答える 1

2

テクスチャ座標は、tex3D()フェッチ関数への入力引数です。

より詳細には、OpenGLで呼び出すglTexCoord3f()と、次に発行される頂点のテクスチャ座標が指定されます。レンダリングされたポリゴンの各ピクセルのテクスチャ座標は、ポリゴンの頂点(通常は三角形)で指定されたテクスチャ座標から補間されます。

CUDAには、ポリゴンの概念や座標の補間はありません。代わりに、各スレッドは、テクスチャ座標を計算(またはロード)し、フェッチごとに明示的に指定する責任があります。これがtex3D()出番です。

GLSLピクセルシェーダーを使用してOpenGLでポリゴンをシェーディングする場合、実際にはCUDAと非常によく似た操作を行うことに注意してください。つまり、テクスチャフェッチ関数を明示的に呼び出し、座標を渡します。これらの座標は任意に計算できます。違いは、各ピクセルで補間される入力座標を使用するオプションがあることです。(そして、各ピクセルをスレッドと考えることができます!)

于 2012-04-13T05:58:55.457 に答える