dus
kdurft eigenlijk zelfs ni vrage, swat
klopt mijn vieweyetransformatie?
iig wa ik dus doe is het volgende
Moff
4 2 1
0.0 0.0 0.0 = oorsprong
0.0 0.0 1.0 = ez
0.0 1.0 0.0 = ey
1.0 0.0 0.0 = ex
3 0 1 2 0 255 0 => groen
3 0 2 3 0 0 255 => blauw
2 0 1
dus maw 2 driehoeke, 1 int xy vlak en 1 int yz vlak
alsk da gewoon uitteken werkt het
alsk nu eye op de oorsprong zet en view op 0,0,1, dus ik kijk van op de z-as recht op het xy vlak, transformeer en ik krijg
+++++
_+___+
__+__+
___+_+
____++
_____+
nen blauwe, da hij blauw ging zijn da haddek wel verwacht, maar ik had em gedraaid verwacht en langs den andere kant bekeken (alsk view op 0,0,-1 zet, hebbek zelfs hetzelfde, wa dus ook ni zou moge kunne?)
swat
mijn viewtransf:
Code: Select all
PROCEDURE ViewOrigin*(eye: VectorOO.Vector): MatrixOO.Matrix;
BEGIN
ro := FindRo(eye);
phi := FindPhi(eye, ro);
theta := FindTheta(eye);
NEW(return);
return := RotationX(-phi);
return := return^.Mult(RotationZ(-theta - (Math.pi / 2)));
return := return^.Mult(Translation(eye^.ScalarMult(-1)));
RETURN return;
END ViewOrigin;
PROCEDURE FindRo(v: VectorOO.Vector): REAL;
BEGIN
RETURN v^.Norm();
END FindRo;
PROCEDURE FindPhi(v: VectorOO.Vector; ro: REAL): REAL;
VAR
x: REAL;
BEGIN
x := v^.Get(2) / ro;
RETURN Math.arctan(Math.sqrt(1 - (x * x)) / x);
END FindPhi;
PROCEDURE FindTheta(v: VectorOO.Vector): REAL;
VAR
theta: REAL;
BEGIN
IF v^.Get(0) < 0 THEN
theta := Math.arctan(v^.Get(1)/v^.Get(0)) + Math.pi;
ELSIF v^.Get(0) = 0 THEN
IF v^.Get(1) < 0 THEN
theta := (3/2) * Math.pi;
ELSE
theta := Math.pi / 2;
END;
ELSE
theta := Math.arctan(v^.Get(1)/v^.Get(0));
END;
RETURN theta;
END FindTheta;