AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Eigene 3D-Engine

Ein Thema von ISAS · begonnen am 21. Jan 2005 · letzter Beitrag vom 15. Mär 2005
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von ISAS
ISAS

Registriert seit: 24. Sep 2003
Ort: Vietnam
205 Beiträge
 
Delphi 4 Standard
 
#11

Re: Eigene 3D-Engine

  Alt 25. Jan 2005, 19:47
Ich kann mich irren, aber bezieht sich diese Formel nicht auf eine 3D darstellung eines Würfels, wo der Linienwinkel, die nach hinten gehen, genau 45° betragen
Signatur wurde auf Wunsch geändert. Deswegen einfach hier drauf klicken-> www.geggi.at.gg
  Mit Zitat antworten Zitat
hboy

Registriert seit: 16. Jan 2004
364 Beiträge
 
#12

Re: Eigene 3D-Engine

  Alt 25. Jan 2005, 20:08
Da ich mich nun auch zu denen zählen will die jedes rad selber erfinden wollen hab ich auch eine kleine 3D-Engine geschrieben, basierend nem happen Assembler und delphi code, einem bisschen canvas.
Kann 32bit texturen, z-bufferung und Alphablending ( MMX optimiert aber noch nicht eingebunden ^^ ).
hab das projekt aber geparkt weil mir das restliche optimieren zu stressig war.
Denk dran, der Reiz an der Sache ist, es selber zu machen. versuch zu beginn erst mal beliebige polygone zweidimensional darzustellen. Dann hast dus schon fast !
Du willst code sehen ? tja... selbst is der programmierer ^^
Power is nothing without TControl
  Mit Zitat antworten Zitat
hboy

Registriert seit: 16. Jan 2004
364 Beiträge
 
#13

Re: Eigene 3D-Engine

  Alt 25. Jan 2005, 20:16
achja ich hab das so hingezaubert

Delphi-Quellcode:
function transform3d(p: TPolygon):TPolygon;
var
  f1, f2, f3 : single;
  q: TPOlygoN;
const fov = 300;
begin




  // rotation

  q := p;

  q.a.x := round( p.a.x * cos(vp_a) + p.a.z * sin(vp_a));
  q.a.z := round( p.a.z * cos(vp_a) - p.a.x * sin(vp_a));
  q.b.x := round( p.b.x * cos(vp_a) + p.b.z * sin(vp_a));
  q.b.z := round( p.b.z * cos(vp_a) - p.b.x * sin(vp_a));
  q.c.x := round( p.c.x * cos(vp_a) + p.c.z * sin(vp_a));
  q.c.z := round( p.c.z * cos(vp_a) - p.c.x * sin(vp_a));

  p :=q;

  q.a.z := q.a.z+ vp_org.z;
  q.b.z := q.b.z+ vp_org.z;
  q.c.z := q.c.z+ vp_org.z;

  q.a.x := round( p.a.x * cos(vp_b) + p.a.y * sin(vp_b));
  q.a.y := round( p.a.y * cos(vp_b) - p.a.x * sin(vp_b));
  q.b.x := round( p.b.x * cos(vp_b) + p.b.y * sin(vp_b));
  q.b.y := round( p.b.y * cos(vp_b) - p.b.x * sin(vp_b));
  q.c.x := round( p.c.x * cos(vp_b) + p.c.y * sin(vp_b));
  q.c.y := round( p.c.y * cos(vp_b) - p.c.x * sin(vp_b));


  // projektion
  f1 := fov/(max(10,(fov+q.a.z))); // d/b
  f2 := fov/(max(10,(fov+q.b.z)));
  f3 := fov/(max(10,(fov+q.c.z)));

  result.a.x := screenXC + round((q.a.x + vp_org.x)*f1);
  result.b.x := screenXC + round((q.b.x + vp_org.x)*f2);
  result.c.x := screenXC + round((q.c.x + vp_org.x)*f3);

  result.a.y := screenYC - round((q.a.y + vp_org.y)*f1);
  result.b.y := screenYC - round((q.b.y + vp_org.y)*f2);
  result.c.y := screenYC - round((q.c.y + vp_org.y)*f3);


  result.a.z := q.a.z+fov;
  result.b.z := q.b.z+fov;
  result.c.z := q.c.z+fov;



end;
sollte noch dazu sagen: result kriegt die tatsächlichen Bildschirmkoordinaten und als z-wert die berechneten z-werte zum interpolieren ( z-buffer)
Miniaturansicht angehängter Grafiken
3de_191.jpg  
Power is nothing without TControl
  Mit Zitat antworten Zitat
Benutzerbild von Ben1
Ben1

