![]() |
Re:Re: Leichter Zugriff auf DirectX durch Kapselung
Hallo,
ich habe mich an ![]() 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 |
Re: Leichter Zugriff auf DirectX durch Kapselung
Liste der Anhänge anzeigen (Anzahl: 2)
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:
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:
//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
Delphi-Quellcode:
im anhang gibt die exe und ein bild
Scene.Clear;
Rect.Insert; Rect.Draw; Ball.Insert; Ball.Move(0,0,0.1); Ball.Draw; |
Re: Leichter Zugriff auf DirectX durch Kapselung
Hi,
das ist ja mal spitzenmäßg :thumb: . 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 :mrgreen: ). Eine Frage hab ich trotzdem. Wie kann ich eine Kollision überprüfen? |
Re: Leichter Zugriff auf DirectX durch Kapselung
Zitat:
|
Re: Leichter Zugriff auf DirectX durch Kapselung
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:
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.
Camera.Move(32.5,-26,-50);
Camera.SetStandard; 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:
Hi Spider,
TxorDXVector v := Camera.Direction;
Ball.Move(v.x * 0.1, v.y * 0.1, v.z * 0.1); 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 |
Re: Leichter Zugriff auf DirectX durch Kapselung
Zitat:
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? |
Re: Leichter Zugriff auf DirectX durch Kapselung
Liste der Anhänge anzeigen (Anzahl: 1)
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:
das mit dem v hatte ich getestet da saht man den ball nicht mehr.... und jetzt geht er nach hinten unten standt nach vorne.
begin
Scene.Clear; Rect.Insert; Rect.Draw; Ball.Insert; Ball.Move(0,0,1); Ball.Draw; 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) |
Re: Leichter Zugriff auf DirectX durch Kapselung
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 |
Re: Leichter Zugriff auf DirectX durch Kapselung
Zitat:
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 |
Re: Leichter Zugriff auf DirectX durch Kapselung
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 ? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:58 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