Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi [Direct3D] Mit DX Kugel erzeugen (https://www.delphipraxis.net/75088-%5Bdirect3d%5D-mit-dx-kugel-erzeugen.html)

TurboMartin 14. Aug 2006 10:36


[Direct3D] Mit DX Kugel erzeugen
 
Hallo,
ich versuche mich in Direct3D/DX ein zu arbeiten. Bisher hatte ich nur mit Würfeln/Vierechen(2 Dreiecke) und Pyramiden/Dreiecken zu tun. Nun möchte ich allerdings auch eine Kugel oder Zylinder bauen, allerdings weiß ich nicht wie. Muss ich das auch aus der Grundform Dreieck machen oder gibt es da irgendeine Funtion/Prozedur/Typ/Fertiges Objekt?

Zurzeit benutze ich Delphi 6 Personal und den DirectX 8 Header vom Tutorial in der DSDT.

Khabarakh 14. Aug 2006 10:49

Re: [Direct3D] Mit DX Kugel erzeugen
 
Ich weiß nicht, ob die Funktion in deinen Headern enthalten ist, aber es gibt auf jeden Fall solch eine D3DX-Funktion (in Managed DriectX wäre es zum Bleistift Mesh.Sphere). Einfach mal im DX-SDK nach Sphere/Cylinder suchen.

TurboMartin 14. Aug 2006 12:05

Re: [Direct3D] Mit DX Kugel erzeugen
 
So, ich hab jetzt die beiden Dateien, die ich eingebunden hab durchsucht und was gefunden.
Delphi-Quellcode:
//-------------------------------------------------------------------------
// D3DXCreateSphere:
// -----------------
// Creates a mesh containing a sphere. The sphere is centered at the
// origin.
//
// Parameters:
//
//  pDevice    The D3D device with which the mesh is going to be used.
//  Radius     Radius of the sphere (should be >= 0.0f)
//  Slices     Number of slices about the main axis
//  Stacks     Number of stacks along the main axis
//  ppMesh     The mesh object which will be created
//  ppAdjacency Returns a buffer containing adjacency info. Can be NULL.
//-------------------------------------------------------------------------
function D3DXCreateSphere(const pDevice : IDirect3DDevice8; Radius : Single; Slices, Stacks : Cardinal; out ppMesh : ID3DXMesh; out ppAdjacency : ID3DXBuffer) : HResult; stdcall;
Allerdings kapier ich nicht was in die Parameter rein soll.
So hab ich es verstanden:
Delphi-Quellcode:
D3DXCreateSphere(1.00,
                 {kA (hab irgendeine Zahl eingesetzt)}, {ist das die Höhe ?}
                 {kA (hab irgendeine Zahl eingesetzt)}, {ist das die Nähe vom Betrachter?}
                 {kA (irgendeine Adresse zu nem Pointer)},
                 0);
Aber was bedeuten die Sachen genau? In der MSDN hab ich auch nichts kapiert.

JasonDX 14. Aug 2006 12:26

Re: [Direct3D] Mit DX Kugel erzeugen
 
Zitat:

Zitat von TurboMartin
So, ich hab jetzt die beiden Dateien, die ich eingebunden hab durchsucht und was gefunden.
Allerdings kapier ich nicht was in die Parameter rein soll.
So hab ich es verstanden:
Delphi-Quellcode:
D3DXCreateSphere(1.00,
                 {kA (hab irgendeine Zahl eingesetzt)}, {ist das die Höhe ?}
                 {kA (hab irgendeine Zahl eingesetzt)}, {ist das die Nähe vom Betrachter?}
                 {kA (irgendeine Adresse zu nem Pointer)},
                 0);
Aber was bedeuten die Sachen genau? In der MSDN hab ich auch nichts kapiert.

Du bindest jedes Objekt an dein Device, das du schon erstellt hast. Das is der erste Parameter.
Der Radius duerfte klar sein. Slices und Stacks sind Werte, die die Detailgenauigkeit der Kugel angeben. Je groesser die beiden Werte, desto mehr Vertices, desto Detaillierter die Kugel, desto langsamer das Rendern.
Die Adresse zu nem Pointer ist der Zeiger auf dein Mesh. Darin wird die Kugel gespeichert, sodass du sie anschliessend zeichnen kannst.
Der letzte Parameter ist ein Stream, der nicht unbedingt gegeben sein muss. Darin stuenden jeweils die 3 Nachbaren eines jeden Vertices.

Ich wuerde dir uebrigens empfehlen, vor allem fuer den Einstieg, Managed DirectX zu verwenden. Nicht nur, dass der Code leichter lesbar wird, sondern auch, weil alles objektorientiert strukturiert ist, und somit auch bspw. die D3D-Extention in die entsprechenden Klassen eingebaut ist.
Ein Beispiel zu deinem Fall:
Code:
D3DXCreateSphere(Device, 1.0, 36, 36, &Mesh, NULL)
vs
Code:
Mesh.Sphere(Device, 1f, 36, 36);
Funktionen liegen bei den Klassen, zu denen sie gehoeren, und bietet damit mehr lesbarkeit und groessere Uebersicht. ;)

greetz
Mike


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:10 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