0

テクスチャ配列へのレンダリングを可能にするはずの OpenGL 実装があります。これは、ジオメトリ シェーダーで別のレイヤーを選択することによって行われます。ただし、問題は、ATI ドライバーのバグが原因でこれが機能しないことです。私は本当にこれを機能させたいと思っており、続行する方法についていくつかの選択肢を考え出しました:

  1. Direct3D での実装を作り直します。ATI ドライバーは D3D で優れていますか?
  2. 回避策を考えてください(ただし、何も考えられません)。
  3. nVidia カードを購入します。

私は何をすべきか?他の選択肢はありますか?

4

2 に答える 2

1

これは時代遅れの方法ですが、ATIカードで機能するはずです。これにより、深度マップがテクスチャにレンダリングされますが、ほとんど何でもレンダリングできます。

// generate texture (in init method)
init(){...
glGenTextures(1, &depthTexture);
glBindTexture(GL_TEXTURE_2D, depthTexture);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, 512,
512, 0, GL_DEPTH_COMPONENT,GL_FLOAT, 0);}

// draw the mesh to fill the depth buffer
glDisable(GL_LIGHTING);
draw_mesh();
// copy depth buffer to texture
glBindTexture(GL_TEXTURE_2D, depthTexture);
glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, 512, 512);
// clear screen
cls();
// enable texturing and bind the depth texture
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, depthTexture);
// overlay texture to fullsizequad
drawFullsizeQuad();
于 2011-05-24T09:46:27.803 に答える
0

ATI にバグを報告することを検討してください。テスト ケース (レイヤード レンダリング) は小さく、100% 再現可能である必要があります。

于 2011-04-17T02:49:58.090 に答える