Gravity added. Camera offset and height set.
This commit is contained in:
parent
5912e0e07e
commit
8997902c7c
@ -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));
|
Vector vTarget = new Vector(0,(float)Math.sin(SigRenderer.pitch),(float)Math.cos(SigRenderer.pitch));
|
||||||
Matrix matCameraRot = Matrix.MakeRotationY(SigRenderer.yaw);
|
Matrix matCameraRot = Matrix.MakeRotationY(SigRenderer.yaw);
|
||||||
SigRenderer.vLookDir = Matrix.MultiplyVector(matCameraRot,vTarget);
|
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);
|
Matrix matView = Matrix.QuickInverse(matCamera);
|
||||||
|
|
||||||
if (workerThread==null||(!workerThread.isAlive()&&renderNeeded)) {
|
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 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)+
|
Vector cameraRay = Vector.subtract(center,newCamera);
|
||||||
(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));
|
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) {
|
if (Vector.dotProduct(normal,cameraRay)<0&&Vector.dotProduct(cameraRay,SigRenderer.vLookDir)>-0.2f&&distSquared<4096) {
|
||||||
Vector lightDir = Vector.multiply(SigRenderer.vLookDir, -1);
|
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)));
|
//System.out.println(-Vector.dotProduct(normal,Vector.normalize(cameraRay)));
|
||||||
float dp = 0.1f;
|
float dp = 0.1f;
|
||||||
if (t.b!=null) {
|
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)+
|
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-SigRenderer.vCamera.y)*(triTransformed.b.pos.y-SigRenderer.vCamera.y)+
|
(triTransformed.b.pos.y-newCamera.y)*(triTransformed.b.pos.y-newCamera.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;
|
(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 {
|
} else {
|
||||||
dp = Math.max(0.1f,Vector.dotProduct(lightDir,normal));
|
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 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)+
|
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.y-center.y)*(cameraRay2.y-center.y)+
|
||||||
(cameraRay2.z-center.z)*(cameraRay2.z-center.z))*4)));*/
|
(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)+
|
/*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-SigRenderer.vCamera.y)*(triTransformed.b.pos.y-SigRenderer.vCamera.y)+
|
(triTransformed.b.pos.y-newCamera.y)*(triTransformed.b.pos.y-newCamera.y)+
|
||||||
(triTransformed.b.pos.z-SigRenderer.vCamera.z)*(triTransformed.b.pos.z-SigRenderer.vCamera.z))*4)));*/
|
(triTransformed.b.pos.z-newCamera.z)*(triTransformed.b.pos.z-newCamera.z))*4)));*/
|
||||||
|
|
||||||
triViewed.A = Matrix.MultiplyVector(matView,triTransformed.A);
|
triViewed.A = Matrix.MultiplyVector(matView,triTransformed.A);
|
||||||
triViewed.B = Matrix.MultiplyVector(matView,triTransformed.B);
|
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 Matrix matProj = Matrix.MakeProjection(fFov,fAspectRatio,fNear,fFar);
|
||||||
|
|
||||||
public static Vector vCamera = new Vector(31.5f,20f,31.5f);
|
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 Vector vCameraSpeed = new Vector(0,0,0);
|
||||||
public static float vCameraFriction = 0.5f;
|
public static float vCameraFriction = 0.5f;
|
||||||
public static Vector vLookDir = new Vector(0,0,1);
|
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 MOVESPEED = 0.2f;
|
||||||
final static float TURNSPEED = 0.05f;
|
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);
|
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) {
|
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.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;
|
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() {
|
public void runGameLoop() {
|
||||||
friction(vCameraSpeed);
|
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) {
|
if (upHeld) {
|
||||||
pitch+=TURNSPEED;
|
pitch+=TURNSPEED;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user