From 57c5b6cd8d12ffdaa3e0b099451e3c031012750a Mon Sep 17 00:00:00 2001 From: Normand Briere <nbriere@noware.ca> Date: Thu, 03 Oct 2019 20:34:32 -0400 Subject: [PATCH] Fix lighttouched --- CameraPane.java | 827 ++++++++++++++++++++++++++++++++++++++++++---------------- 1 files changed, 601 insertions(+), 226 deletions(-) diff --git a/CameraPane.java b/CameraPane.java index 7370fc9..b60cf14 100644 --- a/CameraPane.java +++ b/CameraPane.java @@ -1,4 +1,5 @@ +import com.bulletphysics.dynamics.RigidBody; import java.awt.*; import java.awt.event.*; import java.awt.image.*; @@ -123,7 +124,7 @@ static boolean LOCALTRANSFORM = false; static boolean FULLSCREEN = false; static boolean SUPPORT = true; -static boolean INERTIA = true; +static boolean INERTIA = false; // true; static boolean FAST = false; static boolean SLOWPOSE = false; static boolean FOOTCONTACT = true; @@ -134,7 +135,7 @@ static boolean ZOOMBOXMODE = false; static boolean BOXMODE = false; static boolean IMAGEFLIP = false; -static boolean SMOOTHFOCUS = false; +static boolean SMOOTHFOCUS = true; // false; static boolean SPEAKERMOCAP = true; // jan 2014 false; static boolean SPEAKERCAMERA = false; static boolean SPEAKERFOCUS = false; @@ -174,7 +175,7 @@ boolean Udebug = false; boolean Vdebug = false; boolean NORMALdebug = false; - static boolean doublesided = false; // true; // reversed normals are awful for conformance + static boolean doublesided = true; // false; // reversed normals are awful for conformance boolean anisotropy = true; boolean softshadow = true; // slower but better false; boolean opacityhalo = false; // reverse the halo effect (e.g. glass) @@ -221,10 +222,10 @@ cameras = new Camera[2]; targetLookAts = new cVector[2]; - SetCamera(cam); + SetCamera(cam, true); // Warning: not used. - SetLight(new Camera(new cVector(15, 10, -20))); + //SetLight(new Camera(new cVector(15, 10, -20))); object = o; @@ -249,7 +250,7 @@ public javax.media.opengl.GL GetGL0() { - return null; + return currentGL; } public int GenList() @@ -881,7 +882,7 @@ //// tris.postdraw(this); } - static Camera localcamera = new Camera(); + static Camera localAOcamera = new Camera(); static cVector from = new cVector(); static cVector to = new cVector(); @@ -890,7 +891,7 @@ CameraPane cp = this; Camera keep = cp.RenderCamera(); - cp.renderCamera = localcamera; + cp.renderCamera = localAOcamera; if (br.trimmed) { @@ -908,7 +909,7 @@ br.positions[i3 + 2] + br.normals[i3 + 2]); LA.xformPos(from, transform, from); LA.xformPos(to, transform, to); // RIGID ONLY - localcamera.setAim(from, to); + localAOcamera.setAim(from, to); CameraPane.occlusionbuffer.display(); @@ -942,7 +943,7 @@ to.set(v.x+v.norm.x, v.y+v.norm.y, v.z+v.norm.z); LA.xformPos(from, transform, from); LA.xformPos(to, transform, to); // RIGID ONLY - localcamera.setAim(from, to); + localAOcamera.setAim(from, to); CameraPane.occlusionbuffer.display(); @@ -1529,7 +1530,7 @@ } } float b = 0; - if (obj.support != null && obj.link2master) + if (obj.support != null && obj.Link2Support()) { b = 1; } @@ -2064,7 +2065,7 @@ static int camerachangeframe; - public boolean SetCamera(Camera cam) + public boolean SetCamera(Camera cam, boolean set) { // may 2014 if (cam == cameras[0] || cam == cameras[1]) // return false; @@ -2082,7 +2083,8 @@ camerachangeframe = Globals.framecount; - cam.hAspect = -1; // Read only + if (cam != null) + cam.hAspect = -1; // Read only cameras[0] = cam; targetLookAts[0] = new cVector(cam.lookAt); @@ -2092,11 +2094,14 @@ { cameras[i] = new Camera(cam.viewCode); } - - cameras[i].setAim(cam.location, cam.lookAt); - cameras[i].shaper_fovy = cam.shaper_fovy; - cameras[i].UP.set(cam.UP); - targetLookAts[i] = new cVector(cameras[i].lookAt); + + if (set) + { + cameras[i].setAim(cam.location, cam.lookAt); + cameras[i].shaper_fovy = cam.shaper_fovy; + cameras[i].UP.set(cam.UP); + targetLookAts[i] = new cVector(cameras[i].lookAt); + } } cameracount = 0; targetLookAt = targetLookAts[cameracount]; @@ -2105,7 +2110,7 @@ // Start with free camera SwitchCameras(true); - pingthread.jump = true; // optional? +// pingthread.jump = true; // optional? if (TRACKONCE) { @@ -2292,18 +2297,6 @@ public void ToggleTrack() { TRACK ^= true; - if (TRACK) - { - if (object.selection != null && - object.selection.size() > 0 && - object.selection.elementAt(0) != null && - !(object.selection.elementAt(0) instanceof Camera) && - !(object.selection.elementAt(0) instanceof ScriptNode)) - { - trackedobject = object.selection.elementAt(0); - repaint(); - } - } repaint(); } @@ -2395,7 +2388,8 @@ { //System.out.println("PROTECTION = " + cam.hAspect); //assert (cam.hAspect == 0); - cam.hAspect = 0; + if (cam != null) + cam.hAspect = 0; lightCamera = cam; } @@ -3596,6 +3590,8 @@ }; /**/ + static Object3D lastObject; + //com.sun.opengl.util.texture.Texture TextureData GetFileTexture(String name, boolean bump, int resolution) @@ -3632,6 +3628,8 @@ // return null; //if (i == 2) // return null; + // TIFF issue sept 2019 + System.err.println("lastObject = " + lastObject); e.printStackTrace(); name = name.split("\\.tif")[0] + ".jpg"; } @@ -6964,30 +6962,30 @@ short residu = 0; // wraparound workarounds - short fuck = (short) (buffer[i] & 0xFF); + short ww = (short) (buffer[i] & 0xFF); /* - residu += (fuck%2); - if(fuck/2 < 256-residu/2) + residu += (ww%2); + if(ww/2 < 256-residu/2) { - fuck = (short)((fuck/2) + residu/2); + ww = (short)((ww/2) + residu/2); if(residu == 2) residu = 0; } else { residu = 0; - fuck /= 2; + ww /= 2; } */ - if (i < imglength / 3 || rnd.nextFloat() < 0.5 || fuck >= 254) + if (i < imglength / 3 || rnd.nextFloat() < 0.5 || ww >= 254) { - fuck /= 2; + ww /= 2; } else { - fuck = (short) ((fuck / 2) + fuck % 2); + ww = (short) ((ww / 2) + ww % 2); } - buffer[i] = (byte) fuck; + buffer[i] = (byte) ww; } //System.out.print(bytes[i] + " "); //if(buffer[i] >= 0 && buffer[i]<=eps-1) buffer[i] = eps; @@ -8454,12 +8452,12 @@ { // texturecache = textures.get(texname); // suspicious if (texturecache == null) - texturecache = new CacheTexture(GetResourceTexture("whitenoise.png", bump),resolution); + texturecache = new CacheTexture(GetResourceTexture("whitenoise.jpg", bump),resolution); else new Exception().printStackTrace(); } else { - if (texname.startsWith("@")) + if (texname.startsWith("@") && textureon) { // texturecache = textures.get(texname); // suspicious if (texturecache == null) @@ -8642,7 +8640,9 @@ { tex.bw = texturecache.texturedata.getWidth(); tex.bh = texturecache.texturedata.getHeight(); - tex.bumpdata = CompressJPEG(CreateBim(((ByteBuffer)texturecache.texturedata.getBuffer()).array(), tex.bw, tex.bh), 0.5f); + tex.bumpdata = //CompressJPEG(CreateBim( + ((ByteBuffer)texturecache.texturedata.getBuffer()).array(); + //, tex.bw, tex.bh), 0.5f); } } } @@ -9840,7 +9840,10 @@ DrawSkyBox(gl, (float)rati); gl.glEnable(GL.GL_FRAGMENT_PROGRAM_ARB); gl.glEnable(GL.GL_VERTEX_PROGRAM_ARB); - accPerspective(gl, renderCamera.shaper_fovy / ratio, + + boolean vr = capsLocked && !lightMode; + + accPerspective(gl, renderCamera.shaper_fovy / ratio * (vr ? 1.2 : 1), ratio, //near_plane, far_plane, renderCamera.shaper_zNear * renderCamera.Distance(), renderCamera.shaper_zFar * renderCamera.Distance(), @@ -10712,7 +10715,7 @@ if (patchMaterial.patchMaterial) { patchMaterial.patchMaterial = false; - patchMaterial.objectPanel.setSelectedIndex(1); + patchMaterial.objectTabbedPane.setSelectedIndex(1); } if (Grafreed.savesound && Grafreed.hassound) @@ -10758,7 +10761,9 @@ } /**/ - if (selection) + boolean control = ((modifiers & CTRL) != 0); + + if (selection && (!Globals.isLIVE() || control)) { selectbuffer.display(); return; @@ -10810,6 +10815,112 @@ if (DrawMode() == DEFAULT) { + if (manipCamera == lightCamera) + { +// switch (e.getKeyCode()) +// { +// case DOWN_ARROW: +// lightCamera.DECAL /= 2; +// repaint(); +// break; +// case UP_ARROW: +// lightCamera.DECAL *= 2; +// repaint(); +// break; +// case LEFT_ARROW: +// lightCamera.SCALE /= 2; +// repaint(); +// break; +// case RIGHT_ARROW: +// lightCamera.SCALE *= 2; +// repaint(); +// break; +// default: +// break; + if (keys[DOWN_ARROW]) + { + lightCamera.DECAL /= 2; + } + + if (keys[UP_ARROW]) + { + lightCamera.DECAL *= 2; + } + + if (keys[LEFT_ARROW]) + { + lightCamera.SCALE /= 2; + } + + if (keys[RIGHT_ARROW]) + { + lightCamera.SCALE *= 2; + } + } + else + { + //pingthread.mute = true; + + boolean keyon = false; + + if (keys[DOWN_ARROW]) + { + speed = ++speedkey[DOWN_ARROW]; + if (speed > 20) + speed = 20; + GoDown(modifiers); + keyon = true; + } + else + speedkey[DOWN_ARROW] = 0; + + if (keys[UP_ARROW]) + { + speed = ++speedkey[UP_ARROW]; + if (speed > 20) + speed = 20; + GoUp(modifiers); + keyon = true; + } + else + speedkey[UP_ARROW] = 0; + + if (keys[LEFT_ARROW]) + { + speed = ++speedkey[LEFT_ARROW]; + if (speed > 20) + speed = 20; + GoLeft(modifiers); + keyon = true; + } + else + speedkey[LEFT_ARROW] = 0; + + if (keys[RIGHT_ARROW]) + { + speed = ++speedkey[RIGHT_ARROW]; + if (speed > 20) + speed = 20; + GoRight(modifiers); + keyon = true; + } + else + speedkey[RIGHT_ARROW] = 0; + + if (Globals.WALK && capsLocked) + { + Walk(); + keyon = true; + } + + if (keyon) + { + repaint(); + } + + //pingthread.mute = false; + } + currentlydrawing = true; } @@ -11334,9 +11445,9 @@ gl.glMatrixMode(GL.GL_MODELVIEW); -gl.glEnable(gl.GL_POLYGON_SMOOTH); -gl.glHint(gl.GL_POLYGON_SMOOTH_HINT, gl.GL_NICEST); -gl.glEnable(gl.GL_MULTISAMPLE); +//gl.glEnable(gl.GL_POLYGON_SMOOTH); +//gl.glHint(gl.GL_POLYGON_SMOOTH_HINT, gl.GL_NICEST); +//gl.glEnable(gl.GL_MULTISAMPLE); } else { //gl.glDisable(GL.GL_TEXTURE_2D); @@ -11397,7 +11508,10 @@ //gl.glOrtho(-BOOST, BOOST, -BOOST, BOOST, 0.001, 1000); } else { - glu.gluPerspective(cam.shaper_fovy / ratio, ratio, cam.shaper_zNear * cam.Distance(), cam.shaper_zFar * cam.Distance()); + boolean vr = capsLocked && !lightMode; + + glu.gluPerspective(cam.shaper_fovy / ratio * (vr ? 1.2 : 1), + ratio, cam.shaper_zNear * cam.Distance(), cam.shaper_zFar * cam.Distance()); } } @@ -11753,8 +11867,11 @@ repaint(); } - if (Globals.isLIVE() && DrawMode() == DEFAULT) // may 2013 + if (Globals.isLIVE() && DrawMode() == DEFAULT || pingthread.live) // may 2013 + { + renderCamera.computeTransform(); repaint(); + } displaydone = true; } @@ -11829,9 +11946,23 @@ //GL gl = getGL(); if ((TRACK || SHADOWTRACK) || zoomonce) { + if (TRACK) + { + if (object.selection != null && + object.selection.size() > 0 && + object.selection.elementAt(0) != null && + !(object.selection.elementAt(0) instanceof Camera) && + !(object.selection.elementAt(0) instanceof ScriptNode)) + { + trackedobject = object.selection.elementAt(0); + //repaint(); + } + else + trackedobject = null; + } if ((TRACK || SHADOWTRACK) && trackedobject != null && DrawMode() == SHADOW) // && !lightMode) object.GetWindow().ScreenFit(trackedobject, SHADOWTRACK && !TRACK); - pingthread.StepToTarget(true); // true); + pingthread.StepToTarget(); // true); // zoomonce = false; } @@ -12514,8 +12645,9 @@ String programmin = // Min shader "!!ARBfp1.0\n" + - "PARAM zero123 = { 0.0, 1.0, 2, 1.25 };" + - "PARAM pow2 = { 0.5, 0.25, 0.125, 0.0 };" + + "PARAM zero12t = { 0.0, 1.0, 2, 1.25 };" + + "PARAM pow_2 = { 0.5, 0.25, 0.125, 0.0 };" + + "PARAM pow2 = { 2, 4, 8, 0.0 };" + "PARAM one = { 1.0, 1.0, 1.0, 1.0 };" + "PARAM eps = { 0.001, 0.001, 0.001, 1.0 };" + "PARAM infinity = { 100000000, 100000000, 100000000, 1.0 };" + @@ -12530,10 +12662,11 @@ "TEMP eye;" + "TEMP pos;" + - "MAD normal, fragment.color, zero123.z, -zero123.y;" + + "MAD normal, fragment.color, zero12t.z, -zero12t.y;" + Normalize("normal") + "MOV light, state.light[0].position;" + "DP3 ndotl.x, light, normal;" + + "MAX ndotl.x, ndotl.x, zero12t.x;" + // shadow "MOV pos, fragment.texcoord[1];" + @@ -12549,7 +12682,7 @@ "MUL ndotl.x, ndotl.x, ndotl.z;" + // Shadow // Backlit - "MOV pos.w, zero123.y;" + + "MOV pos.w, zero12t.y;" + // one "DP4 eye.x, pos, light2cam0;" + "DP4 eye.y, pos, light2cam1;" + "DP4 eye.z, pos, light2cam2;" + @@ -12557,24 +12690,28 @@ "DP3 ndotl.y, -eye, normal;" + //"MUL ndotl.y, ndotl.y, pow2.x;" + - "POW ndotl.y, ndotl.y, pow2.z;" + // backlit - "SUB ndotl.y, zero123.y, ndotl.y;" + + "POW ndotl.y, ndotl.y, pow2.x;" + // backlit + "SUB ndotl.y, zero12t.y, ndotl.y;" + // 1 - y + //"POW ndotl.y, ndotl.y, pow2.z;" + // backlit //"SUB ndotl.y, zero123.y, ndotl.y;" + //"MUL ndotl.y, ndotl.y, pow2.z;" + + "ADD ndotl.y, ndotl.y, one.x;" + + "MUL ndotl.y, ndotl.y, pow_2.x;" + //"MAX ndotl.x, ndotl.x, ndotl.y;" + // Ambient //"MAX ndotl.x, ndotl.x, pow2.y;" + // Ambient // Pigment "TEX temp, fragment.texcoord[0], texture[0], 2D;" + - "LRP temp, zero123.w, temp, one;" + // texture proportion - "MUL temp, temp, ndotl.x;" + - - "MUL temp, temp, zero123.z;" + + "LRP temp, zero12t.w, temp, one;" + // texture proportion + "MUL temp, temp, zero12t.w;" + // Times x //"MUL temp, temp, ndotl.y;" + + "MAD ndotl.x, pow_2.xxxx, ndotl.yyyy, ndotl.x;" + - "MOV temp.w, zero123.y;" + // reset alpha + "MUL temp, temp, ndotl.x;" + // lambert + + "MOV temp.w, zero12t.y;" + // reset alpha "MOV result.color, temp;" + "END"; @@ -12946,12 +13083,7 @@ "ADD temp.x, temp.x, one.x;" + "MUL normal, normal, temp.xxxx;":"" ) + - /**/ -//// Normalize("normal") + -//// "MAX normal.z, eps.x, normal.z;" + -// Normalize("normal") + - "MOV normald, normal;" + - "MOV normals, normal;" + + /**/ "MOV temp, fragment.texcoord[4];" + @@ -12969,6 +13101,17 @@ "XPD U, V, normal;" + Normalize("U") + + "MOV temp, fragment.texcoord[0];" + + +// "MAD normal, -temp.x, U, normal;" + +// "MAD normal, -temp.y, V, normal;" + +// Normalize("normal") + + +//// "MAX normal.z, eps.x, normal.z;" + +// Normalize("normal") + + "MOV normald, normal;" + + "MOV normals, normal;" + + // parallax mapping "DP3 temp2.x, V, eye;" + @@ -12981,17 +13124,15 @@ "RCP temp2.w, temp2.w;" + "SUB temp2.w, temp2.w, half;" + -// "SGE temp.x, temp2.w, eps.x;" + -// "MUL temp2.w, temp2.w, temp.x;" + + // "SGE temp.x, temp2.w, eps.x;" + + // "MUL temp2.w, temp2.w, temp.x;" + - //"MOV texSamp, U;" + + // "MOV texSamp, U;" + "MUL temp2.z, temp2.z, temp2.w;" + "MUL temp2.z, temp2.z, params7.z;" + // parallax "MUL temp2, temp2, temp2.z;" + - - "MOV temp, fragment.texcoord[0];" + "SUB temp, temp, temp2;" + @@ -12999,7 +13140,7 @@ "POW temp.a, temp.a, params6.w;" + // punch through "ADD texSamp, temp, texSamp;" + - "MUL temp.xyz, half, texSamp;" + + "MUL texSamp.xyz, half, texSamp;" + "MOV alpha, texSamp.aaaa;" + @@ -14202,6 +14343,7 @@ public void mouseClicked(MouseEvent e) { System.out.println("mouseClicked: " + e); + System.exit(0); } public void mousePressed(MouseEvent e) @@ -14240,10 +14382,12 @@ return; } - boolean capsLocked = Toolkit.getDefaultToolkit().getLockingKeyState(KeyEvent.VK_CAPS_LOCK); + //boolean capsLocked = Toolkit.getDefaultToolkit().getLockingKeyState(KeyEvent.VK_CAPS_LOCK); + + boolean vr = capsLocked && !lightMode; // TIMER - if (ZOOMBOXMODE && !wheeltimer.isRunning() && e.getModifiersEx() == 0 && !capsLocked) // VR + if (ZOOMBOXMODE && !wheeltimer.isRunning() && e.getModifiersEx() == 0 && !vr) // VR { keepboxmode = BOXMODE; keepsupport = SUPPORT; @@ -14284,7 +14428,7 @@ //} SetMouseMode(e.getModifiers(), WHEEL | e.getModifiersEx()); - drag(anchorX, anchorY + e.getUnitsToScroll()*8, 0, 0); + drag(anchorX, anchorY + e.getUnitsToScroll()*8, e.getModifiers(), e.getModifiersEx()); anchorX = ax; anchorY = ay; prevX = px; @@ -14379,8 +14523,9 @@ // fev 2014??? if ((TRACK || SHADOWTRACK) && trackedobject != null) // && DrawMode() == SHADOW) // && !lightMode) object.GetWindow().ScreenFit(trackedobject, SHADOWTRACK && !TRACK); - pingthread.StepToTarget(true); // true); + pingthread.StepToTarget(); // true); } + // if (!LIVE) super.repaint(); } @@ -14475,8 +14620,8 @@ //if (drawing) //return; - if ((e.getModifiersEx() & CTRL) != 0 - || (e.getModifiersEx() & COMMAND) != 0) // || IsFrozen()) + if ((e.getModifiersEx() & CTRL) != 0 || + (e.getModifiersEx() & COMMAND) != 0) // || IsFrozen()) { //System.out.println("mouseDragged: " + e); clickEnd(e.getX(), e.getY(), e.getModifiersEx()); @@ -14500,9 +14645,17 @@ return targetLookAt; } + javax.vecmath.Point3d eye = new javax.vecmath.Point3d(); + javax.vecmath.Point3d eye2 = new javax.vecmath.Point3d(); + javax.vecmath.Vector3d dir = new javax.vecmath.Vector3d(); + + class PingThread extends Thread { boolean jump; + boolean live; + + boolean mute = false; // void JumpToTarget() // { @@ -14518,6 +14671,95 @@ // only one thread!? synchronized void StepToTarget(boolean jump) { + RigidBody.pos.x = 0; + RigidBody.pos.y = 0; + RigidBody.pos.z = 0; + if (RigidBody.justclicked) + { +// RigidBody.pos.x = (float)manipCamera.lookAt.x; +// RigidBody.pos.y = (float)manipCamera.lookAt.y; +// RigidBody.pos.z = (float)manipCamera.lookAt.z; + // System.err.println("selected point = " + Trunk(selectedpoint.toParent[3][0]) + " " + Trunk(selectedpoint.toParent[3][1]) + " " + Trunk(selectedpoint.toParent[3][2])); + CreateSelectedPoint(); + + RigidBody.pos.x = (float)selectedpoint.toParent[3][0]; + RigidBody.pos.y = (float)selectedpoint.toParent[3][1]; + RigidBody.pos.z = (float)selectedpoint.toParent[3][2]; + + RigidBody.wind.set(RigidBody.pos); + RigidBody.wind.x -= (float)manipCamera.location.x; + RigidBody.wind.y -= (float)manipCamera.location.y; + RigidBody.wind.z -= (float)manipCamera.location.z; + RigidBody.wind.normalize(); + } + + if (mute) + return; + + if (capsLocked && manipCamera.viewCode == 0) + { + eye.x = manipCamera.location.x; + eye.y = manipCamera.location.y + 0.25; + eye.z = manipCamera.location.z; + + dir.y = -1; + + Ray ray = new Ray(eye, dir); + + IntersectResult res = new IntersectResult(); + res.t = Double.POSITIVE_INFINITY; + + tmp.set(targetLookAt); + tmp.sub(manipCamera.location); + + double dist = tmp.length(); + + tmp.normalize(); + + eye2.x = manipCamera.location.x + tmp.x * 0.25; + eye2.y = manipCamera.location.y + 0.25; + eye2.z = manipCamera.location.z + tmp.z * 0.25; + + Ray ray2 = new Ray(eye2, dir); + + IntersectResult res2 = new IntersectResult(); + res2.t = Double.POSITIVE_INFINITY; + + if (object.intersect(ray, res) && object.intersect(ray2, res2) && Math.abs(res.t - res2.t) < 0.25) + { + //tmp.set(manipCamera.location); + + manipCamera.location.x = ray.eyePoint.x + ray.viewDirection.x * res.t; + manipCamera.location.y = ray.eyePoint.y + ray.viewDirection.y * res.t + 0.5; + manipCamera.location.z = ray.eyePoint.z + ray.viewDirection.z * res.t; + + //tmp.sub(manipCamera.location); + + targetLookAt.x = ray2.eyePoint.x + ray2.viewDirection.x * res2.t; + targetLookAt.y = ray2.eyePoint.y + ray2.viewDirection.y * res2.t + 0.5; + targetLookAt.z = ray2.eyePoint.z + ray2.viewDirection.z * res2.t; + + targetLookAt.sub(manipCamera.location); + targetLookAt.normalize(); + targetLookAt.mul(dist); + targetLookAt.add(manipCamera.location); + + //if (tmp.dot(tmp) > 0.000001) + // System.out.println("INTERSECTION " + manipCamera.location); + + manipCamera.lookAt.set(targetLookAt); + + tmp.x = res.n.x; + tmp.y = res.n.y; + tmp.z = res.n.z; + tmp.x += res2.n.x; + tmp.y += res2.n.y; + tmp.z += res2.n.z; + tmp.normalize(); + manipCamera.UP.set(tmp); + } + } + tmp.set(targetLookAt); tmp.sub(manipCamera.lookAt); // june 2014 @@ -14555,7 +14797,7 @@ if (tmp.dot(tmp) > 1) // may 2014. far away: jump to target { - jump = true; // step = 1; + // sep 2019 jump = true; // step = 1; } if (OEILONCE && OEIL) @@ -14590,7 +14832,10 @@ if (tmp.dot(tmp) < 0.00001) { zoomonce = false; + live = false; } + else + live = true; tmp.mul(step > step2 ? step : step2); } @@ -14617,7 +14862,7 @@ { if (LOOKAT) manipCamera.lookAt.add(tmp); - if (OEIL) + if (OEIL && !capsLocked) manipCamera.location.add(tmp); { @@ -14632,7 +14877,10 @@ lightCamera.computeTransform(); } } - manipCamera.computeTransform(); + if (tmp.x != 0 || tmp.y != 0 || tmp.z != 0) + { + manipCamera.computeTransform(); + } } // ?????? mouseDown = true; //System.out.println("---------------- ---------- Paint " + tmp.length2()); @@ -14725,11 +14973,32 @@ } } } + PingThread pingthread = new PingThread(); - int delta = 5; - int speed = 5; + int delta = 1; + int speed = 1; + int walk = 8; boolean autorepeat = false; + void Walk() + { + manipCamera.BackForth(0, walk, 1000); + + targetLookAt.set(manipCamera.lookAt); + } + + void ViewAngle(float dy) + { + double factor = Math.exp(-dy/300.0); // (1 + dy/100); + + if (manipCamera.shaper_fovy * factor > 1 && + manipCamera.shaper_fovy * factor < 150) + { + manipCamera.shaper_fovy *= factor; + //System.out.println("fovy = " + shaper_fovy); + } + } + void GoDown(int mod) { MODIFIERS |= COMMAND; @@ -14737,21 +15006,30 @@ /**/ if((mod&SHIFT) == SHIFT) { +// if (isVR) +// manipCamera.RotateInterest(0, speed); +// else if (isVR) - manipCamera.RotateInterest(0, -speed); + ViewAngle(-speed*delta); + else + manipCamera.Translate(0, -speed*delta, getWidth()); + } + else + { + if (isVR) + manipCamera.BackForth(0, -speed*delta, isVR?1000:0); // getWidth()); else manipCamera.RotatePosition(0, -speed); } - else - manipCamera.BackForth(0, -speed*delta, isVR?1000:0); // getWidth()); + /**/ - if ((mod & SHIFT) == SHIFT) - { - mouseMode = mouseMode; // VR?? - } else - { - mouseMode |= BACKFORTH; - } +// if ((mod & SHIFT) == SHIFT) +// { +// mouseMode = mouseMode; // VR?? +// } else +// { +// mouseMode |= BACKFORTH; +// } targetLookAt.set(manipCamera.lookAt); @@ -14761,27 +15039,38 @@ void GoUp(int mod) { + RigidBody.justclicked = true; + MODIFIERS |= COMMAND; /**/ boolean isVR = (mouseMode&VR)!=0; if((mod&SHIFT) == SHIFT) { +// if (isVR) +// manipCamera.RotateInterest(0, -speed); +// else if (isVR) - manipCamera.RotateInterest(0, speed); + ViewAngle(speed*delta); + else + manipCamera.Translate(0, speed*delta, getWidth()); + } + else + { + if (isVR) + manipCamera.BackForth(0, speed*delta, isVR?1000:0); // getWidth()); else manipCamera.RotatePosition(0, speed); } - else - manipCamera.BackForth(0, speed*delta, isVR?1000:0); // getWidth()); + /**/ - if ((mod & SHIFT) == SHIFT) - { - mouseMode = mouseMode; - } else - { - mouseMode |= BACKFORTH; - } +// if ((mod & SHIFT) == SHIFT) +// { +// mouseMode = mouseMode; +// } else +// { +// mouseMode |= BACKFORTH; +// } targetLookAt.set(manipCamera.lookAt); @@ -14794,23 +15083,27 @@ MODIFIERS |= COMMAND; /**/ if((mod&SHIFT) == SHIFT) - manipCamera.Translate(speed*delta, 0, getWidth()); + manipCamera.Translate(speed, 0, getWidth()); else { if ((mouseMode&VR)!=0) - manipCamera.RotateInterest(-speed, 0); + manipCamera.RotateInterest(-speed*manipCamera.shaper_fovy/90, 0); else - manipCamera.RotatePosition(speed, 0); + manipCamera.RotatePosition(speed*manipCamera.shaper_fovy/90, 0); } + /**/ - if ((mod & SHIFT) == SHIFT) - { - mouseMode = mouseMode; - } else - { - mouseMode |= ROTATE; - } // TRANSLATE; +// if ((mod & SHIFT) == SHIFT) +// { +// mouseMode = mouseMode; +// } else +// { +// mouseMode |= ROTATE; +// } // TRANSLATE; + //System.err.println("lookAt = " + manipCamera.lookAt); + //System.err.println("location = " + manipCamera.location); + targetLookAt.set(manipCamera.lookAt); prevX = X = anchorX - 10; // (int)(10*renderCamera.Distance()); @@ -14822,23 +15115,23 @@ MODIFIERS |= COMMAND; /**/ if((mod&SHIFT) == SHIFT) - manipCamera.Translate(-speed*delta, 0, getWidth()); + manipCamera.Translate(-speed, 0, getWidth()); else { if ((mouseMode&VR)!=0) - manipCamera.RotateInterest(speed, 0); + manipCamera.RotateInterest(speed*manipCamera.shaper_fovy/90, 0); else - manipCamera.RotatePosition(-speed, 0); + manipCamera.RotatePosition(-speed*manipCamera.shaper_fovy/90, 0); } /**/ - if ((mod & SHIFT) == SHIFT) - { - mouseMode = mouseMode; - } else - { - mouseMode |= ROTATE; - } // TRANSLATE; +// if ((mod & SHIFT) == SHIFT) +// { +// mouseMode = mouseMode; +// } else +// { +// mouseMode |= ROTATE; +// } // TRANSLATE; targetLookAt.set(manipCamera.lookAt); @@ -14975,6 +15268,11 @@ if ((mouseMode & ZOOM) != 0) { //if ((mouseMode & BACKFORTH) != 0) + if ((modifiersex & SHIFT) == SHIFT) + { + ViewAngle(dy); + } + else if ((mouseMode & VR) != 0) manipCamera.BackForth(dx, dy, getWidth()); else @@ -15045,6 +15343,9 @@ public void mouseMoved(MouseEvent e) { +//object.editWindow.frame. + setCursor(Cursor.getDefaultCursor()); + //System.out.println("mouseMoved: " + e); if (isRenderer) return; @@ -15073,6 +15374,12 @@ public void mouseReleased(MouseEvent e) { + if (isRenderer && !movingcamera) + { + RigidBody.justclicked = true; + System.out.println("justclicked: " + e); + } + Globals.MOUSEDRAGGED = false; movingcamera = false; @@ -15229,8 +15536,10 @@ mouseMode |= ZOOM; } - boolean capsLocked = Toolkit.getDefaultToolkit().getLockingKeyState(KeyEvent.VK_CAPS_LOCK); - if (capsLocked) // || (modifiers & META) == META) + //boolean capsLocked = Toolkit.getDefaultToolkit().getLockingKeyState(KeyEvent.VK_CAPS_LOCK); + boolean vr = capsLocked && !lightMode; + + if (vr) // || (modifiers & META) == META) { mouseMode |= VR; // BACKFORTH; } @@ -15242,7 +15551,8 @@ { mouseMode |= SELECT; } - if ((modifiersex & SHIFT) == SHIFT || forcetranslate || (modifiers & MouseEvent.BUTTON3_MASK) != 0) + if (//(modifiersex & SHIFT) == SHIFT || + forcetranslate || (modifiers & MouseEvent.BUTTON3_MASK) != 0) { mouseMode &= ~VR; mouseMode |= TRANSLATE; @@ -15286,8 +15596,18 @@ float SATPOW = 1; // 2; // 0.5f; float BRIPOW = 1; // 0.5f; // 0.5f; +static BufferedImage cursorImg = new BufferedImage(16, 16, BufferedImage.TYPE_INT_ARGB); + +// Create a new blank cursor. +static Cursor blankCursor = Toolkit.getDefaultToolkit().createCustomCursor( + cursorImg, new Point(0, 0), "blank cursor"); + public void keyPressed(int key) { +// Set the blank cursor to the JFrame. +//object.editWindow.frame. + setCursor(blankCursor); + if (key >= '0' && key <= '5') clampbit = (key-'0'); @@ -15446,8 +15766,8 @@ RevertCamera(); repaint(); break; - case 'l': - //case 'L': + //case 'l': + case 'L': if (lightMode) { lightMode = false; @@ -15477,7 +15797,8 @@ break; case 'm': { - PrintMemory(); + //PrintMemory(); + ToggleImageFlip(); break; } case 'M': @@ -15504,9 +15825,9 @@ repaint(); break; case 'O': - Globals.drawMode = OCCLUSION; // WARNING - repaint(); - break; + // Too dangerous. Use menu. Globals.drawMode = OCCLUSION; // WARNING + //repaint(); + //break; case 'o': OCCLUSION_CULLING ^= true; System.out.println("OCCLUSION CULLING = " + OCCLUSION_CULLING); @@ -15598,7 +15919,21 @@ // kompactbit = 6; // break; case ' ': + capsLocked ^= true; + repaint(); + break; + case 'l': lightMode ^= true; + if (lightMode) + { + keepshadow = Globals.RENDERSHADOW; + Globals.RENDERSHADOW = false; + } + else + { + Globals.RENDERSHADOW = keepshadow; + } + Globals.lighttouched = true; manipCamera = renderCamera = lightMode ? lightCamera : eyeCamera; targetLookAt.set(manipCamera.lookAt); @@ -15606,6 +15941,10 @@ break; //case '`' : case ESC: + if (FULLSCREEN) + object.editWindow.ToggleFullScreen(); + break; + case 'p': RENDERPROGRAM += 1; RENDERPROGRAM %= 3; @@ -15644,6 +15983,10 @@ case ENTER: // object.editWindow.ScreenFit(); // Edit(); ToggleLive(); + if (capsLocked) + { + Globals.WALK ^= true; + } break; case DELETE: ClearSelection(); @@ -15680,17 +16023,23 @@ object.GetWindow().refreshContents(true); break; case '{': - manipCamera.shaper_fovy /= 1.1; + double factor = 1.1; + if (manipCamera.shaper_fovy / factor > 0.1) + manipCamera.shaper_fovy /= factor; System.out.println("FOV = " + manipCamera.shaper_fovy); repaint(); break; case '}': - manipCamera.shaper_fovy *= 1.1; + factor = 1.1; + if (manipCamera.shaper_fovy * factor < 150) + manipCamera.shaper_fovy *= factor; System.out.println("FOV = " + manipCamera.shaper_fovy); repaint(); break; case '[': - manipCamera.shaper_fovy /= 1.01; + factor = 1.01; + if (manipCamera.shaper_fovy / factor > 0.1) + manipCamera.shaper_fovy /= factor; if (false) //manipCamera.hAspect == 0) { double x = Math.tan(manipCamera.shaper_fovy * Math.PI / 180 / 2); @@ -15706,7 +16055,9 @@ break; case ']': //manipCamera.shaper_fovy += (180 - manipCamera.shaper_fovy)*0.1; - manipCamera.shaper_fovy *= 1.01; + factor = 1.01; + if (manipCamera.shaper_fovy * factor < 150) + manipCamera.shaper_fovy *= factor; if (false) //manipCamera.hAspect == 0) { double x = Math.tan(manipCamera.shaper_fovy * Math.PI / 180 / 2); @@ -15744,98 +16095,113 @@ } } + boolean keys[] = new boolean[256]; + int speedkey[] = new int[256]; + int modifiers = 0; + public void processKeyEvent(KeyEvent e) { switch (e.getID()) { case KeyEvent.KEY_PRESSED: - if (!autorepeat) - { - //System.out.println("processKeyEvent: " + KeyEvent.getKeyText(e.getKeyCode())); - keyPressed(e.getKeyChar(), e.getModifiersEx()); - } - if (manipCamera == lightCamera) - { - switch (e.getKeyCode()) - { - case DOWN_ARROW: - lightCamera.DECAL /= 2; - repaint(); - break; - case UP_ARROW: - lightCamera.DECAL *= 2; - repaint(); - break; - case LEFT_ARROW: - lightCamera.SCALE /= 2; - repaint(); - break; - case RIGHT_ARROW: - lightCamera.SCALE *= 2; - repaint(); - break; - default: - break; - } - - System.out.println("DECAL = " + lightCamera.DECAL + "; SCALE = " + lightCamera.SCALE); - } else - { - if (true) // !autorepeat) - { - boolean reset = true; - - switch (e.getKeyCode()) - { - case DOWN_ARROW: - GoDown(e.getModifiersEx()); - repaint(); - break; - case UP_ARROW: - GoUp(e.getModifiersEx()); - repaint(); - break; - case LEFT_ARROW: - GoLeft(e.getModifiersEx()); - repaint(); - break; - case RIGHT_ARROW: - GoRight(e.getModifiersEx()); - repaint(); - break; - default: - reset = false; - break; - } - - if (reset) - { - autorepeat = true; - - targetLookAt.set(manipCamera.lookAt); - } - } - } + keys[e.getKeyCode()] = true; + modifiers = e.getModifiersEx(); + keyPressed(e.getKeyChar(), modifiers); + //Globals.theRenderer.keyPressed(e.getKeyChar()); + repaint(); break; - case KeyEvent.KEY_TYPED: - break; +// if (!autorepeat) +// { +// //System.out.println("processKeyEvent: " + KeyEvent.getKeyText(e.getKeyCode())); +// keyPressed(e.getKeyChar(), e.getModifiersEx()); +// } +// if (manipCamera == lightCamera) +// { +// switch (e.getKeyCode()) +// { +// case DOWN_ARROW: +// lightCamera.DECAL /= 2; +// repaint(); +// break; +// case UP_ARROW: +// lightCamera.DECAL *= 2; +// repaint(); +// break; +// case LEFT_ARROW: +// lightCamera.SCALE /= 2; +// repaint(); +// break; +// case RIGHT_ARROW: +// lightCamera.SCALE *= 2; +// repaint(); +// break; +// default: +// break; +// } +// +// System.out.println("DECAL = " + lightCamera.DECAL + "; SCALE = " + lightCamera.SCALE); +// } else +// { +// if (true) // !autorepeat) +// { +// boolean reset = true; +// +// switch (e.getKeyCode()) +// { +// case DOWN_ARROW: +// GoDown(e.getModifiersEx()); +// repaint(); +// break; +// case UP_ARROW: +// GoUp(e.getModifiersEx()); +// repaint(); +// break; +// case LEFT_ARROW: +// GoLeft(e.getModifiersEx()); +// repaint(); +// break; +// case RIGHT_ARROW: +// GoRight(e.getModifiersEx()); +// repaint(); +// break; +// default: +// reset = false; +// break; +// } +// +// if (reset) +// { +// autorepeat = true; +// +// targetLookAt.set(manipCamera.lookAt); +// } +// } +// } +// break; +// case KeyEvent.KEY_TYPED: +// break; case KeyEvent.KEY_RELEASED: - { - switch (e.getKeyCode()) - { - case DOWN_ARROW: - case UP_ARROW: - case LEFT_ARROW: - case RIGHT_ARROW: - MODIFIERS &= ~COMMAND; - autorepeat = false; - break; - default: - break; - } + keys[e.getKeyCode()] = false; + modifiers = e.getModifiersEx(); keyReleased(e.getKeyChar(), e.getModifiersEx()); + repaint(); break; - } +// { +// switch (e.getKeyCode()) +// { +// case DOWN_ARROW: +// case UP_ARROW: +// case LEFT_ARROW: +// case RIGHT_ARROW: +// MODIFIERS &= ~COMMAND; +// autorepeat = false; +// break; +// default: +// break; +// } +// keyReleased(e.getKeyChar(), e.getModifiersEx()); +// break; +// } default: break; } @@ -16411,7 +16777,8 @@ public boolean mouseDrag(Event evt, int x, int y) { - //System.out.println("mouseDrag: " + evt); + System.out.println("mouseDrag: " + evt); + System.exit(0); /* drag = true; //System.out.println("Mouse DRAG"); @@ -16530,6 +16897,7 @@ public boolean mouseUp(Event evt, int x, int y) { System.out.println("mouseUp: " + evt); + System.exit(0); /* locked = false; if (isRenderer) @@ -16800,7 +17168,7 @@ return; } - if (WIREFRAME) + //if (WIREFRAME) gl.glPolygonMode(gl.GL_FRONT_AND_BACK, gl.GL_FILL); gl.glDisable(gl.GL_CULL_FACE); @@ -16900,6 +17268,8 @@ if (WIREFRAME) gl.glPolygonMode(gl.GL_FRONT_AND_BACK, gl.GL_LINE); + else + gl.glPolygonMode(gl.GL_FRONT_AND_BACK, gl.GL_FILL); } private void DrawChecker(GL gl) @@ -17237,7 +17607,7 @@ float depth = depths[y * TEX_SIZE + x]; - if (pointselection && mouseMode == SELECT && depth != 0 && depth != 1) + if (pointselection && (mouseMode & SELECT) == SELECT && depth != 0 && depth != 1) { pointselection = false; @@ -17901,6 +18271,11 @@ static boolean DEBUG_SELECTION = false; boolean OCCLUSION_CULLING = false; //true; public boolean lightMode = false; + + private boolean keepshadow; + + static public boolean capsLocked = false; // VR + static public int indexcount = 0; /*static*/ cColor vertexOcclusion = new cColor(); //private int selection_view = -1; -- Gitblit v1.6.2