AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi 3D Würfel mit Canvas, bitte um Hilfe

3D Würfel mit Canvas, bitte um Hilfe

Offene Frage von "Patty92"
Ein Thema von emerica2511 · begonnen am 4. Feb 2008 · letzter Beitrag vom 13. Feb 2010
Antwort Antwort
Seite 1 von 2  1 2   
emerica2511
(Gast)

n/a Beiträge
 
#1

3D Würfel mit Canvas, bitte um Hilfe

  Alt 4. Feb 2008, 16:54
Erstmal hallo zusammen,
ich hab folgendes Problem und hoffe ihr könnt mir dabei helfen. Habe schon mehrere Threads dazu gelesen aber ich verstehe es einfach nicht.
Ich soll einen Würfel in 3D darstellen mit Canvas, der sich drehen kann und den ich womöglich noch auf dem Bildschirm wandern lassen kann. Aber es geht mir erstmal nur darum den Würfel drehen zu lassen.
Ich denke es ist einfacher dieses Problem mit der Parallelprojektion zu lösen jedoch verstehe ich einfach die Mathematik dahinter nicht.
Ich habe mir folgendes überlegt, der Würfel befindet sich in einem dreidimensionalem Koordinatensystem, der Mittelpunkt des Würfels ist der Ursprung des Koordinatensystem (0|0|0) und er dreht sich entweder um die X-, die Y- oder die Z-Achse. Nun müsste ich ja beim drehen als erstes die neuen Koordianten im dreidimensionalen Koordinatensystem berechnen (also die Koordinaten der Eckpunkte) und diese dann umrechnen, sodas diese auch korrekt auf meinem 2d-Koordinatensystem Canvas angezeigt werden. Es wäre echt nett wenn mir das jemand erklären könnte mit Formeln. Hoffe ihr könnt mir helfen!

Gruß Emerica
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#2

Re: 3D Würfel mit Canvas, bitte um Hilfe

  Alt 4. Feb 2008, 18:03
Uff, da müsste man viel erklären. Eigentlich um sich was drehen zu lassen reicht sin und cos.
Damit kannst du dann einen Eckpunt im Koord.sys. des Würfels errechnen, Stichwort Kreisberechnung.

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls;

type
  TForm1 = class(TForm)
    Timer1: TTimer;
    procedure Timer1Timer(Sender: TObject);
  private
    { Private-Deklarationen }
    procedure MyPaint;
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

var
  r1: single;
  r2: single;
  n: integer = 4;
  x, y, z: integer;

  Phi: single;

  isMouseDown: Boolean = FALSE;

procedure TForm1.MyPaint;
var
  c: Integer;
begin
  with Canvas do
  begin
    Brush.Color := Color;
    FillRect(ClientRect);
    Pen.Color := clGray;

    Pen.Style := psClear;
    Brush.Color := clRed;

    r1 := 10;
    r2 := 60;
    z := round(r2 / 1.5);

    for c := 0 to n do
    begin
      x := round(cos(c * 2 * Pi / n + Phi) * (r1 - r2));
      y := round(sin(c * 2 * Pi / n + Phi) * (r1 - r2));

      FillRect(RECT(200 + x - 2, 200 + y - 2, 200 + x + 2, 200 + y + 2));
      FillRect(RECT(200 + x - 2, 200 + y - 2 - z, 200 + x + 2, 200 + y + 2 - z));
    end;
  end;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  MyPaint;
  if Phi < (2 * Pi) - 0.1 then Phi := Phi + 0.1 else Phi := 0.0;
end;

end.
Der Rest ist nun einfach...
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#3

Re: 3D Würfel mit Canvas, bitte um Hilfe

  Alt 4. Feb 2008, 18:17
Angenommen, du hast alle Eckpunkte des Würfeln als (x,y,z)-Vektor.
Um den Würfel zu drehen, muss eine Multiplikation mit einer 3*3 Matrix ausgeführt werden.
http://home10.inet.tele.dk/moelhave/...ormations.html

Die Multiplikation ist für jeden Eckpunkt durchzuführen.

Zum Zeichen lässt man einfach die Z-Ebene weg, und berücksichtigt nur die x & y Anteile der Punkte.
Jetzt hast du zusätzlich noch das Problem der Linien, die eigentlich nicht sichtbar sein dürfen (stichwort: Z-Buffer)
http://olli.informatik.uni-oldenburg...ow8/page1.html
Andreas
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: 3D Würfel mit Canvas, bitte um Hilfe

  Alt 4. Feb 2008, 23:24
Hallo emerica2511,

vielleicht hilft dir ja das weiter...

