Здравствуйте.
У меня такая проблема — при рендеринге видимость объектов становится зависимой от того, в каком порядке их рендерить. То есть если более дальний объект перекрывается более близким, но отредререн позже, то он все равно виден.. хотя и не должен вроде
Делаю я это:
//init....
g_pd3dDevice->SetRenderState( D3DRS_ZENABLE, D3DZB_TRUE );
//....
//render
g_pd3dDevice->Clear(0,NULL,D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER,D3DCOLOR_XRGB(51,51,51),1.0f,0L);
// дальше рендерятся объекты.
Вот. Такая проблема.
Кстати, объекты я создаю сам как вертексбуферы, не знаю, может быть дело в этом?
Здравствуйте Dejvavu, Вы писали:
D>Здравствуйте.
D>У меня такая проблема — при рендеринге видимость объектов становится зависимой от того, в каком порядке их рендерить. То есть если более дальний объект перекрывается более близким, но отредререн позже, то он все равно виден.. хотя и не должен вроде
D>Делаю я это:
D>D>//init....
g_pd3dDevice->>SetRenderState( D3DRS_ZENABLE, D3DZB_TRUE );
D>//....
D>//render
g_pd3dDevice->>Clear(0,NULL,D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER,D3DCOLOR_XRGB(51,51,51),1.0f,0L);
D>// дальше рендерятся объекты.
D>
D>Вот. Такая проблема.
Покажи как инициализируется структура D3DPRESENT_PARAMETERS.
D>Кстати, объекты я создаю сам как вертексбуферы, не знаю, может быть дело в этом?
Какой формат вертекса используется?
После двух бессоных ночей даже никнейм выходит из под контроля)
Здравствуйте IgorK, Вы писали:
IK>Покажи как инициализируется структура D3DPRESENT_PARAMETERS.
D3DPRESENT_PARAMETERS d3dpp;
ZeroMemory( &d3dpp, sizeof(d3dpp) );
d3dpp.Windowed = TRUE;
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
d3dpp.BackBufferFormat = d3ddm.Format;
d3dpp.EnableAutoDepthStencil = TRUE;
d3dpp.AutoDepthStencilFormat = D3DFMT_D16;
g_pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL,hWnd,
D3DCREATE_SOFTWARE_VERTEXPROCESSING,&d3dpp,&g_pd3dDevice);
IK>Какой формат вертекса используется?
struct RO_VERTEX
{
D3DXVECTOR3 p;
D3DXVECTOR3 n;
D3DCOLOR c;
float tu,tv;
} ;
и еще — все RenderStates по умолчанию, кроме D3DRS_AMBIENT (0xcccccc) и D3DRS_LIGHTING (FALSE)
Кстати — дополнительный вопрос — существуют ли в Direct3D8 ввобще методы работы с z-буфером? (Потому как кроме упоминания D3DRS_ZENABLE я так ничего и не встретил...)
Здравствуйте IgorK, Вы писали:
IK>На первый взгляд — все ок. Если код не большой — кинь сюда куски кода где проиходит инициализация (то что казается D3D), заполнение вертекс буфферов и отрисовка. Если большой — кидай на мыло (указано в моем профиле). Будем смотреть скурпулезно
У меня получилось!!!!
Весь прикол был всего лишь в одной строке.
D3DXMatrixPerspectiveFovLH( &matProj, D3DX_PI/3.0f,1.33333f, np, fp ); //вот в этой!
g_pd3dDevice->SetTransform( D3DTS_PROJECTION, &matProj );
Так вот, параметр
np был у меня всю жизнь ноль. Случайно, подготавливая код чтобы сюда кинуть, я его поменял. На 1.0f — и все получилось!