diff options
author | Mattias Andrée <maandree@operamail.com> | 2013-11-26 07:37:44 +0100 |
---|---|---|
committer | Mattias Andrée <maandree@operamail.com> | 2013-11-26 07:37:44 +0100 |
commit | 6e5986b504fb1142f2e51d67cc8434b5143f39e5 (patch) | |
tree | 29397e161f4366664c837feebf869a34dd2f50ef | |
parent | add global speed modifier (diff) | |
download | rotation3d-6e5986b504fb1142f2e51d67cc8434b5143f39e5.tar.gz rotation3d-6e5986b504fb1142f2e51d67cc8434b5143f39e5.tar.bz2 rotation3d-6e5986b504fb1142f2e51d67cc8434b5143f39e5.tar.xz |
add camera tilt
Signed-off-by: Mattias Andrée <maandree@operamail.com>
-rw-r--r-- | src/v/D3.java | 60 |
1 files changed, 45 insertions, 15 deletions
diff --git a/src/v/D3.java b/src/v/D3.java index 3b918a8..eac59ea 100644 --- a/src/v/D3.java +++ b/src/v/D3.java @@ -68,20 +68,50 @@ public class D3 window.setLayout(new BorderLayout()); window.add(panel = new JPanel() { + float[][] Pm = UNIT; + { this.setBackground(Color.BLACK); + Pm = createRotation("y", -10f); } + float[] pxs = new float[8]; + float[] pys = new float[8]; + float[] pzs = new float[8]; + + float[] normal_pxs = new float[6]; + float[] normal_pys = new float[6]; + float[] normal_pzs = new float[6]; + @Override public void paint(Graphics g) { super.paint(g); + + /* Camera */ + for (int i = 0; i < 8; i++) + { + float[] v = mul(Pm, xs[i], ys[i], zs[i]); + pxs[i] = v[0]; + pys[i] = v[1]; + pzs[i] = v[2]; + } + for (int i = 0; i < 6; i++) + { + float[] v = mul(Pm, normal_xs[i], normal_ys[i], normal_zs[i]); + normal_pxs[i] = v[0]; + normal_pys[i] = v[1]; + normal_pzs[i] = v[2]; + } + /* End camera */ + + /* */ int[] z = new int[6]; for (int i = 0; i < 6; i++) { - int v = (int)(normal_zs[i] * 1000f); + int v = (int)(normal_pzs[i] * 1000f); z[i] = (v << 8) | i; } @@ -92,12 +122,12 @@ public class D3 int side = z[i] & 7; switch (side) { - case 0: draw(188, 188, 188, 0, 1, 5, 4, g, normal_zs[0]); break; - case 1: draw(188, 0, 0, 0, 1, 3, 2, g, normal_zs[1]); break; - case 2: draw( 0, 188, 0, 0, 2, 6, 4, g, normal_zs[2]); break; - case 3: draw( 0, 0, 188, 1, 3, 7, 5, g, normal_zs[3]); break; - case 4: draw(188, 128, 0, 4, 5, 7, 6, g, normal_zs[4]); break; - case 5: draw(188, 188, 0, 2, 3, 7, 6, g, normal_zs[5]); break; + case 0: draw(188, 188, 188, 0, 1, 5, 4, g, normal_pzs[0]); break; + case 1: draw(188, 0, 0, 0, 1, 3, 2, g, normal_pzs[1]); break; + case 2: draw( 0, 188, 0, 0, 2, 6, 4, g, normal_pzs[2]); break; + case 3: draw( 0, 0, 188, 1, 3, 7, 5, g, normal_pzs[3]); break; + case 4: draw(188, 128, 0, 4, 5, 7, 6, g, normal_pzs[4]); break; + case 5: draw(188, 188, 0, 2, 3, 7, 6, g, normal_pzs[5]); break; } } /* */ @@ -151,12 +181,12 @@ public class D3 private int Px(int i) { /* Orthogonal projection */ - //float z = SCREEN_Z / (zs[i] + MODEL_Z); - //return (int)(xs[i] * z * 300f + 400f); + //float z = SCREEN_Z / (pzs[i] + MODEL_Z); + //return (int)(pxs[i] * z * 300f + 400f); /* Perspective projection */ - float model_z = zs[i] + MODEL_Z; - float model_x = xs[i]; + float model_z = pzs[i] + MODEL_Z; + float model_x = pxs[i]; float p = VIEWER_Z / (model_z - CAMERA_Z) * (model_x - CAMERA_X) - VIEWER_X; return (int)(p * 300f + 400f); } @@ -164,12 +194,12 @@ public class D3 private int Py(int i) { /* Orthogonal projection */ - //float z = SCREEN_Z / (zs[i] + MODEL_Z); - //return (int)(ys[i] * z * 300f + 300f); + //float z = SCREEN_Z / (pzs[i] + MODEL_Z); + //return (int)(pys[i] * z * 300f + 300f); /* Perspective projection */ - float model_z = zs[i] + MODEL_Z; - float model_y = ys[i]; + float model_z = pzs[i] + MODEL_Z; + float model_y = pys[i]; float p = VIEWER_Z / (model_z - CAMERA_Z) * (model_y - CAMERA_Y) - VIEWER_Y; return (int)(p * 300f + 300f); } |