Berechnungen für 3d-Ansicht

Nord-Süd-Richtung

Erfahrenes Mitglied
Hi

ich wollt mal wissen ob mir jemand weiterhelfen kann :) Ich möchte z.b. einen 3-D Würfel zeichnen. Im Prinzip zeichne ich ja erst ein Quadrat (wenn ich den Würfel von vorne sehe) und dann die Tiefenlinien. Ich möchte nun gerne wissen, wie ich die Winkel dieser Tiefenlinien (und die Länge) je nach Sichtwinkel berechnen kann (dazu kommt später auch die Grundfläche des Quadrats). Ich habe gegoogelt nur leider nichts gefunden :( Ich hoffe ihr könnt mir helfen.
 
Hallo,

für einen einfachen perspektivischen 3D-Effekt reicht es schon, wenn du als Bildschirmkoordinaten (x/z, y/z) verwendest. Dabei sollen x, y, z die Raumkoordinaten relativ zur Kamera sein, welche sich im Ursprung befindet und Richtung positiver z-Achse blickt.

Wenn du es allgemeiner haben willst, musst du dir eine passende 4×4-Projektionsmatrix aufstellen.

Grüße,
Matthias
 
Hi

ich glaube ich habe dich leider falsch verstanden.
Wenn ich einen Würfel habe, mit folgenden Koordinaten, wie soll ich diese dann aufmalen (beispiel php). Mein Ansatz sah jetzt mal so aus:
PHP:
<?php
header("Content-type: image/png");
$im = imagecreatetruecolor(500,500);
                    #x,#y,#z
$cube = array(array(10,10,10),
              array(20,10,10),
              array(10,20,10),
              array(20,20,10),
              array(10,10,20),
              array(20,10,20),
              array(10,20,20),
              array(20,20,20)
              );
foreach($cube as $c){
  imagesetpixel($im,$c[0],$c[2],imagecolorallocate($im,255,255,255));
  imagesetpixel($im,$c[1],$c[2],imagecolorallocate($im,255,255,255));
}
imagepng($im);
?>
Ich erhalte ein Quadrat :S
 
ich glaube ich habe dich leider falsch verstanden.
Das glaube ich auch ;) Probier es mal so:

PHP:
<?php
header("Content-type: image/png");
$im = imagecreatetruecolor(500,500);
                    #x,#y,#z
$cube = array(array(-1,-1,2),
              array( 1,-1,2),
              array(-1, 1,2),
              array( 1, 1,2),
              array(-1,-1,3),
              array( 1,-1,3),
              array(-1, 1,3),
              array( 1, 1,3)
              );
foreach($cube as $c){
  imagesetpixel(
    $im,
    ($c[0]/$c[2]+1)*0.5*500,
    ($c[1]/$c[2]+1)*0.5*500,
    imagecolorallocate($im,255,255,255));
}
imagepng($im);
?>
Du solltest ja den Punkt an den Koordinaten „x geteilt durch z, y geteilt durch z“ zeichnen. Die restlichen Operationen sorgen nur dafür, dass der Koordinatenursprung auch in der Bildmitte dargestellt wird.

Grüße,
Matthias
 
leider sind die Links schon gut 4 Jahre alt und funktionieren nicht mehr :(

Oh, sorry, das hab ich net überprüft. Dann frag doch mal den/das Alphanimal, ob er/es die Files noch mal hochlädt. Das Tut war echt spitze, weils das Prinzip der 3D-Darstellung auf einer 2D-Leinwand sehr anschaulich und verständlich erklärt hat.

Grüße, Frezl
 
Zuletzt bearbeitet:
Zurück