Gruss
Thorsten
Angehängte Dateien
Dateityp: zip 3d-vektor_103.zip (6,2 KB, 186x aufgerufen)
  Mit Zitat antworten Zitat
emerica2511
(Gast)

n/a Beiträge
 
#5

Re: 3D Würfel mit Canvas, bitte um Hilfe

  Alt 5. Feb 2008, 13:15
Vielen dank, für die schnellen und hilfreichen Antworten. Der Würfel kann sich nun drehen, habe dazu die Formeln von shmia´s link genommen, jetzt tut sich mir aber ein weiteres Problem auf.
Ich erechne die Koordinaten und runde dann beim darstellen mit Canvas, da ja nur Integerzahlen als Koordinaten in Frage kommen, rechne aber mit den Kommawerten weiter (also immer wieder die neuen Koordinaten) nun hab ich aber das Problem, wenn ich die Drehung in einen Timer packe, damit´s schick aussieht errechnet das Programm ja mehrere hundert mal die Koordinaten und (ich vermute, dass) duch Pi und die anderen Kommazahlen, das Ergebnis einfach immer immer ungenauer wird und so auch meine Koordinaten. Hat da vieleicht jemand eine Idee wie ich diese Ungenauigkeiten kommpensieren könnte?

Gruß und nochmals vielen Dank euch allen für die Hilfe,
Emerica
  Mit Zitat antworten Zitat
Benutzerbild von Kroko1999
Kroko1999

Registriert seit: 21. Apr 2005
Ort: Spremberg
455 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: 3D Würfel mit Canvas, bitte um Hilfe

  Alt 5. Feb 2008, 13:18
die Koordinaten immer in float lassen und nur die Anzeige in Integer umrechnen!
Da sprach der Stumme zum Blinden: "Du wirst sehen ..."
oder
Wer lesen kann, ist klar im Vorteil!
  Mit Zitat antworten Zitat
emerica2511
(Gast)

n/a Beiträge
 
#7

Re: 3D Würfel mit Canvas, bitte um Hilfe

  Alt 5. Feb 2008, 14:27
Ja das habe ich mir auch gedacht und habe es auch letztlich so gemacht, siehe da: der Würfel verformt sich nicht mehr so stark bzw. so früh (wie man´s nimmt)
Wenn ich den Würfel allerdings mit einem Timer rotieren lasse (dabei werden dann locker mal mehr als 300 oder 400 mal die Koordinaten neu berechnet) fängt der Würfel jedoch trotzdem an sich zu verformen
  Mit Zitat antworten Zitat
iGoA

Registriert seit: 9. Jul 2007
69 Beiträge
 
#8

Re: 3D Würfel mit Canvas, bitte um Hilfe

  Alt 5. Feb 2008, 14:43
Du musst die Rotation immer auf Deinen ursprünglichen Würfel anwenden und dafür den Winkel eben immer entsprechend verändern. Ich vermute, dass Du zur Zeit die Rotation auf den zuvor bereits rotierten Würfel anwendest. So summieren sich alle Rundungsfehler irgendwann immer.
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#9

Re: 3D Würfel mit Canvas, bitte um Hilfe

  Alt 5. Feb 2008, 14:44
Zitat von emerica2511:
Wenn ich den Würfel allerdings mit einem Timer rotieren lasse (dabei werden dann locker mal mehr als 300 oder 400 mal die Koordinaten neu berechnet) fängt der Würfel jedoch trotzdem an sich zu verformen
Die Transformationsmatrix sollte nur einmal berechnet werden und dann für alle 8 Eckpunkte angewendet werden.
Das spart jede Menge von Sin() und Cos() aufrufen.
Und du solltest die Funktion SinCos() verwenden, wenn du Sinus und Cosinus Werte zu einem Winkel brauchst. Das spart ~ 50%.

PS: wäre nicht schlecht, wenn du dein Programm als Open Source rausgeben würdest.
Könnte mir vorstellen, dass dies Einige interessiert (für Screensaver und andere Spielereien).
Andreas
  Mit Zitat antworten Zitat
Patty92

Registriert seit: 12. Feb 2010
2 Beiträge
 
#10

Re: 3D Würfel mit Canvas, bitte um Hilfe

  Alt 12. Feb 2010, 11:36
Hi,
kann mir vielleicht jemand mal genau erklären, wie ich einen Würfel zu drehen bekomme.
Er soll sich einfach nur im Kreis drehen.
Den Würfel habe ich schon.
Es wäre total cool wenn ihr mir helfen könnt.
Danke
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 18:59 Uhr.
Powered by vBulletin® Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2019 by Daniel R. Wolf