Mesh laden - Will nicht
-
Es gibt glaub von MS nochn Tool für dx das diverse Formate nach x konvertieren kann evtl bringt dich das weiter. Ansonsten kannste nur auf die Bequemlichkeit verzichten und evtl selebr nen Loader für n anderes Format schreiben oder einen vorhandenen benutzen, das schließt dann aber eigene Renderfunktionen usw mit ein, ist aber nicht so schwer.
-
zum Beispiel conv3ds.exe
Diese Wandelt 3DS-Dateien in .x-Dateinen um, funktioniert ganz gut.
LG fluid
-
ich weiss auch nicht, egal mit wechen tool, da geht nix.
Das Mesh Tool vom DX SDK läd die dateien aber auch, nur ohne texturen.
-
kuck mal in das Tutorial, du musst erst noch die Texturen dazuladen und die Matrialien setzen,dann geht das schon
wie im Tutorial:
http://www.directxtutorial.com/Tutorial9/C-Direct3DMeshes/dx9C2.aspx
viel Spaß
p.s.: bei mir hats das funktioniert
-
ich hab rausgefunden das es nur probleme gibt wenn ich texturen dazu lade, ohne gehts ganz gut, sieht halt scheisse aus
-
kuck, doch mal ob du das vertexformat richtig setzt und die Texturen kannste ja auch noch mit trillinearem Filtering verbessern, das ist schon ganz annehmbar.
LG fluid
-
welches format sollte das sein?
Hab schon einige durch
-
zum Laden des Meshes folgenden Code verwenden:
LPD3DXBUFFER bufMaterial;
D3DXLoadMeshFromX(pchFileName,D3DXMESH_MANAGED,pDevice9,NULL,&bufMaterial,NULL,&mdwNumMatrerials,&mMesh);
D3DXMATERIAL* ptempMaterials = (D3DXMATERIAL*)bufMaterial->GetBufferPointer();
mpMaterialArray = new D3DMATERIAL9[mdwNumMatrerials];
mpTextureArray = new LPDIRECT3DTEXTURE9[mdwNumMatrerials];
for(DWORD i = 0; i < mdwNumMatrerials; i++)
{mpMaterialArray[i] = ptempMaterials[i].MatD3D;
mpMaterialArray[i].Ambient = mpMaterialArray[i].Diffuse;if(FAILED(D3DXCreateTextureFromFile(pDevice9,(LPCSTR)(ptempMaterials[i].pTextureFilename),&mpTextureArray[i])))
{
mpTextureArray[i] = NULL; // if there is no texture, set the texture to NULL
}}
// zum Rendern
pDevice9->SetRenderState(D3DRS_LIGHTING,FALSE);
for (DWORD i= 0; i< mdwNumMatrerials;i++)
{
pDevice9->SetMaterial(&mpMaterialArray[i]);
if(mpTextureArray[i] != NULL)
{pDevice9->SetTexture(0,mpTextureArray[i]);
}
else
{
pDevice9->SetTexture(0,NULL);
}g_pD3DDevice9->SetRenderState(D3DRS_CULLMODE,D3DCULL_CCW);
mMesh->DrawSubset(i);
}
pDevice9->SetTexture(0,NULL);
pDevice9->SetRenderState(D3DRS_LIGHTING,FALSE);
}
}// ein vertex besteht aus
struct S_VERTEX_MESH
{
D3DVEKTOR vPos;
D3DVEKTOR vNorm;
D2DVEKTOR vTex;};
also müsste man das VertexFormat setzen:
device9->SetFvF(D3DFVF_XYZ|D3DFVF_NORMAL|D3DFVF_TEX1)
lg Fluid
-
Danke, aber ich verwende Managed DirectX und C#.
Die ähnlichkeit ist aber verblüffend.
-
Na dann hoff ich trozdem mal, dass ich dir helfen konnte.
LG fluid
-
ich will sowieso das ganze in c++ umsetzen. Die Schreibweise ist zwar etwas anderst(komplizierter) und die Umgebung unterstützt einen mehr in c# aber allein von der geschwindigkeit und der Plattform unabhängigkeit her sollte man c++ verwenden.