DOD
Зарегистрирован: 14.10.2005 Сообщения: 3
|
Добавлено: Чт Окт 20 2005 21:14 Заголовок сообщения: Загрузка 3д-моделей(х-формат) |
|
|
У меня такая вот проблема.
Я в Direct3D 9(C++) загружаю Х-файл с помощью след. кода:
Код: |
LPD3DXMESH pMesh = NULL; // Меш
LPD3DXBUFFER pMeshBuffer = NULL; // Материальный буфер
D3DMATERIAL9* pMeshMaterials = NULL; // Материал
LPDIRECT3DTEXTURE9* pMeshTextura = NULL; // Техтура для Меша
DWORD dwNumber; // Индекс
if (FAILED(D3DXLoadMeshFromX("Tiger.x", D3DXMESH_SYSTEMMEM,
pDirect3DDevice, NULL, &pMeshBuffer, NULL,
&dwNumber, &pMesh)))
return E_FAIL;
// Мы должны извлечь материальные свойства и названия{имена} структуры от
// pD3DXMtrlBuffer
D3DXMATERIAL* D3DXMeshMaterials = (D3DXMATERIAL *)pMeshBuffer->GetBufferPointer();
pMeshMaterials = new D3DMATERIAL9[dwNumber];
pMeshTextura = new LPDIRECT3DTEXTURE9[dwNumber];
for( DWORD i=0; i<dwNumber; i++ )
{
// Копируем материал
pMeshMaterials[ i ] = D3DXMeshMaterials[i].MatD3D;
// Установить окружающего свет
pMeshMaterials[ i ].Ambient = pMeshMaterials[i].Diffuse;
// Загружаем текстуру
if( FAILED( D3DXCreateTextureFromFile( pDirect3DDevice,
D3DXMeshMaterials[i].pTextureFilename,
&pMeshTextura[i] ) ) )
pMeshTextura[ i ]=NULL;
}
// Уничтожаем материальный буфер
pMeshBuffer->Release(); |
Затем в рендеринге :
Код: |
for( DWORD i=0; i<dwNumber; i++ )
{
// Устанавливаем материал и текстуру
pDirect3DDevice->SetMaterial( &pMeshMaterials[i] );
pDirect3DDevice->SetTexture( 0,pMeshTextura[i] );
// Рисуем Меш
pMesh->DrawSubset( i );
}
|
В результате объект отображается без теней. Кроме того,если на одной линии зрения одна за другой две плоскости,то ближняя к камере не отображается,т.е. как бы перекрывается дальней,хотя должно быть наоборот.
И ещё:объекты отображаются без учета перспективы(хотя Z-буффер включен).Подскажите,в чем проблема.
пишите на ZZ_Top@bk.ru,если нужны скрины |
|