Registriert seit: 11. Okt 2004
Ort: Rostock
36 Beiträge
 
Delphi 6 Personal
 
#14

Re: Eigene 3D-Engine

  Alt 26. Jan 2005, 08:15
Code:
Hab das nun von Ben versucht, aber das ging nicht
Wie, was ging nicht ?
Natürlich geht das! Habs doch selbst mal in jungen Jahren so gemacht!
Wichtig ist natürlich das die Vektoren ein kartesisches Rechtssystem bilden und man sich nicht irgendwo verrechnet. Aber dann geht das garantiert!
Ben
---------------------------------------
Spielanleitung !? Wieso ? Wozu ?
Im Quelltext steht doch alles drin !
Zitat: Ich selbst (1998)
  Mit Zitat antworten Zitat
rantanplan99
(Gast)

n/a Beiträge
 
#15

Re: Eigene 3D-Engine

  Alt 26. Jan 2005, 08:55
Hi,

ich hab mal uralten Sourcecode rausgekramt .. 10 Jahre alt *G* Damals noch in Trubo Pascal für DOS, und das mal nach Delphi portiert .. gab natürlich Probleme weil die Datentypen jetzt alle größer sind und ich das umpflügen musste, jetzt hauts aber hin, aber nicht alle Routinen sind Delphi kompatibel gemacht *g*

Das Programm lädt die 3D Object beschreibung aus Box.3D und stellt den Würfel dar. Die 3D --> 2D Projektion erfolgt aber nicht mathematisch, sondern ignoriert einfach die Z Koordinate.

Und bitte nehmt mich jetzt nicht auseinander weil der Sourcecode aussieht wie hingesch***** ... der ist wirklich von 1995.

rantanplan
Angehängte Dateien
Dateityp: zip demo_3d_147.zip (207,0 KB, 115x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von -NIP-
-NIP-

Registriert seit: 6. Jun 2004
Ort: Aachen
254 Beiträge
 
Delphi 7 Personal
 
#16

Re: Eigene 3D-Engine

  Alt 27. Jan 2005, 14:01
Zitat von Maximus:
, dann musst du für jeden der 8 Punkte X = X+0.5*Z und Y = Y+0.5*Z rechnen.
Wie kann man bitte einen Wert errechnen, den man den nur errechnen kann, wenn man den Wert schon kennt?
Bitte nicht übel nehmen, ich bin erst in der 9. Klasse.


Und:
Wenn die Z-Koordinate ausgelassen wird, ist es ja nicht 3d.

-NIP-
Christian
  Mit Zitat antworten Zitat
Benutzerbild von Ben1
Ben1

Registriert seit: 11. Okt 2004
Ort: Rostock
36 Beiträge
 
Delphi 6 Personal
 
#17

Re: Eigene 3D-Engine

  Alt 27. Jan 2005, 14:38
Zitat:
X = X+0.5*Z
Hier gibt es zwei X'se, einmal die Pixelkoordinate X und dann noch die Vektorkomponente X. Etwas undeutlich in der Formel.

Zitat:
Wenn die Z-Koordinate ausgelassen wird, ist es ja nicht 3d.
Stimmt nicht. Dein Bildschirm kann nichts dreidimensionales darstellen, er ist nunmal flach (mehr oder weniger), die Tiefe fällt immer weg. Hier geht um die Projektion eines 3D Objektes auf eine Fläche und in dem Zusammenhang ist das schlichte nich beachten der Z-Komponete durchaus eine, wenn auch sehr primitive, Methode.
Ben
---------------------------------------
Spielanleitung !? Wieso ? Wozu ?
Im Quelltext steht doch alles drin !
Zitat: Ich selbst (1998)
  Mit Zitat antworten Zitat
hboy

Registriert seit: 16. Jan 2004
364 Beiträge
 
#18

Re: Eigene 3D-Engine

  Alt 27. Jan 2005, 15:26
naja ich sag nix mehr dazu ...
Power is nothing without TControl
  Mit Zitat antworten Zitat
hboy

Registriert seit: 16. Jan 2004
364 Beiträge
 
#19

Re: Eigene 3D-Engine

  Alt 15. Mär 2005, 21:33
mh doch zwei sachen ^^
erstens is zur Zeit Abistress auf der Speisekarte , zweitens zu meinem Codeschnipsel:
vp ist Viewport

vp_a ist der Winkel um die Hochachse, eigentlich fehlt noch vp_g also gamma damit ich alle drei winkel drin hab, hab ich aber noch nicht so weit gebraucht, und achja vp_org ist der origin also der Ursprung des Viewports. ScreenXC und YC sind die werte der Bildschirmmitte

und gute nacht
Power is nothing without TControl
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 02:08 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