AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte Leichter Zugriff auf DirectX durch Kapselung
Thema durchsuchen
Ansicht
Themen-Optionen

Leichter Zugriff auf DirectX durch Kapselung

Ein Thema von schmorbraten · begonnen am 13. Aug 2004 · letzter Beitrag vom 24. Jun 2005
Antwort Antwort
Seite 2 von 3     12 3      
schmorbraten
Registriert seit: 11. Mär 2004
Hi,
Ich habe eine ganze Menge Objekte entworfen, mit denen man DirectX nutzen kann, ohne Tonnen von Code schreiben zu müssen.
  • Scene, Cameras, Lights, Mouse, Keyboard, Textures, Polygons, Font, Fog, Shadow, Transparency....und einige Beispiele + Hilfedatei
Home of Unit xorDX8.pas
Angehängte Dateien
Dateityp: zip xordx8_187.zip (1,41 MB, 54x aufgerufen)
 
schmorbraten
 
#11
  Alt 1. Okt 2004, 08:48
Hallo,
ich habe mich an SelfDXD gehalten, wo vorbildlich alle erzeugten Interfaces am Ende auch wieder nil gesetzt werden (was ein Release für das Interface auslöst). Genau das passiert in meinen Destroy-Methoden. Wenn beim Reference-Counting das COM-Objekt automatisch frei gegeben wird, hast Du natürlich recht. Allerdings hat man dann keine Kontrolle über den Zeitpunkt. Zudem entwarf ich die Unit, um den doch recht komplexen Zugriff auf die Interfaces zu vereinfachen. Eine Objekt-Hierachy schien mir da angebracht, zumal meine Objekte auch einiges an eigener (objektorientierter) Funktionalität mitbringen.

Nun, das Thema COM-Objekte ist für mich noch etwas gräulich, ich hoffe, Dich nicht falsch verstanden zu haben - andernfalls meld Dich nochmal. Es gibt bestimmt noch einiges zu verbessern. Den Vorteil von DirectX sehe ich (durch erzwungen manuelles Freigeben) nicht gleich zunichte gemacht, den der besteht doch hauptsächlich aus der Hardware-Zugriffsgeschwindigkeit, was durch eine Kapselung doch nicht wirklich beeinträchtigt wird, oder?

Viele Grüße
xor
  Mit Zitat antworten Zitat
mimi

 
FreePascal / Lazarus
 
#12
  Alt 19. Jun 2005, 13:16
ich wollte ein einfaches programm machen ein bahn die du von oben siehst und eine kugel drauf die sich begt, dabei ist mir folgendes aufgefallen(ersteinmal)
sobalt ich die z position veränder(also nach vorne oder nach hinten gehen möchte) wird auch auto. x und y veränedert
folgende qullcode habe ich dafür geschrieben:
Delphi-Quellcode:
//creation
  Scene := TxorDXScene.Create(Handle);
  Camera := TxorDXCamera.Create(Scene);
  Rect := TxorDXRect.Create(Scene, 100, 100, 100, 2); //set standard coordinates and colors
  Ball := TxorDXBall.Create(Scene, 60, 30, 0.4); //set standard coordinates and colors
  Ball.MonoChrom(clRed);
  Ball.Move(33,-22.8,-52);

  Rect.RotateX(180);
  Rect.RotateY(0.9);
  Rect.RotateZ(-0.6);
  Scene.SetBackgroundColor(0,0,0,0);

  Scene.AutoLightOnOff:=True;
  Scene.CreateBuffers;
  //start
// lingx/rechts; nähre dran weiter weg,
  Camera.Move(32.5,-26,-50);
  Camera.SetStandard;
  Camera.Activate;
  Scene.StartLooping(Draw); //loop drawing routine
und dann möchte ich noch genre das sich die kugel nach hinten bewegt und die kamera soll folgen in einen konstanten abstandt naja ich habe daüfr folgenden code in der Draw procedure geschrieben:
Delphi-Quellcode:
  Scene.Clear;
  Rect.Insert;

  Rect.Draw;
  Ball.Insert;
  Ball.Move(0,0,0.1);
  Ball.Draw;
