Experimentation with distance-based camera lighting.
Co-authored-by: sigonasr2 <sigonasr2@gmail.com>
This commit is contained in:
parent
1ce63d60a2
commit
7aaa75d5a5
@ -27,7 +27,6 @@ public class Panel extends JPanel implements Runnable {
|
|||||||
private MemoryImageSource mImageProducer;
|
private MemoryImageSource mImageProducer;
|
||||||
private ColorModel cm;
|
private ColorModel cm;
|
||||||
private Thread thread;
|
private Thread thread;
|
||||||
float fTheta=0f;
|
|
||||||
List<Triangle> accumulatedTris = new ArrayList<Triangle>();
|
List<Triangle> accumulatedTris = new ArrayList<Triangle>();
|
||||||
|
|
||||||
public Panel() {
|
public Panel() {
|
||||||
@ -76,8 +75,6 @@ public class Panel extends JPanel implements Runnable {
|
|||||||
int[] p = pixel; // this avoid crash when resizing
|
int[] p = pixel; // this avoid crash when resizing
|
||||||
//a=h/w
|
//a=h/w
|
||||||
|
|
||||||
fTheta+=0.05f;
|
|
||||||
|
|
||||||
final int h=SigRenderer.SCREEN_HEIGHT;
|
final int h=SigRenderer.SCREEN_HEIGHT;
|
||||||
if(p.length != width * height) return;
|
if(p.length != width * height) return;
|
||||||
for (int x=0;x<width;x++) {
|
for (int x=0;x<width;x++) {
|
||||||
@ -89,14 +86,16 @@ public class Panel extends JPanel implements Runnable {
|
|||||||
|
|
||||||
accumulatedTris.clear();
|
accumulatedTris.clear();
|
||||||
|
|
||||||
Matrix matRotZ = Matrix.MakeRotationZ(fTheta*0.5f),matRotX = Matrix.MakeRotationX(fTheta);
|
//Matrix matRotZ = Matrix.MakeRotationZ(fTheta*0.5f),matRotX = Matrix.MakeRotationX(fTheta);
|
||||||
Matrix matTranslation = Matrix.MakeTranslation(0,0,6);
|
Matrix matRotZ = Matrix.IDENTITY;
|
||||||
|
Matrix matRotX = Matrix.IDENTITY;
|
||||||
|
Matrix matTranslation = Matrix.MakeTranslation(0,0,0);
|
||||||
Matrix matWorld = Matrix.IDENTITY;
|
Matrix matWorld = Matrix.IDENTITY;
|
||||||
matWorld = Matrix.MultiplyMatrix(matRotZ,matRotX);
|
matWorld = Matrix.MultiplyMatrix(matRotZ,matRotX);
|
||||||
matWorld = Matrix.MultiplyMatrix(matWorld,matTranslation);
|
matWorld = Matrix.MultiplyMatrix(matWorld,matTranslation);
|
||||||
|
|
||||||
Vector vUp = new Vector(0,1,0);
|
Vector vUp = new Vector(0,1,0);
|
||||||
Vector vTarget = new Vector(0,0,1);
|
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(SigRenderer.vCamera,SigRenderer.vLookDir);
|
||||||
@ -106,6 +105,8 @@ public class Panel extends JPanel implements Runnable {
|
|||||||
|
|
||||||
for (Triangle t : SigRenderer.cube.triangles) {
|
for (Triangle t : SigRenderer.cube.triangles) {
|
||||||
Triangle triProjected = new Triangle(),triTransformed=new Triangle(),triViewed=new Triangle();
|
Triangle triProjected = new Triangle(),triTransformed=new Triangle(),triViewed=new Triangle();
|
||||||
|
|
||||||
|
//matWorld = Matrix.MakeTranslation(10,0,0);
|
||||||
|
|
||||||
triTransformed.A = Matrix.MultiplyVector(matWorld,t.A);
|
triTransformed.A = Matrix.MultiplyVector(matWorld,t.A);
|
||||||
triTransformed.B = Matrix.MultiplyVector(matWorld,t.B);
|
triTransformed.B = Matrix.MultiplyVector(matWorld,t.B);
|
||||||
@ -125,11 +126,16 @@ public class Panel extends JPanel implements Runnable {
|
|||||||
Vector cameraRay = Vector.subtract(triTransformed.A,SigRenderer.vCamera);
|
Vector cameraRay = Vector.subtract(triTransformed.A,SigRenderer.vCamera);
|
||||||
|
|
||||||
if (Vector.dotProduct(normal,cameraRay)<0) {
|
if (Vector.dotProduct(normal,cameraRay)<0) {
|
||||||
|
/*Vector lightDir = Vector.multiply(SigRenderer.vLookDir, -1);
|
||||||
|
lightDir = Vector.normalize(lightDir);*/
|
||||||
|
|
||||||
Vector lightDir = new Vector(0,0,-1);
|
//System.out.println(-Vector.dotProduct(normal,Vector.normalize(cameraRay)));
|
||||||
lightDir = Vector.normalize(lightDir);
|
//float dp = Math.max(0.1f,Math.min(1,-1/Vector.dotProduct(normal,cameraRay)));
|
||||||
|
Vector center = Vector.divide(Vector.add(triTransformed.A,Vector.add(triTransformed.B,triTransformed.C)),3);
|
||||||
float dp = Math.max(0.1f,Vector.dotProduct(lightDir,normal));
|
Vector cameraRay2 = Vector.subtract(center,SigRenderer.vCamera);
|
||||||
|
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)));
|
||||||
|
|
||||||
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);
|
||||||
|
@ -39,6 +39,8 @@ public class SigRenderer implements KeyListener,MouseListener,MouseMotionListene
|
|||||||
public static Vector vCamera = new Vector();
|
public static Vector vCamera = new Vector();
|
||||||
public static Vector vLookDir = new Vector(0,0,1);
|
public static Vector vLookDir = new Vector(0,0,1);
|
||||||
public static float yaw = 0;
|
public static float yaw = 0;
|
||||||
|
public static float pitch = 0;
|
||||||
|
public static float roll = 0;
|
||||||
|
|
||||||
final float MOVESPEED = 0.03f;
|
final float MOVESPEED = 0.03f;
|
||||||
final float TURNSPEED = 0.03f;
|
final float TURNSPEED = 0.03f;
|
||||||
@ -52,16 +54,16 @@ public class SigRenderer implements KeyListener,MouseListener,MouseMotionListene
|
|||||||
|
|
||||||
public void runGameLoop() {
|
public void runGameLoop() {
|
||||||
if (upHeld) {
|
if (upHeld) {
|
||||||
vCamera.y+=MOVESPEED;
|
pitch+=MOVESPEED;
|
||||||
}
|
}
|
||||||
if (downHeld) {
|
if (downHeld) {
|
||||||
vCamera.y-=MOVESPEED;
|
pitch-=MOVESPEED;
|
||||||
}
|
}
|
||||||
if (rightHeld) {
|
if (rightHeld) {
|
||||||
vCamera.x-=MOVESPEED;
|
roll-=MOVESPEED;
|
||||||
}
|
}
|
||||||
if (leftHeld) {
|
if (leftHeld) {
|
||||||
vCamera.x+=MOVESPEED;
|
roll+=MOVESPEED;
|
||||||
}
|
}
|
||||||
if (wHeld||sHeld) {
|
if (wHeld||sHeld) {
|
||||||
Vector forward = Vector.multiply(vLookDir,MOVESPEED);
|
Vector forward = Vector.multiply(vLookDir,MOVESPEED);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user