Cackao sam malo po Sample Framework (Microsoft DirectX 9.0 SDK Update (October 2004)) i video zgodnu klasicu CDXUTMesh pa sam odlucio da ucitavanje i prikazivanje mesh-eva prepustim toj klasi. Dok sam sve radio sam (kao u tutorijalu gde prikazuje tigra) sve je lepo radilo, ali od kad mi CDXUTMesh pomaze svi mesh-evi su potpuno crni. U cemu je problem?
Evo i jednog malog primera:
Da li neko zna u cemu je problem? U "Terrain.X" fajlu je sve ok. Tu su podaci o vertexima, indexima, normalama, materijalima. Textura je na pravom mestu i ucita se lepo. Kada otvorim "Terrain.X" u Mesh Viewer-u lepo se vidi... da li da i dalje pokusavam da radim sa CDXUTMesh ili mi je bolje da se vratim na stari oprobani nacin?
Evo i jednog malog primera:
Code:
#include "dxstdafx.h"
#include "resource.h"
CDXUTMesh g_Terrain;
D3DXVECTOR3 vecEye(0.5f, 0.7f, -0.6f);
D3DXVECTOR3 vecAt (0.5f, 0.0f, 0.53f);
D3DXVECTOR3 vecUp (0.0F, 1.0F, 0.0f);
HRESULT CALLBACK OnCreateDevice( IDirect3DDevice9* pd3dDevice, const D3DSURFACE_DESC* pBackBufferSurfaceDesc );
HRESULT CALLBACK OnResetDevice( IDirect3DDevice9* pd3dDevice, const D3DSURFACE_DESC* pBackBufferSurfaceDesc );
void CALLBACK OnFrameMove( IDirect3DDevice9* pd3dDevice, double fTime, float fElapsedTime );
void CALLBACK OnFrameRender( IDirect3DDevice9* pd3dDevice, double fTime, float fElapsedTime );
void CALLBACK OnLostDevice();
void CALLBACK OnDestroyDevice();
INT WINAPI WinMain( HINSTANCE, HINSTANCE, LPSTR, int )
{
DXUTSetCallbackDeviceCreated( OnCreateDevice );
DXUTSetCallbackDeviceReset( OnResetDevice );
DXUTSetCallbackDeviceLost( OnLostDevice );
DXUTSetCallbackDeviceDestroyed( OnDestroyDevice );
DXUTSetCallbackFrameRender( OnFrameRender );
DXUTSetCallbackFrameMove( OnFrameMove );
DXUTSetCursorSettings( true, true );
DXUTInit( true, true, true );
DXUTCreateWindow( L"FirstGame" );
DXUTCreateDevice( D3DADAPTER_DEFAULT, true, 640, 480, NULL, NULL );
DXUTMainLoop();
return DXUTGetExitCode();
}
HRESULT CALLBACK OnCreateDevice( IDirect3DDevice9* pd3dDevice, const D3DSURFACE_DESC* pBackBufferSurfaceDesc )
{
HRESULT hr;
D3DXMATRIXA16 matView;
D3DXMatrixLookAtLH( &matView, &vecEye, &vecAt, &vecUp );
pd3dDevice->SetTransform( D3DTS_VIEW, &matView );
D3DXMATRIXA16 matProj;
D3DXMatrixPerspectiveFovLH( &matProj, D3DX_PI/4, 1.0f, 0.05f, 100.0f );
pd3dDevice->SetTransform( D3DTS_PROJECTION, &matProj );
D3DXMATRIXA16 matWorld;
D3DXMatrixIdentity( &matWorld );
pd3dDevice->SetTransform( D3DTS_WORLD, &matWorld );
pd3dDevice->SetRenderState( D3DRS_AMBIENT, 0xffffffff );
V_RETURN( g_Terrain.Create( pd3dDevice, L"C:\\Terrain.x" ) );
return S_OK;
}
HRESULT CALLBACK OnResetDevice( IDirect3DDevice9* pd3dDevice, const D3DSURFACE_DESC* pBackBufferSurfaceDesc )
{
g_Terrain.RestoreDeviceObjects( pd3dDevice );
return S_OK;
}
void CALLBACK OnLostDevice()
{
g_Terrain.InvalidateDeviceObjects();
}
void CALLBACK OnDestroyDevice()
{
g_Terrain.Destroy();
}
void CALLBACK OnFrameMove( IDirect3DDevice9* pd3dDevice, double fTime, float fElapsedTime )
{
}
void CALLBACK OnFrameRender( IDirect3DDevice9* pd3dDevice, double fTime, float fElapsedTime )
{
HRESULT hr;
pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0,0,255), 1.0f, 0 );
pd3dDevice->BeginScene();
g_Terrain.UseMeshMaterials( TRUE );
V( g_Terrain.Render( pd3dDevice ));
pd3dDevice->EndScene();
pd3dDevice->Present( NULL, NULL, NULL, NULL );
}
#include "dxstdafx.h"
#include "resource.h"
CDXUTMesh g_Terrain;
D3DXVECTOR3 vecEye(0.5f, 0.7f, -0.6f);
D3DXVECTOR3 vecAt (0.5f, 0.0f, 0.53f);
D3DXVECTOR3 vecUp (0.0F, 1.0F, 0.0f);
HRESULT CALLBACK OnCreateDevice( IDirect3DDevice9* pd3dDevice, const D3DSURFACE_DESC* pBackBufferSurfaceDesc );
HRESULT CALLBACK OnResetDevice( IDirect3DDevice9* pd3dDevice, const D3DSURFACE_DESC* pBackBufferSurfaceDesc );
void CALLBACK OnFrameMove( IDirect3DDevice9* pd3dDevice, double fTime, float fElapsedTime );
void CALLBACK OnFrameRender( IDirect3DDevice9* pd3dDevice, double fTime, float fElapsedTime );
void CALLBACK OnLostDevice();
void CALLBACK OnDestroyDevice();
INT WINAPI WinMain( HINSTANCE, HINSTANCE, LPSTR, int )
{
DXUTSetCallbackDeviceCreated( OnCreateDevice );
DXUTSetCallbackDeviceReset( OnResetDevice );
DXUTSetCallbackDeviceLost( OnLostDevice );
DXUTSetCallbackDeviceDestroyed( OnDestroyDevice );
DXUTSetCallbackFrameRender( OnFrameRender );
DXUTSetCallbackFrameMove( OnFrameMove );
DXUTSetCursorSettings( true, true );
DXUTInit( true, true, true );
DXUTCreateWindow( L"FirstGame" );
DXUTCreateDevice( D3DADAPTER_DEFAULT, true, 640, 480, NULL, NULL );
DXUTMainLoop();
return DXUTGetExitCode();
}
HRESULT CALLBACK OnCreateDevice( IDirect3DDevice9* pd3dDevice, const D3DSURFACE_DESC* pBackBufferSurfaceDesc )
{
HRESULT hr;
D3DXMATRIXA16 matView;
D3DXMatrixLookAtLH( &matView, &vecEye, &vecAt, &vecUp );
pd3dDevice->SetTransform( D3DTS_VIEW, &matView );
D3DXMATRIXA16 matProj;
D3DXMatrixPerspectiveFovLH( &matProj, D3DX_PI/4, 1.0f, 0.05f, 100.0f );
pd3dDevice->SetTransform( D3DTS_PROJECTION, &matProj );
D3DXMATRIXA16 matWorld;
D3DXMatrixIdentity( &matWorld );
pd3dDevice->SetTransform( D3DTS_WORLD, &matWorld );
pd3dDevice->SetRenderState( D3DRS_AMBIENT, 0xffffffff );
V_RETURN( g_Terrain.Create( pd3dDevice, L"C:\\Terrain.x" ) );
return S_OK;
}
HRESULT CALLBACK OnResetDevice( IDirect3DDevice9* pd3dDevice, const D3DSURFACE_DESC* pBackBufferSurfaceDesc )
{
g_Terrain.RestoreDeviceObjects( pd3dDevice );
return S_OK;
}
void CALLBACK OnLostDevice()
{
g_Terrain.InvalidateDeviceObjects();
}
void CALLBACK OnDestroyDevice()
{
g_Terrain.Destroy();
}
void CALLBACK OnFrameMove( IDirect3DDevice9* pd3dDevice, double fTime, float fElapsedTime )
{
}
void CALLBACK OnFrameRender( IDirect3DDevice9* pd3dDevice, double fTime, float fElapsedTime )
{
HRESULT hr;
pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0,0,255), 1.0f, 0 );
pd3dDevice->BeginScene();
g_Terrain.UseMeshMaterials( TRUE );
V( g_Terrain.Render( pd3dDevice ));
pd3dDevice->EndScene();
pd3dDevice->Present( NULL, NULL, NULL, NULL );
}
Da li neko zna u cemu je problem? U "Terrain.X" fajlu je sve ok. Tu su podaci o vertexima, indexima, normalama, materijalima. Textura je na pravom mestu i ucita se lepo. Kada otvorim "Terrain.X" u Mesh Viewer-u lepo se vidi... da li da i dalje pokusavam da radim sa CDXUTMesh ili mi je bolje da se vratim na stari oprobani nacin?