im anhang gibt die exe und ein bild
Miniaturansicht angehängter Grafiken
test._180.jpg  
Angehängte Dateien
Dateityp: exe project1_183.exe (401,5 KB, 11x aufgerufen)
Michael Springwald
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

 
Delphi 2009 Professional
 
#13
  Alt 19. Jun 2005, 13:49
Hi,

das ist ja mal spitzenmäßg .

Das ist echt viel einfacher und cooler als DelphiX.

Ich hab mir das jetzt gerade mal angesehen und bin echt erstaunt, wie man mit wenig Code schon was kleines Animieren kann. (Rotate halt ).

Eine Frage hab ich trotzdem. Wie kann ich eine Kollision überprüfen?
Manuel
  Mit Zitat antworten Zitat
Benutzerbild von nailor
nailor
 
#14
  Alt 19. Jun 2005, 13:58
Zitat von Spider:
Eine Frage hab ich trotzdem. Wie kann ich eine Kollision überprüfen?
das würde ich ganz strikt von der grafik trennen und dann bei google/hier im forum/sonstwo nach sachen wie kollision erkennung detection... suchen
Michael N.
  Mit Zitat antworten Zitat
schmorbraten
 
#15
  Alt 19. Jun 2005, 21:13
Hi Mimi,
habe leider zu wenig Zeit, um im Moment der Sache auf den Grund zu gehen. Wäre auch gut, wenn man Deinen Source downloaden könnte. Mir sind so ein paar Kleinigkeiten aufgefallen:
1. Vertausche diese beiden Zeilen, SetStandard könnte den Move beeinflussen.
Delphi-Quellcode:
  Camera.Move(32.5,-26,-50);
  Camera.SetStandard;
2. Eine Camera hat einen Positions- und einen Richtungsvektor. Benutze statt Move lieber MoveHoriz(d, xorDXCamId) oder dergleichen, so wirkt sich Dein Move auch auf diese Vektoren aus. Ein einfaches Move wirkt sich nur auf die Transformationsmatrix aus, was bei normalen Objekten auch ausreicht. Vereinfacht unterscheide ich immer Camera und Kameramann. MoveHoriz wirkt sich auf beide aus, Move nur auf die Kamera. Analog RotateY und RotateHoriz. Ein RotateY macht Sinn, wenn der Kameramann die Kamera die ganze Zeit verdreht halten soll, ich den Kameramann aber davon unabhängig "ganz normal" navigieren will.

3. Ansonsten fällt mir auf, dass Du die Camera nach rechts unten hinten verschiebst, aber weiterhin auf den Nullpunkt (LookAt-Vektor) schaust, also nach oben links vorne. Die Kugel verschiebst Du jetzt (nur) nach vorn und genau das sieht man doch auch in Deinem Programm oder?
Soll sich die Kugel in Blickrichtung wegbewegen, so verschiebe die Kugel in Richtung der Kamera, also etwas derart:
Delphi-Quellcode:
  TxorDXVector v := Camera.Direction;
  Ball.Move(v.x * 0.1, v.y * 0.1, v.z * 0.1);
Hi Spider,
xorDX8 ist konzipiert für die einfache und schnelle Benutzung von DirectX.
Kollisionserkennung ist nicht integriert. Kenne mich damit auch nicht richtig aus. Auf die Transformationsmatrizen der Objekte, Kamera und Welt(Scene) kannst Du jedoch zugreifen.
Viel Erfolg.

Gruß xor
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

 
Delphi 2009 Professional
 
#16
  Alt 20. Jun 2005, 07:42
Zitat von schmorbraten:
Hi Spider,
xorDX8 ist konzipiert für die einfache und schnelle Benutzung von DirectX.
Kollisionserkennung ist nicht integriert. Kenne mich damit auch nicht richtig aus. Auf die Transformationsmatrizen der Objekte, Kamera und Welt(Scene) kannst Du jedoch zugreifen.
Viel Erfolg.
Hi,

