This is probably obvious... but I can't get it...
This is probably very obvious, but I can''t figure out what I''m doing wrong here. In my object i use brick.bmp, roof.bmp, floor.bmp and a whitish material for the walls. But, when I run my viewer, all the textures are brick.bmp. I dunno what I''m doing wrong...
This is my first real attempt at full on 3D and I hope you guys could point me in the right direction...
//Globals
LPD3DXMESH g_pMesh = NULL; // Our mesh object in sysmem
D3DMATERIAL8* g_pMeshMaterials = NULL; // Materials for our mesh
LPDIRECT3DTEXTURE8* g_pMeshTextures = NULL; // Textures for our mesh
DWORD g_dwNumMaterials = 0L; // Number of mesh materials
LPD3DXBUFFER pD3DXMtrlBuffer;
struct CUSTOMVERTEX
{
FLOAT x, y, z; // The untransformed position for the vertex.
DWORD color; // The vertex color.
};
void Frame();
void LoadMesh(char* Filename);
void Frame()
{
Graphics.GetDeviceCOM()->SetRenderState( D3DRS_AMBIENT, 0xffffffff );
if(KEY_DOWN(VK_UP))
theta+=0.1f;
else if(KEY_DOWN(VK_DOWN))
theta-=0.1f;
else if(KEY_DOWN(VK_LEFT))
beta+=0.1f;
else if(KEY_DOWN(VK_RIGHT))
beta-=0.1f;
else if(KEY_DOWN(VK_INSERT))
alpha+=0.1f;
else if(KEY_DOWN(VK_DELETE))
alpha-=0.1f;
else
return;
D3DXMATRIX matWorld;
D3DXMATRIX matView;
D3DXMATRIX matProj;
D3DXMatrixRotationY(&matWorld, beta);
D3DXMatrixLookAtLH(&matView, &D3DXVECTOR3( 0.0f, 3.0f, theta), &D3DXVECTOR3(0.0f, alpha, 0.0f), &D3DXVECTOR3(0.0f, 1.0f, 0.0f));
D3DXMatrixPerspectiveFovLH(&matProj, D3DX_PI/4, 1.0f, 1.0f, 1000.0f);
Graphics.BeginScene();
Graphics.ClearZ();
for( DWORD i=0; i < g_dwNumMaterials; i++ )
{
// Set the material and texture for this subset
Graphics.GetDeviceCOM()->SetMaterial( &g_pMeshMaterials<i> );
Graphics.GetDeviceCOM()->SetTexture( 0, g_pMeshTextures );
char temp[200];
sprintf(temp, "Current Texture %i");
// Draw the mesh subset
g_pMesh->DrawSubset( i );
}
Graphics.GetDeviceCOM()->SetTransform(D3DTS_WORLD, &matWorld);
Graphics.GetDeviceCOM()->SetTransform( D3DTS_VIEW, &matView );
Graphics.GetDeviceCOM()->SetTransform( D3DTS_PROJECTION, &matProj );
Graphics.EndScene();
Graphics.Display();
}
void LoadMesh(char* Filename)
{
if(FAILED(D3DXLoadMeshFromX(Filename, D3DXMESH_SYSTEMMEM, Graphics.GetDeviceCOM(), NULL, &pD3DXMtrlBuffer, &g_dwNumMaterials, &g_pMesh)))
PostQuitMessage(0);
D3DXMATERIAL* d3dxMaterials = (D3DXMATERIAL*)pD3DXMtrlBuffer->GetBufferPointer();
g_pMeshMaterials = new D3DMATERIAL8[g_dwNumMaterials];
g_pMeshTextures = new LPDIRECT3DTEXTURE8[g_dwNumMaterials];
for( UINT i=0; i < g_dwNumMaterials; i++ )
{
MessageBox(NULL, d3dxMaterials->pTextureFilename, "Filename", MB_OK);
if(FAILED(D3DXCreateTextureFromFile(Graphics.GetDeviceCOM(), d3dxMaterials->pTextureFilename,&g_pMeshTextures)))
{
MessageBox(NULL, "Failed…", "Failed@Text.", MB_OK);
g_pMeshTextures = NULL;
}
}
pD3DXMtrlBuffer->Release();
} </i>
I''''m a signature virus, copy me into your signature and help me spread!
It doesn''t look to me as though "d3dxMaterials->pTextureFilename" changes between iterations of the loop you have loading the textures. Perhaps you meant "d3dxMaterials.pTextureFilename" ?
xyzzy
xyzzy
This topic is closed to new replies.
Advertisement
Popular Topics
Advertisement