1

Panda3D には、次のコードがあります。

self.manager = FilterManager(base.win, base.cam)

self.sceneTex = Texture("scene")
self.depthTex = Texture("depth")


self.quad = self.manager.renderSceneInto(colortex=self.sceneTex, depthtex = self.depthTex)

...   

上記を実行してビュー バッファ (show-buffers #t) を有効にすると、"sceneTex" テクスチャが正しく表示されます。ただし、「depthTex」は、カメラをどこに移動しても常に空白 (すべて黒) です。誰が何が悪いのか知っていますか?

ありがとう

4

2 に答える 2

0

おそらく、深度テストの書き込みを無効にしましたか?明らかなアーティファクトが得られない場合でも(シーンによって異なります)、デプスバッファなしで実行できます。デプスバッファの書き込みに関するパンダのチュートリアルを見てください。また、デプスソートでうまく機能するシーンもあります(おそらくこれをテストしましたが、デプスバッファを無効にするコードを元に戻しませんでしたか?)

于 2011-05-27T12:49:51.000 に答える
0

私は同じ問題に遭遇しました。深度を抽出するには、カスタム シェーダーを作成する必要がありました。8 ビットを超える深度情報が必要だったので、画像の RGB コンポーネントに入れることができる 3 つの 8 ビット フィールドに深度を変換する必要がありました。

Panda3D Python の場合:

# Set up Shader
dcam = loader.loadShader('Dcam.sha')
# render everything through this camera and shader
self.terrain.getRoot().setShader(dcam)

シェーダーの入力と出力も設定する必要があります (vtx_position、mat_modelproj など)。Panda3D ドキュメントの例を参照してください。

Dcam.sha:

//Cg

void vshader(float4 vtx_position : POSITION,
             uniform float4x4 mat_modelproj,
             out float4 l_position : POSITION,
             out float4 l_pos : TEXCOORD0)
{
    float4 position = vtx_position;
    l_pos = mul(mat_modelproj, position);
    l_position = l_pos;
}

void fshader(in float4 l_pos : TEXCOORD0,
             out float4 o_color : COLOR)
{
    float z = (l_pos.z / l_pos.w) * 0.5 + 0.5;
    float zres = 16777216.0 * z;
    float v0 = round(zres / 65536.0);
    zres = zres - 65536.0 * v0;
    float v1 = round(zres / 256.0);
    zres = zres - 256.0 * v1;
    float v2 = round(zres);
    o_color = float4(v0, v1, v2, 1);
}
于 2016-12-01T17:21:34.110 に答える