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 3 von 3     123   
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)
 
Benutzerbild von Speedmaster
Speedmaster

 
Delphi 2005 Personal
 
#21
  Alt 20. Jun 2005, 15:10
Zitat von mimi:
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 ?
Nein, zumindestens bei meinen OpenGL Kenntnissen ist das nicht so( Ja, OpenGL <> DirectX ), die Position der Kamera hat nichts damit zu tun wohin es guckt. Stell dir das als ein Vertex vor, das sich verschiebt, aber nicht die Richtung ändert wo es hin ausgerichtet ist!
Felix K.
  Mit Zitat antworten Zitat
schmorbraten
 
#22
  Alt 20. Jun 2005, 18:20
Ja genau, es gibt die KameraPosition und die KameraBlickrichtung (Direction). Position + Direction = LookAt. Zusätzlich gibt es noch den Up-Vektor, der sagt wo oben ist (wenn man z.B. kopfüber hängt, zeigt der nach unten).

Achtung:
1. Wie oben aufgeführt muss man in xorDX8 noch zwischen Kamera und Kameramann unterscheiden. Position etc beziehen sich auf den Kameramann und sollten mit MoveHoriz, -vert, -forward, RotateHoriz, -vert, -around, MoveTo, SetPosition, SetDirection etc gesteuert werden. Benutzt man stattdessen Move, Rotate etc bezieht sich dies lediglich auf das Verhältnis zwischen Kameramann und Kamera, was normalerweise unnötig ist. Direction etc bleiben dabei unangetastet. Das macht nur Sinn, wenn ich den Kameramann wie Kamera dirigieren will, aber er die Kamera permanent verdreht halten soll oder dergleichen... (Man kann somit die gleichen Befehle auf zwei Kameras loslassen, wobei die eine aber nach hinten und die andere nach vorne guckt. Glaub ich jedenfalls.)

2. Ein weiterer Punkt ist inwiefern ich MoveHoriz ausführen will, d.h. soll die Horizontale Bewegung parallel zur Koordinaten-XY-Ebene passieren (xorDXcamID), oder möchte ich mich horizontal zur in der (geneigten) Blickebene bewegen (camHuman, Bsp. man läuft auf einer schrägen Wand, dann heißt horizontal parallel zur Wand, nicht zum Erdboden), oder heißt horizontal senkrecht zum Up-Vektor der Kamera.... Diesen Parameter kann man bei MoveHoriz übergeben. xorDXcamHuman spiegelt menschliches Verhalten wieder.

3. Der Unterschied zu FreeCam. Bei der FreeCam wird der UpVektor mit gedreht. So kann ein Flugzeug ein Looping fliegen. Eine normale Kamera, deren UpVektor kerzengrade nach oben zeigt, kann nie ganz direkt nach unten/oben gucken und so auch keine Loopings.

xor
  Mit Zitat antworten Zitat
mimi

 
FreePascal / Lazarus
 
#23
  Alt 23. Jun 2005, 10:54
ich möchte letzendlich nur folgendes:
ich habe eine Kugel und eine Panel und die gugel ist ganz hinten am null punk und wie schaffe ich es jetzt das die kamra 1. auf die kugel gerichtet ist und zwar in einen Konstanten abstand und wenn ich das obj nach vorne schiebe muss die karama ja nach hinten gehen.
Wie schaffe ich das ?
Michael Springwald
  Mit Zitat antworten Zitat
barf00s
 
#24
  Alt 23. Jun 2005, 11:58
falls ihr nen gescheites paper zu kollision sucht, hier findest ihrs
  Mit Zitat antworten Zitat
schmorbraten
 
#25
  Alt 24. Jun 2005, 07:22
Hallo Mimi,
habe das in xorDX8 mitgelieferte Bowling-Beispiel verändert. Ich hoffe, es hilft Dir.

Im wesentlichen sieht der Source so aus:
Delphi-Quellcode:
//repeated drawing routine
procedure TForm1.Draw(Sender: TObject);
const
  MoveZ: Single = 0.01;
begin
  Scene.Clear;

  GetKeyboard(MoveZ);

  //Move Ball and Camera forward/backward
  Ball.Move(0, 0, MoveZ);
  Camera.MoveForward(MoveZ, xorDXCamHuman);
  Camera.Activate;

  Grid.Insert;
  Grid.Draw;

  DrawMultiMaps;

  Ball.Insert;
  Ball.Draw;

end;
Viele Grüße
xor alias Schmorbraten
Miniaturansicht angehängter Grafiken
bowling_411.gif  
Angehängte Dateien
Dateityp: zip bowling_822.zip (4,1 KB, 16x aufgerufen)
  Mit Zitat antworten Zitat
mimi

 
FreePascal / Lazarus
 
#26
  Alt 24. Jun 2005, 09:32
als ich das Projekt complirt habe(dein beispiel) ist das Komplete windows abgestürzt.... daher werde ich dieses projekt lieber nicht mehr Testen*schade*
fürher lief das beispiel auf mein Rechner jetzt nicht mehr.... woran ist liegt weiß ich leider nicht da ich nicht windows neu installieren möchte.....

evlt. kannst du ja diesen "kleinen" bug finden und fixen *G*
Michael Springwald
  Mit Zitat antworten Zitat
schmorbraten
 
#27
  Alt 24. Jun 2005, 15:23
Hallo Mimi,
also zwischen Windows abstürzen und neu installieren müssen gibts einen kleinen Unterschied.
Ein bischen Forscherarbeit solltest Du da schon reinstecken, also mal debuggen bis zur abstürzenden Stelle wäre nicht schlecht. Immerhin habe ich gestern dafür auch ein paar Abendstündchen geopfert. (Vielleicht auch den Bowling-Ordner löschen vorm Entpacken des neuen Bowling-Beispiels?)

Zudem lief das Projekt bei mir, ich kann Deinen Fehler also nur schwer buggen.
Ansonsten: Benutzt Du DirectX8 o.besser? Welches Delphi hast Du? Welches Windows?

Viele Grüße
xor
Angehängte Dateien
Dateityp: exe bowling_739.exe (351,0 KB, 5x aufgerufen)
  Mit Zitat antworten Zitat
mimi

 
FreePascal / Lazarus
 
#28
  Alt 24. Jun 2005, 18:39
ich nutze
Delphi7
habe
WinXp home
und habe DX9.0

ich hatte ja schon füher mit deine libg rumgespielt.
und da ist mir einbefehl aufgefallen der windows zum abstürzen bringt. nagut ich werde es einmal riskieren das xp abstürzt.... weil bis ich den rechner dann soweit wieder habe dauert das leider seine zeit....
Michael Springwald
  Mit Zitat antworten Zitat
mimi

 
FreePascal / Lazarus
 
#29
  Alt 24. Jun 2005, 18:52
der 2.Versuch schlug fehl: ich habe alle anweisungen in der create procedure mit einem haltepunkt versehen und den draw modus auskometiert, ergbnis: delphi hat sich aufgehangen und das komplete windows auch.
eine möglichkeit habe ich noch:
hinter und vor jeder anweisung eine log funktion zu schreiben so sehre ich nach dem absturzt wenigens wie weit er gekommen ist und kann dir dann die anweisung nennen *G*
Michael Springwald
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 3     123   


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 21:36 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