falls du das Projekt mal weiterentwickelst (was ich mir wünschen würde) und vllt. auf DirectX 9 umbaust, könntest du ja die Kollisionserkennung mit einbauen?
Manuel
  Mit Zitat antworten Zitat
mimi

 
FreePascal / Lazarus
 
#17
  Alt 20. Jun 2005, 09:24
das mit dem ball ist immer noch komisch: ich möchte in nach vorne bewegen, ich habe ihn jetzt mit
Ball.MoveCenter(True);
Zum Nullpukt versetzt und schreibe in der onDraw Funktion:
Delphi-Quellcode:
begin
  Scene.Clear;
  Rect.Insert;

  Rect.Draw;
  Ball.Insert;
  Ball.Move(0,0,1);

  Ball.Draw;
das mit dem v hatte ich getestet da saht man den ball nicht mehr.... und jetzt geht er nach hinten unten standt nach vorne.
ich möchte den ball nur nach vorne begen.

das beste währe wenn die camra im Konstant abstad zum obj gerichtet werden könnte z.b. die kamar sieht alles von oben und sobalt sich das obj bewegt soll sich die kamra auch bewegen.

ich werde auch zwischndurch mal wegen der collisions erkennung suchen, da gibt es bestimmt eine menge im internet.

Schreibst du die komponenten samlungn noch weiter ? wenn ja könntes du noch einige vereinfachungen machen:
Karama auf obj halten(wie bei GLScne)
und eine procedure die ein obejtk nur nach vorne nach hinten nach lings nach rechts nach unten und nach oben verschieben kann und nicht: wenn ich nur z ändenre gehe ich davon aus, das ich das obj nach vorne(+1) oder nach hinten(-1) verschiebe ist das richtig ? warum wird es nach unten geschoben ?
hier mal der gesammte qullcode(im anhang)
Angehängte Dateien
Dateityp: zip 1_483.zip (213,4 KB, 10x aufgerufen)
Michael Springwald
  Mit Zitat antworten Zitat
schmorbraten
 
#18
  Alt 20. Jun 2005, 11:15
Hi Spider,
bist herzlich eingeladen, mitzuhelfen
Werde es auf die Todo-Lsite nehmen, wird aber so schnell nicht werden.

Hi Mimi,
werde mir bei Gelegenheit den Source mal angucken, allerdings wird dies wohl einige Zeit benötigen.
Ansonsten sei noch gesagt, dass Du auch die Kamera moven musst, wenn der Abstand zum Objekt gleich bleiben soll. Mitunter macht es auch Sinn, Objekt und Kamera unbewegt zu lassen und statt dessen alle anderen Objekte entgegengesetzt zu bewegen.
Um nicht mit vorne, hinten usw. durcheinander zu kommen, empfehle ich die Kamera auf Position 0,0,-50 zu setzen und Blick auf 0,0,0.

Viele Grüße
Schmorbraten alias xor alias Sven
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

 
Delphi 2009 Professional
 
#19
  Alt 20. Jun 2005, 11:23
Zitat von schmorbraten:
Hi Spider,
bist herzlich eingeladen, mitzuhelfen
Werde es auf die Todo-Lsite nehmen, wird aber so schnell nicht werden.
Hi Sven,

danke, aber ich hab keinen Schimmer von DirectX. Falls Du ICQ hast, kannst du mich ja mal kontaktitieren, vllt. könnte ich ja was kleineres helfen.

Falls Du kein ICQ hast, dann halt per PN
Manuel
  Mit Zitat antworten Zitat
mimi

 
FreePascal / Lazarus
 
#20
  Alt 20. Jun 2005, 14:00
eins verstehe ich noch nicht so genau:
Blickpos ? Kamrapos ? ist das nicht ein und das selbe ?

Wenn ich die Kamra bewege ändert sich doch auch die blick richtung oder etwa nicht ?
Michael Springwald
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 09:35 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