AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi [Direct3D] Mit DX Kugel erzeugen
Thema durchsuchen
Ansicht
Themen-Optionen

[Direct3D] Mit DX Kugel erzeugen

Ein Thema von TurboMartin · begonnen am 14. Aug 2006 · letzter Beitrag vom 14. Aug 2006
Antwort Antwort
TurboMartin

Registriert seit: 13. Feb 2006
Ort: Bad Honnef
765 Beiträge
 
Turbo Delphi für Win32
 
#1

[Direct3D] Mit DX Kugel erzeugen

  Alt 14. Aug 2006, 11:36
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.
Tomorrow will be cancelled due to lack of interest.

  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#2

Re: [Direct3D] Mit DX Kugel erzeugen

  Alt 14. Aug 2006, 11:49
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.
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
TurboMartin

Registriert seit: 13. Feb 2006
Ort: Bad Honnef
765 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: [Direct3D] Mit DX Kugel erzeugen

  Alt 14. Aug 2006, 13:05
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.
Tomorrow will be cancelled due to lack of interest.

  Mit Zitat antworten Zitat
Benutzerbild von JasonDX
JasonDX
(CodeLib-Manager)

Registriert seit: 5. Aug 2004
Ort: München
1.062 Beiträge
 
#4

Re: [Direct3D] Mit DX Kugel erzeugen

  Alt 14. Aug 2006, 13:26
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
Mike
Passion is no replacement for reason
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:13 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz