Текстура глубины в Panda3D - PullRequest
       20

Текстура глубины в Panda3D

1 голос
/ 08 октября 2010

В 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" выглядит правильно. Однако «глубина» всегда пустая (все черное) независимо от того, куда я перемещаю камеру. Кто-нибудь знает, что не так?

Спасибо

Ответы [ 2 ]

0 голосов
/ 01 декабря 2016

Я столкнулся с той же проблемой.Мне пришлось создать собственный шейдер, чтобы извлечь глубину.Поскольку мне требовалось более 8 бит информации о глубине, мне пришлось преобразовать глубину в 3 8-битных поля, которые могли бы входить в компоненты RGB изображения.

В 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);
}
0 голосов
/ 27 мая 2011

Возможно, вы отключили запись теста глубины? Даже если вы не можете получить никаких явных артефактов (зависит от вашей сцены), вы можете работать без буфера глубины. Посмотрите в уроке panda о записи в буфер глубины , он также расскажет вам о некоторых сценах, которые лучше работают с сортировкой по глубине (вы, возможно, проверяли это, но не отменяли код отключения буфера глубины?)

...