![]() |
DirectX: Objekte laden
Hi,
wie kann ich in mein Delphiprojekt zur Laufzeit ein 3D-Objekt in einer der bekannten Formate (.3ds, .x,...) laden um es danach zu verwenden! Viele Grüße DK |
Liste der Anhänge anzeigen (Anzahl: 1)
Moin Florian !
Da gibts beispiel files die bei delphix dabei sind(wenn dus mit delphix machen willst), ich hab sie hier mal angehängt. |
Hi,
danke aber ich würds gern mit DirectX8 machen! Also keine spez. Kapselung! gruß dk |
Aso , da kenn ich mich net aus.
|
Aber das muss doch irgendwie gehen :|
Schließlich ist das ja ein wirklich wichtiger Teil der 3D-Programmierung denn ich kann ja nicht z.B. ein Auto oder eine Landschaft komplett in ner Unit (von Hand) machen, das wär ja wahnsinn! |
Wenn es sich um das .x-Format handelt (und das SDK enthält Tools zur Konvertierung von 3ds nach .x), hast du folgende Möglichkeiten:
1. Lade die X-Datei von Hand mit dem IDirectXFile-Interface. Wie das geht, steht im SDK bzw. in den Samples. Ist die flexibelste, aber auch komplexeste Möglichkeit 2. Lade die x-Datei einfach mit D3DXLoadMeshFromX bzw. den ähnlichen Funktionen wie D3DXLoadSkinMeshFromXof. Auch hier ist im SDK alle nötige Information enthalten, bzw. eine Suche nach diesen Schlüsselwörtern liefert Tutoriale. Diese Methode ist wesentlich einfacher, man hat aber einige Probleme mit mehreren Animationen in einer Datei etc. Ich empfehle für den Anfang oder wenn du keine Animationen brauchst die zweite Methode, letztendlich solltest du aber die erste einsetzen. Davon abgesehen kannst du dir im Common Files Framework bzw. in einigen Samples enthalten die Klasse CD3DMesh (oder so ähnlich) anschauen, die eine Kapselung der Mesh-API darstellt. |
Re: DirectX: Objekte laden
Wo gibts das Konvertierungsteil von 3DS nach X?
Hab gegooglet und nix gefunden, bei MS auch nicht ;( |
Re: DirectX: Objekte laden
OK, hab eines (
![]() |
Re: DirectX: Objekte laden
conv3ds.exe ist Bestandteil des DirectX SDKs, muss wenn ich mich recht erinnere jedoch explizit mitinstalliert werden. Es gab auch einige Versionen des SDKs, wo es nicht dabei war... Wie auch immer, im Full SDK sollte es drin sein, und bei den "Extras", die man auch auf der DirectX-SDK-Downloadseite bekommt, sind auch noch Plugins für 3dsmr3 etc.
Was die Aufrufe angeht: Daher mein Tip, in die Samples bzw. in die Common Files zu gucken ;c) Ist hier von DirectX 9, aber ich glaube, da hat sich nicht so viel geändert...
Code:
pFileName ist hoffentlich klar, und pDevice hoffentlich auch.
HRESULT D3DXLoadMeshFromX( LPCTSTR pFilename,
DWORD Options, LPDIRECT3DDEVICE9 pDevice, LPD3DXBUFFER* ppAdjacency, LPD3DXBUFFER* ppMaterials, LPD3DXBUFFER* ppEffectInstances, DWORD* pNumMaterials, LPD3DXMESH* ppMesh ); Die drei Puffer werden von der Funktion erzeugt, und du musst lediglich die Zeiger zur Verfügung stellen (also vom Typ Zeiger auf Zeiger auf ID3DXBuffer). pNumMaterials, da übergibst du den Zeiger auf ein DWORD, das ist also ein Ausgabeparameter, der die Anzahl der Materials in ppMaterials angibt. ppMesh ist das eigentlich Mesh-Teil, was du am Ende haben willst. Auch hier übergibst du lediglich den Zeiger auf einen ID3DXMesh-Zeiger. Noch Fragen? Dann schau dir bitte die Samples und die Common Files aus dem SDK in aller Ruhe an. Wenn danach immer noch Fragen sind, versuche ich natürlich trotzdem, sie zu beantworten, aber du siehst schon an der Komplexität des Ladens, dass das kein Thema ist, wo man so leicht eine fertige Lösung hat, da musst du dich selbst wenn du dich einigermaßen mit sowas auskennst einige Zeit mit beschäftigen... |
Re: DirectX: Objekte laden
Hi,
danke erstmal für deie Hilfen, hat mir sehr weitergeholfen, ich glaube jetzt, das Objekt geladen zu haben! Nur finde ich jetzt nirgends wo eine Möglickeit, das Ding auf den Bildschirm zu bringen :? In annahme dass das geht hoffe ich auf eine Lösung ;) viele grüße flo |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:27 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz