Gravity added. Camera offset and height set.

origin
Joshua Sigona 3 years ago
parent 5912e0e07e
commit 8997902c7c
  1. 28
      src/sig/Panel.java
  2. 16
      src/sig/SigRenderer.java

@ -120,9 +120,9 @@ public class Panel extends JPanel implements Runnable {
Vector vTarget = new Vector(0,(float)Math.sin(SigRenderer.pitch),(float)Math.cos(SigRenderer.pitch));
Matrix matCameraRot = Matrix.MakeRotationY(SigRenderer.yaw);
SigRenderer.vLookDir = Matrix.MultiplyVector(matCameraRot,vTarget);
vTarget = Vector.add(SigRenderer.vCamera,SigRenderer.vLookDir);
vTarget = Vector.add(Vector.add(SigRenderer.vCamera,SigRenderer.vCameraOffset),SigRenderer.vLookDir);
Matrix matCamera = Matrix.PointAt(SigRenderer.vCamera, vTarget, vUp);
Matrix matCamera = Matrix.PointAt(Vector.add(SigRenderer.vCamera,SigRenderer.vCameraOffset), vTarget, vUp);
Matrix matView = Matrix.QuickInverse(matCamera);
if (workerThread==null||(!workerThread.isAlive()&&renderNeeded)) {
@ -407,11 +407,13 @@ public class Panel extends JPanel implements Runnable {
Vector center = Vector.divide(Vector.add(triTransformed.A,Vector.add(triTransformed.B,triTransformed.C)),3);
Vector cameraRay = Vector.subtract(center,SigRenderer.vCamera);
Vector newCamera = Vector.add(SigRenderer.vCamera,SigRenderer.vCameraOffset);
float distSquared = ((triTransformed.b.pos.x-SigRenderer.vCamera.x)*(triTransformed.b.pos.x-SigRenderer.vCamera.x)+
(triTransformed.b.pos.y-SigRenderer.vCamera.y)*(triTransformed.b.pos.y-SigRenderer.vCamera.y)+
(triTransformed.b.pos.z-SigRenderer.vCamera.z)*(triTransformed.b.pos.z-SigRenderer.vCamera.z));
Vector cameraRay = Vector.subtract(center,newCamera);
float distSquared = ((triTransformed.b.pos.x-newCamera.x)*(triTransformed.b.pos.x-newCamera.x)+
(triTransformed.b.pos.y-newCamera.y)*(triTransformed.b.pos.y-newCamera.y)+
(triTransformed.b.pos.z-newCamera.z)*(triTransformed.b.pos.z-newCamera.z));
if (Vector.dotProduct(normal,cameraRay)<0&&Vector.dotProduct(cameraRay,SigRenderer.vLookDir)>-0.2f&&distSquared<4096) {
Vector lightDir = Vector.multiply(SigRenderer.vLookDir, -1);
@ -420,20 +422,20 @@ public class Panel extends JPanel implements Runnable {
//System.out.println(-Vector.dotProduct(normal,Vector.normalize(cameraRay)));
float dp = 0.1f;
if (t.b!=null) {
dp = Math.max(0.1f,Math.min(1,(1f/((triTransformed.b.pos.x-SigRenderer.vCamera.x)*(triTransformed.b.pos.x-SigRenderer.vCamera.x)+
(triTransformed.b.pos.y-SigRenderer.vCamera.y)*(triTransformed.b.pos.y-SigRenderer.vCamera.y)+
(triTransformed.b.pos.z-SigRenderer.vCamera.z)*(triTransformed.b.pos.z-SigRenderer.vCamera.z))*64)))*0.5f+Math.max(0.1f,Math.min(1,1-Vector.dotProduct(normal,SigRenderer.vLookDir)))*0.5f;
dp = Math.max(0.1f,Math.min(1,(1f/((triTransformed.b.pos.x-newCamera.x)*(triTransformed.b.pos.x-newCamera.x)+
(triTransformed.b.pos.y-newCamera.y)*(triTransformed.b.pos.y-newCamera.y)+
(triTransformed.b.pos.z-newCamera.z)*(triTransformed.b.pos.z-newCamera.z))*64)))*0.5f+Math.max(0.1f,Math.min(1,1-Vector.dotProduct(normal,SigRenderer.vLookDir)))*0.5f;
} else {
dp = Math.max(0.1f,Vector.dotProduct(lightDir,normal));
}
/*Vector center = Vector.divide(Vector.add(triTransformed.A,Vector.add(triTransformed.B,triTransformed.C)),3);
Vector cameraRay2 = Vector.subtract(center,SigRenderer.vCamera);
Vector cameraRay2 = Vector.subtract(center,newCamera);
float dp = Math.max(0.1f,Math.min(1,(1f/((cameraRay2.x-center.x)*(cameraRay2.x-center.x)+
(cameraRay2.y-center.y)*(cameraRay2.y-center.y)+
(cameraRay2.z-center.z)*(cameraRay2.z-center.z))*4)));*/
/*float dp = Math.max(0.1f,Math.min(1,(1f/((triTransformed.b.pos.x-SigRenderer.vCamera.x)*(triTransformed.b.pos.x-SigRenderer.vCamera.x)+
(triTransformed.b.pos.y-SigRenderer.vCamera.y)*(triTransformed.b.pos.y-SigRenderer.vCamera.y)+
(triTransformed.b.pos.z-SigRenderer.vCamera.z)*(triTransformed.b.pos.z-SigRenderer.vCamera.z))*4)));*/
/*float dp = Math.max(0.1f,Math.min(1,(1f/((triTransformed.b.pos.x-newCamera.x)*(triTransformed.b.pos.x-newCamera.x)+
(triTransformed.b.pos.y-newCamera.y)*(triTransformed.b.pos.y-newCamera.y)+
(triTransformed.b.pos.z-newCamera.z)*(triTransformed.b.pos.z-newCamera.z))*4)));*/
triViewed.A = Matrix.MultiplyVector(matView,triTransformed.A);
triViewed.B = Matrix.MultiplyVector(matView,triTransformed.B);

@ -42,6 +42,7 @@ public class SigRenderer implements KeyListener,MouseListener,MouseMotionListene
public static Matrix matProj = Matrix.MakeProjection(fFov,fAspectRatio,fNear,fFar);
public static Vector vCamera = new Vector(31.5f,20f,31.5f);
public static Vector vCameraOffset = new Vector(0,1.5f,0);
public static Vector vCameraSpeed = new Vector(0,0,0);
public static float vCameraFriction = 0.5f;
public static Vector vLookDir = new Vector(0,0,1);
@ -51,6 +52,8 @@ public class SigRenderer implements KeyListener,MouseListener,MouseMotionListene
final static float MOVESPEED = 0.2f;
final static float TURNSPEED = 0.05f;
public static float gravity = 0.01f;
public static float fallSpd = 0;
final public static Vector maxCameraSpeed = new Vector(MOVESPEED,1f,MOVESPEED);
@ -93,12 +96,23 @@ public class SigRenderer implements KeyListener,MouseListener,MouseMotionListene
void friction(Vector v) {
vCameraSpeed.x=Math.signum(vCameraSpeed.x)>0?(vCameraSpeed.x-vCameraFriction)<0?0:vCameraSpeed.x-vCameraFriction:(vCameraSpeed.x+vCameraFriction)>0?0:vCameraSpeed.x+vCameraFriction;
vCameraSpeed.y=Math.signum(vCameraSpeed.y)>0?(vCameraSpeed.y-vCameraFriction)<0?0:vCameraSpeed.y-vCameraFriction:(vCameraSpeed.y+vCameraFriction)>0?0:vCameraSpeed.y+vCameraFriction;
//vCameraSpeed.y=Math.signum(vCameraSpeed.y)>0?(vCameraSpeed.y-vCameraFriction)<0?0:vCameraSpeed.y-vCameraFriction:(vCameraSpeed.y+vCameraFriction)>0?0:vCameraSpeed.y+vCameraFriction;
vCameraSpeed.z=Math.signum(vCameraSpeed.z)>0?(vCameraSpeed.z-vCameraFriction)<0?0:vCameraSpeed.z-vCameraFriction:(vCameraSpeed.z+vCameraFriction)>0?0:vCameraSpeed.z+vCameraFriction;
}
public void runGameLoop() {
friction(vCameraSpeed);
if (!blockGrid.containsKey((float)Math.floor(vCamera.x)+"_"+(float)Math.floor(vCamera.y-gravity)+"_"+(float)Math.floor(vCamera.z))) {
fallSpd=Math.max(-maxCameraSpeed.y,fallSpd-gravity);
} else
if (fallSpd<0) {
vCamera.y=(float)Math.ceil(vCamera.y);
fallSpd=0;
}
if (fallSpd<0) {
vCamera.y+=fallSpd;
}
if (upHeld) {
pitch+=TURNSPEED;

Loading…
Cancel
Save