AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Suche Abbildungsmatrix
Thema durchsuchen
Ansicht
Themen-Optionen

Suche Abbildungsmatrix

Ein Thema von Eichhoernchen · begonnen am 22. Nov 2006 · letzter Beitrag vom 23. Nov 2006
Antwort Antwort
Eichhoernchen

Registriert seit: 22. Apr 2004
Ort: Hagen
322 Beiträge
 
Turbo Delphi für Win32
 
#1

Suche Abbildungsmatrix

  Alt 22. Nov 2006, 20:33
Hallo,
ich bin gerade dabei mir ein kleines Programm zu schreiben, dass einen Würfel auf einem Canvas drehen lassen soll.
Das mit dem drehen und allem habe ich schon realisiert mit ein paar Drehmatrixen. (wie ist der Plural?)

Nun stellt sich mir die Frage, ob es eine Abbildungsmatrix gibt, mit der man sozusagen einen 3D Vektor auf eine 2D Ebene projizieren kann, sprich ich hab einen Punkt mit x, y und z Koordinate, diese möchte ich nun gern auf einer 2D Ebene (einem Canvas) abbilden, so dass der Würfel, den ich aus den Punkten erstelle, perspektivisch wirkt als ob ich ihn auf ein Blatt Papier zeichnen würde.

Und jetzt kommt mir nicht, dass ich OpenGl oder DirectX nutzen soll, dass will ich nicht.

Irgendwie muss das ja gehen, nur bin ich mir nicht sicher, ob es für sowas schon "vorgefertigte" Matrixen (??) gibt!

Danke

Eichhoernchen
Jan
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#2

Re: Suche Abbildungsmatrix

  Alt 22. Nov 2006, 20:37
Das Wort heißt 'Matrizen'. Alle geometrischen Operationen, also Projektion, Rotation etc. sind durch Matrixmultiplikationen beschrieben, also müsste es möglich sein, die entsprechenden Matrizen miteinander zu verknüpfen (also multiplizieren), um deine gewünschte Operationsmatrix zu erhalten. Du musst nur auf die Reihenfolge achten.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
rayman

Registriert seit: 31. Jul 2003
Ort: Lohsdorf
40 Beiträge
 
Delphi 6 Enterprise
 
#3

Re: Suche Abbildungsmatrix

  Alt 22. Nov 2006, 20:51
Die perspektivische Verzerrung ist aber nicht einfach durch Multiplikation mit einer Matrix zu verwirklichen, weil bei sowas alles linear bleibt (strecken, drehen, u.s.w.).

Du musst am Ende (nach der Projektion auf die "BildEbene") noch jeden Punkt (x, y) ans Bildzentrum (Blickpunkt) ranrücken, je nachdem, wie weit er vom Betrachter entfernt ist (z).

also: (pseudo)

Code:
canvas.x := canvas_mitte.x + (punkt.x - blickpunkt.x) / punkt.z;
canvas.y := canvas_mitte.y + (punkt.y - blickpunkt.y) / punkt.z;
dann kannst du etwas rumprobieren, wie gut das mit dem z klappt. Eventuell sollte du das Ganze noch etwas skalieren (in z-Richtung) damit es schön aussieht. Je weiter deine Kamera vom Gegenstand weg sein soll, desto mehr ist in z-Richtung zu stauchen.

€: ein paar "musstu" hab ich weggemacht. sah nicht nett aus
  Mit Zitat antworten Zitat
Cöster

Registriert seit: 6. Jun 2006
589 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Suche Abbildungsmatrix

  Alt 22. Nov 2006, 20:56
Interessantes Thema

Man kann ein 3D-Koordinatensystem ja auf ein Blatt zeichnen: Die x- und y-Achse ganz normal, die z-Achse geht um 45° schräg nach oben. Die Länge einer Einheit auf der x- und y-Achse ist 1 cm. Auf der z-Achse ist eine Einheit Sqrt(2)/2 cm lang, also ungefähr 0,7 cm. Um einen Punkt(X, Y, Z) aus 3D in 2D umzurechnen, verschiebst du den Punkt(X, Y) um Z*Sqrt(2)/2 nach oben rechts. Punkt(1, 2, 3) wäre also Punkt(1,2) um 3*Sqrt(2)/2 (ca. 2) nach oben rechts verschoben.
Wie verschiebt man einen Punkt jetzt um n*Sqrt(2)/2 nach oben rechts? man geht um n/2 nach rechts und um n/2 nach oben.

Ich denke, das ließe sich so realisieren.
  Mit Zitat antworten Zitat
Eichhoernchen

Registriert seit: 22. Apr 2004
Ort: Hagen
322 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Suche Abbildungsmatrix

  Alt 22. Nov 2006, 21:02
Ahh, ja gute Idee... das versuch ich einfach mal, mal schauen, was ich da für ein Gebilde bekomme!
Jan
  Mit Zitat antworten Zitat
Eichhoernchen

Registriert seit: 22. Apr 2004
Ort: Hagen
322 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Suche Abbildungsmatrix

  Alt 22. Nov 2006, 21:25
So, klappt wunderbar, so wie es Cöster beschrieben hat.

Ich häng mal mein Progrämmchen an, dort wird ein "Würfel" (8 Punkte, aber das Gehirn denkt sich scheinbar die Linien dazu[man erkennt irgendwie ganz gut, dass es nen Würfel ist]) mit nem Timer in Y und in Z Richtung auf nem Canvas gedreht.
Angehängte Dateien
Dateityp: zip drawcube_132.zip (5,0 KB, 25x aufgerufen)
Jan
  Mit Zitat antworten Zitat
rayman

Registriert seit: 31. Jul 2003
Ort: Lohsdorf
40 Beiträge
 
Delphi 6 Enterprise
 
#7

Re: Suche Abbildungsmatrix

  Alt 23. Nov 2006, 08:41
Wenn du es so machst, wie ich gemeint hab, sieht es noch besser aus:

Delphi-Quellcode:
const
  NEAR_PLANE = 1;
  ZOOM = 80;
  DISTANCE = 30;

procedure TForm1.DrawCube(M: TCube);
var
  i: integer;
  Pixel: T3DVektor;

  Mitte: TPoint;
begin
  Image1.Canvas.Rectangle(0,0, image1.Width, image1.Height);

  Mitte.x := Image1.Width div 2;
  Mitte.y := Image1.Height div 2;

  for i := 1 to 8 do begin
    Pixel := M[i];
    if (pixel.z + distance > NEAR_PLANE) then begin
      Pixel.x := ZOOM*Pixel.x / (Pixel.z + DISTANCE) + Mitte.x;
      Pixel.y := ZOOM*Pixel.y / (Pixel.z + DISTANCE) + Mitte.y;
      Image1.Canvas.Pixels[round(Pixel.X), round(Pixel.y)] := clblack;
    end;
  end;
end;
probiers mal
  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 06:31 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