diff --git a/.idea/compiler.xml b/.idea/compiler.xml
new file mode 100644
index 0000000..a1757ae
--- /dev/null
+++ b/.idea/compiler.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/classes/artifacts/Assignment3_jar/jinput-dx8.dll b/classes/artifacts/Assignment3_jar/jinput-dx8.dll
deleted file mode 100644
index 6d27ad5..0000000
Binary files a/classes/artifacts/Assignment3_jar/jinput-dx8.dll and /dev/null differ
diff --git a/classes/artifacts/Assignment3_jar/jinput-dx8_64.dll b/classes/artifacts/Assignment3_jar/jinput-dx8_64.dll
deleted file mode 100644
index 6730589..0000000
Binary files a/classes/artifacts/Assignment3_jar/jinput-dx8_64.dll and /dev/null differ
diff --git a/classes/artifacts/Assignment3_jar/jinput-raw.dll b/classes/artifacts/Assignment3_jar/jinput-raw.dll
deleted file mode 100644
index ce1d162..0000000
Binary files a/classes/artifacts/Assignment3_jar/jinput-raw.dll and /dev/null differ
diff --git a/classes/artifacts/Assignment3_jar/jinput-raw_64.dll b/classes/artifacts/Assignment3_jar/jinput-raw_64.dll
deleted file mode 100644
index 3d2b3ad..0000000
Binary files a/classes/artifacts/Assignment3_jar/jinput-raw_64.dll and /dev/null differ
diff --git a/classes/artifacts/Assignment3_jar/libjinput-osx.dylib b/classes/artifacts/Assignment3_jar/libjinput-osx.dylib
deleted file mode 100644
index 59a3eab..0000000
Binary files a/classes/artifacts/Assignment3_jar/libjinput-osx.dylib and /dev/null differ
diff --git a/classes/artifacts/Assignment3_jar/liblwjgl.dylib b/classes/artifacts/Assignment3_jar/liblwjgl.dylib
deleted file mode 100644
index a6083b9..0000000
Binary files a/classes/artifacts/Assignment3_jar/liblwjgl.dylib and /dev/null differ
diff --git a/classes/artifacts/Assignment3_jar/lwjgl.dll b/classes/artifacts/Assignment3_jar/lwjgl.dll
deleted file mode 100644
index e6c97d9..0000000
Binary files a/classes/artifacts/Assignment3_jar/lwjgl.dll and /dev/null differ
diff --git a/classes/artifacts/Assignment3_jar/lwjgl64.dll b/classes/artifacts/Assignment3_jar/lwjgl64.dll
deleted file mode 100644
index 2c8b93e..0000000
Binary files a/classes/artifacts/Assignment3_jar/lwjgl64.dll and /dev/null differ
diff --git a/classes/artifacts/Assignment3_jar/lwjglx-debug-1.0.0.jar b/classes/artifacts/Assignment3_jar/lwjglx-debug-1.0.0.jar
deleted file mode 100644
index 86b6082..0000000
Binary files a/classes/artifacts/Assignment3_jar/lwjglx-debug-1.0.0.jar and /dev/null differ
diff --git a/classes/artifacts/Assignment3_jar/openal.dylib b/classes/artifacts/Assignment3_jar/openal.dylib
deleted file mode 100644
index 3c6d0f7..0000000
Binary files a/classes/artifacts/Assignment3_jar/openal.dylib and /dev/null differ
diff --git a/classes/artifacts/Assignment3_jar/res/awesomeface.png b/classes/artifacts/Assignment3_jar/res/awesomeface.png
deleted file mode 100644
index a092947..0000000
Binary files a/classes/artifacts/Assignment3_jar/res/awesomeface.png and /dev/null differ
diff --git a/classes/artifacts/Assignment3_jar/res/default_cobble.png b/classes/artifacts/Assignment3_jar/res/default_cobble.png
deleted file mode 100644
index 239bdd2..0000000
Binary files a/classes/artifacts/Assignment3_jar/res/default_cobble.png and /dev/null differ
diff --git a/classes/artifacts/Assignment3_jar/res/default_dirt.png b/classes/artifacts/Assignment3_jar/res/default_dirt.png
deleted file mode 100644
index 07a991a..0000000
Binary files a/classes/artifacts/Assignment3_jar/res/default_dirt.png and /dev/null differ
diff --git a/classes/artifacts/Assignment3_jar/res/default_lava.png b/classes/artifacts/Assignment3_jar/res/default_lava.png
deleted file mode 100644
index bbf92fd..0000000
Binary files a/classes/artifacts/Assignment3_jar/res/default_lava.png and /dev/null differ
diff --git a/classes/artifacts/Assignment3_jar/res/default_stone.png b/classes/artifacts/Assignment3_jar/res/default_stone.png
deleted file mode 100644
index 1d65a8b..0000000
Binary files a/classes/artifacts/Assignment3_jar/res/default_stone.png and /dev/null differ
diff --git a/classes/artifacts/Assignment3_jar/res/earthspace.png b/classes/artifacts/Assignment3_jar/res/earthspace.png
deleted file mode 100644
index d074572..0000000
Binary files a/classes/artifacts/Assignment3_jar/res/earthspace.png and /dev/null differ
diff --git a/classes/artifacts/Assignment3_jar/res/farming_wheat_8.png b/classes/artifacts/Assignment3_jar/res/farming_wheat_8.png
deleted file mode 100644
index 723c023..0000000
Binary files a/classes/artifacts/Assignment3_jar/res/farming_wheat_8.png and /dev/null differ
diff --git a/classes/artifacts/Assignment3_jar/res/tnt_side.png b/classes/artifacts/Assignment3_jar/res/tnt_side.png
deleted file mode 100644
index 9ea3705..0000000
Binary files a/classes/artifacts/Assignment3_jar/res/tnt_side.png and /dev/null differ
diff --git a/classes/artifacts/Assignment3_jar/res/wool_pink.png b/classes/artifacts/Assignment3_jar/res/wool_pink.png
deleted file mode 100644
index fc1a0e5..0000000
Binary files a/classes/artifacts/Assignment3_jar/res/wool_pink.png and /dev/null differ
diff --git a/classes/artifacts/Assignment3_jar/run.cap b/classes/artifacts/Assignment3_jar/run.cap
deleted file mode 100644
index bcabae9..0000000
--- a/classes/artifacts/Assignment3_jar/run.cap
+++ /dev/null
@@ -1,27 +0,0 @@
-{
- "rdocCaptureSettings": 1,
- "settings": {
- "autoStart": false,
- "commandLine": "-jar Assignment3.jar",
- "environment": [
- ],
- "executable": "/Library/Java/JavaVirtualMachines/jdk1.8.0_271.jdk/Contents/Home/bin/java",
- "inject": false,
- "numQueuedFrames": 0,
- "options": {
- "allowFullscreen": true,
- "allowVSync": true,
- "apiValidation": false,
- "captureAllCmdLists": false,
- "captureCallstacks": false,
- "captureCallstacksOnlyDraws": false,
- "debugOutputMute": true,
- "delayForDebugger": 0,
- "hookIntoChildren": false,
- "refAllResources": false,
- "verifyBufferAccess": false
- },
- "queuedFrameCap": 0,
- "workingDir": "/Users/yuyangwang/Desktop/Programs_In_BDIC/Stage 3 Semester 1/Computer Graphic/Computer_Graphic_Assignemnt_3/classes/artifacts/Assignment3_jar"
- }
-}
diff --git a/classes/artifacts/Assignment3_jar/Assignment3.jar b/classes/artifacts/Project1_jar/Project1.jar
similarity index 96%
rename from classes/artifacts/Assignment3_jar/Assignment3.jar
rename to classes/artifacts/Project1_jar/Project1.jar
index 1c4881d..962fe24 100644
Binary files a/classes/artifacts/Assignment3_jar/Assignment3.jar and b/classes/artifacts/Project1_jar/Project1.jar differ
diff --git a/src/Scene/Objects/NPC5.java b/src/Scene/Objects/NPC5.java
new file mode 100644
index 0000000..e73258b
--- /dev/null
+++ b/src/Scene/Objects/NPC5.java
@@ -0,0 +1,711 @@
+package Scene.Objects;
+
+import Scene.base.SceneObject;
+import base.GraphicsObjects.Point4f;
+import base.GraphicsObjects.Utils;
+import base.GraphicsObjects.Vector4f;
+import base.objects3D.DisplayListCylinder;
+import base.objects3D.DisplayListOval;
+import base.objects3D.DisplayListTexSphere;
+import main.Engine;
+import org.lwjgl.opengl.GL11;
+import org.newdawn.slick.Color;
+import org.newdawn.slick.opengl.Texture;
+
+import java.util.HashMap;
+import java.util.Random;
+
+import static org.lwjgl.opengl.GL11.GL_NEAREST;
+import static org.lwjgl.opengl.GL11.GL_TEXTURE_MIN_FILTER;
+
+/**
+ * @Author: WangYuyang
+ * @Date: 2021/11/6-19:33
+ * @Project: Assignment3
+ * @Package: Scene.Objects
+ * @Description:
+ **/
+public class NPC4 extends SceneObject {
+ public static int angle_target = 0;
+ public static int angle = 0;
+ // basic colours
+ static float black[] = {0.0f, 0.0f, 0.0f, 1.0f};
+ static float white[] = {1.0f, 1.0f, 1.0f, 1.0f};
+ static float grey[] = {0.5f, 0.5f, 0.5f, 1.0f};
+ static float spot[] = {0.1f, 0.1f, 0.1f, 0.5f};
+ // primary colours
+ static float red[] = {1.0f, 0.0f, 0.0f, 1.0f};
+ static float green[] = {0.0f, 1.0f, 0.0f, 1.0f};
+ static float blue[] = {0.0f, 0.0f, 1.0f, 1.0f};
+ // secondary colours
+ static float yellow[] = {1.0f, 1.0f, 0.0f, 1.0f};
+ static float magenta[] = {1.0f, 0.0f, 1.0f, 1.0f};
+ static float cyan[] = {0.0f, 1.0f, 1.0f, 1.0f};
+ // other colours
+ static float orange[] = {1.0f, 0.5f, 0.0f, 1.0f, 1.0f};
+ static float brown[] = {0.5f, 0.25f, 0.0f, 1.0f, 1.0f};
+ static float dkgreen[] = {0.0f, 0.5f, 0.0f, 1.0f, 1.0f};
+ static float pink[] = {1.0f, 0.6f, 0.6f, 1.0f, 1.0f};
+ DisplayListTexSphere s1 = new DisplayListTexSphere(0.5f, 32, 32, getTextures().get("warped_door_bottom"));
+ DisplayListTexSphere s2 = new DisplayListTexSphere(0.5f, 32, 32, getTextures().get("warped_door_bottom"));
+ DisplayListTexSphere s3 = new DisplayListTexSphere(0.25f, 32, 32, getTextures().get("default_stone"));
+ DisplayListTexSphere s4 = new DisplayListTexSphere(0.2f, 32, 32, getTextures().get("default_stone"));
+ DisplayListTexSphere s5 = new DisplayListTexSphere(0.2f, 32, 32, getTextures().get("default_stone"));
+ DisplayListTexSphere s6 = new DisplayListTexSphere(0.25f, 32, 32, getTextures().get("default_stone"));
+ DisplayListTexSphere s7 = new DisplayListTexSphere(0.2f, 32, 32, getTextures().get("default_stone"));
+ DisplayListTexSphere s8 = new DisplayListTexSphere(0.2f, 32, 32, getTextures().get("default_stone"));
+ DisplayListTexSphere s9 = new DisplayListTexSphere(0.25f, 32, 32, getTextures().get("default_cobble"));
+ DisplayListTexSphere s10 = new DisplayListTexSphere(0.25f, 32, 32, getTextures().get("default_cobble"));
+ DisplayListTexSphere s11 = new DisplayListTexSphere(0.3f, 32, 32, getTextures().get("default_cobble"));
+ DisplayListTexSphere s12 = new DisplayListTexSphere(0.25f, 32, 32, getTextures().get("default_cobble"));
+ DisplayListTexSphere s13 = new DisplayListTexSphere(0.25f, 32, 32, getTextures().get("default_cobble"));
+ DisplayListTexSphere s14 = new DisplayListTexSphere(0.3f, 32, 32, getTextures().get("default_cobble"));
+ DisplayListTexSphere s15 = new DisplayListTexSphere(0.5f, 32, 32, getTextures().get("awesomeface"));
+ DisplayListCylinder c1 = new DisplayListCylinder(0.15f, 0.7f, 32);
+ DisplayListCylinder c2 = new DisplayListCylinder(0.15f, 0.7f, 32);
+ DisplayListCylinder c3 = new DisplayListCylinder(0.1f, 0.7f, 32);
+ DisplayListCylinder c4 = new DisplayListCylinder(0.15f, 0.7f, 32);
+ DisplayListCylinder c5 = new DisplayListCylinder(0.1f, 0.7f, 32);
+ DisplayListCylinder c6 = new DisplayListCylinder(0.15f, 0.7f, 32);
+ DisplayListCylinder c7 = new DisplayListCylinder(0.15f, 0.7f, 32);
+ DisplayListCylinder c8 = new DisplayListCylinder(0.15f, 0.7f, 32);
+ DisplayListCylinder c9 = new DisplayListCylinder(0.15f, 0.7f, 32);
+ DisplayListOval shadow = new DisplayListOval(3f, 32);
+ Random random = new Random();
+ private float delta;
+ private Boolean isWalking = false;
+ private long walkStartTime;
+ private int stopCount = 0;
+ private Boolean isJumping = false;
+ private float jump_height = 0f;
+ private float timePassed = Engine.getTimePassed();
+
+ public NPC4(Point4f origin, Point4f position, Vector4f scale) {
+ super(origin, position, scale);
+ }
+
+ public NPC4(Point4f origin, Point4f position, Vector4f scale, HashMap textures) {
+ super(origin, position, scale, textures);
+ }
+
+ public NPC4(Point4f origin, Point4f position, Vector4f scale, Vector4f rotation, HashMap textures) {
+ super(origin, position, scale, rotation, textures);
+ }
+
+ public void walk() {
+ stopCount = 0;
+ if (isWalking == false) {
+ isWalking = true;
+ walkStartTime = Engine.getTimePassed();
+// System.out.println(walkStartTime);
+ }
+ if (isWalking) {
+ this.delta = (Engine.getTimePassed() - walkStartTime) / 10000f;
+ }
+ }
+
+ public void jump(int speed) {
+ float g = 9.8f;
+ if (!isJumping) {
+ isJumping = true;
+ long start_time = System.currentTimeMillis();
+ Thread thread = new Thread(new Runnable() {
+ @Override
+ public void run() {
+ double h = 0;
+ long t = 0;
+ while (h >= 0) {
+ long start = System.currentTimeMillis();
+ long current_time = System.currentTimeMillis();
+ t = (current_time - start_time) / 10;
+ h = (speed * t - 0.5 * g * t * t) / 10000;
+ jump_height = (float) h;
+ setShadowOffset(new Vector4f(
+ -jump_height * 90,
+ 0,
+ -jump_height * 90,
+ 0
+ ));
+ long end = System.currentTimeMillis();
+ while (end - start < 16) {
+ try {
+ Thread.sleep(1);
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ end = System.currentTimeMillis();
+ }
+ }
+ jump_height = 0;
+ isJumping = false;
+
+ }
+ });
+ thread.start();
+ }
+
+ }
+
+ public void stop() {
+ if (stopCount > 5) {
+ isWalking = false;
+ this.delta = 0;
+ stopCount = 0;
+ }
+ stopCount++;
+ }
+
+ public void setAngle(float angle) {
+ this.angle_target = (int) angle;
+ }
+
+ @Override
+ public void draw(Integer frame_delta) {
+ timePassed = Engine.getTimePassed() / 10000.0f;
+ float speed = frame_delta / 160f;
+// System.out.println(speed);
+// walk();
+// if((int) (timePassed % 4) == 0){
+// move(new Vector4f(speed,0,0,0));
+// angle_target = 90;
+//
+// }
+// if((int) (timePassed % 4) == 1){
+// move(new Vector4f(0,0,-speed,0));
+// angle_target = 90 + 90;
+// }
+// if((int) (timePassed % 4) == 2){
+// move(new Vector4f(-speed,0,0,0));
+// angle_target = 90 + 90 + 90;
+// }
+// if((int) (timePassed % 4) == 3){
+// move(new Vector4f(0,0,speed,0));
+// angle_target = 90 + 90 + 90 + 90;
+// }
+ GL11.glTranslatef(0, jump_height, 0);
+ Boolean GoodAnimation = true;
+
+ float theta_face = (float) (delta * 2 * Math.PI);
+// float angle = -(float) (180 * (theta_face) / Math.PI);
+// System.out.println(angle);
+//
+ GL11.glRotatef(angle + 180, 0, 1, 0);
+
+ float theta = (float) (delta * 2 * Math.PI) * 8;
+ //a variable for anim sync
+ float LimbRotation;
+ LimbRotation = (float) Math.sin(theta) * 60;
+
+ float Rotation = (float) Math.toDegrees(Math.sin(Engine.getTimePassed() / 200f) * Math.PI);
+
+// if (random.nextDouble() > 0.8) {
+// jump((int) (random.nextDouble() * 800));
+// }
+
+
+// //a sphere for drawing
+// Sphere sphere = new Sphere();
+// //a sphere with texture
+// TexSphere texSphere = new TexSphere();
+// //a cylinder for drawing
+// Cylinder cylinder = new Cylinder();
+
+ //Start to draw
+ GL11.glPushMatrix();
+ {
+ // move to pelvis
+ GL11.glTranslatef(0.0f, 0.5f, 0.0f);
+ //set up TEXTURE
+ GL11.glTexParameteri(
+ GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_T,
+ GL11.GL_REPEAT);
+ //bind a color texture
+ Color.white.bind();
+
+ getTextures().get("warped_door_bottom").bind();
+ //Enable TEXTURE
+
+ //set texture Parameters
+ GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL_NEAREST);
+ GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
+
+ s1.DrawTexSphere();
+
+ //Draw finish Disable TEXTURE
+
+
+// sphere.DrawSphere(0.5f, 32, 32); // pelvis sphere
+
+ // chest
+ GL11.glColor3f(green[0], green[1], green[2]);
+ GL11.glMaterial(GL11.GL_FRONT, GL11.GL_AMBIENT_AND_DIFFUSE, Utils.ConvertForGL(green));
+ GL11.glPushMatrix();
+ {
+ GL11.glTranslatef(0.0f, 0.5f, 0.0f); // move to chest
+ GL11.glTexParameteri(
+ GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_T,
+ GL11.GL_REPEAT);
+ Color.white.bind(); //bind color
+ //bind texture
+ getTextures().get("warped_door_bottom").bind(); //set texture
+ //Enable TEXTURE
+ ;
+ GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL_NEAREST);
+ GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
+
+ s2.DrawTexSphere();
+ ; //disable texture
+
+
+// sphere.DrawSphere(0.5f, 32, 32);// chest sphere
+ GL11.glRotatef((float) (Rotation * 0.1), 0.0f, 0.0f, 1.0f);
+// System.out.println((Rotation));
+// GL11.glRotatef((float) (LimbRotation * 3), 1f, 1f, 0f);
+
+ // neck
+ GL11.glColor3f(orange[0], orange[1], orange[2]); //set color
+ GL11.glMaterial(GL11.GL_FRONT, GL11.GL_AMBIENT_AND_DIFFUSE, Utils.ConvertForGL(orange)); //set material render mode
+ GL11.glPushMatrix();
+ {
+ GL11.glTranslatef(0.0f, 0.0f, 0.0f);
+ GL11.glRotatef(-90.0f, 1.0f, 0.0f, 0.0f);
+ // GL11.glRotatef(45.0f,0.0f,1.0f,0.0f);
+
+ c1.DrawCylinder();
+
+ // head
+ GL11.glColor3f(red[0], red[1], red[2]);
+ GL11.glMaterial(GL11.GL_FRONT, GL11.GL_AMBIENT_AND_DIFFUSE, Utils.ConvertForGL(red));
+ GL11.glPushMatrix();
+ {
+ GL11.glTranslatef(0.0f, 0.0f, 1.0f);
+
+ GL11.glTexParameteri(
+ GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_T,
+ GL11.GL_REPEAT);
+ Color.white.bind();
+ getTextures().get("new_face3").bind(); //set texture
+ ;
+ GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_NEAREST);
+// GL11.glRotatef((float) 90, 0.0f, 0f, 1f);
+// GL11.glRotatef((float) (Rotation * 0.1), 0.0f, 0.0f, 0.0f);
+ s15.DrawTexSphere();
+ ;
+
+
+// sphere.DrawSphere(0.5f, 32, 32);
+ GL11.glPopMatrix();
+ }
+ GL11.glPopMatrix();
+
+
+ // left shoulder
+ GL11.glColor3f(blue[0], blue[1], blue[2]);
+ GL11.glMaterial(GL11.GL_FRONT, GL11.GL_AMBIENT_AND_DIFFUSE, Utils.ConvertForGL(blue));
+ GL11.glPushMatrix();
+ {
+ GL11.glRotatef((float) (LimbRotation * 0.5), 0f, 1f, 0f);
+
+ GL11.glTranslatef(0.5f, 0.4f, 0.0f);
+ //set texture Parameter
+ GL11.glTexParameteri(
+ GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_T,
+ GL11.GL_REPEAT);
+ Color.white.bind();
+ getTextures().get("default_stone").bind(); //set texture
+ ;
+ GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_NEAREST);
+
+ s3.DrawTexSphere();
+// sphere.DrawSphere(0.25f, 32, 32);
+
+
+ // left arm
+ GL11.glColor3f(orange[0], orange[1], orange[2]);
+ GL11.glMaterial(GL11.GL_FRONT, GL11.GL_AMBIENT_AND_DIFFUSE, Utils.ConvertForGL(orange));
+ GL11.glPushMatrix();
+ {
+ GL11.glTranslatef(0.0f, 0.0f, 0.0f);
+ GL11.glRotatef(-20, 0f, 0f, 1f);
+ GL11.glRotatef(-90, 1.0f, 0.0f, 0.0f);
+
+// GL11.glRotatef((float) (-Rotation * 0.2), 1.0f, 0.0f, 0.0f);
+ // GL11.glRotatef(27.5f,0.0f,1.0f,0.0f);
+
+ c2.DrawCylinder();
+
+
+ // left elbow
+ GL11.glColor3f(blue[0], blue[1], blue[2]);
+ GL11.glMaterial(GL11.GL_FRONT, GL11.GL_AMBIENT_AND_DIFFUSE, Utils.ConvertForGL(blue));
+ GL11.glPushMatrix();
+ {
+ GL11.glRotatef((float) (LimbRotation * -0.5), 0f, 0f, 1f);
+ GL11.glTranslatef(0.0f, 0.0f, 0.75f);
+ GL11.glTexParameteri(
+ GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_T,
+ GL11.GL_REPEAT);
+ Color.white.bind();
+ getTextures().get("default_stone").bind();
+ ;
+ GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_NEAREST);
+
+ s4.DrawTexSphere();
+ ;
+// sphere.DrawSphere(0.2f, 32, 32);
+
+ //left forearm
+ GL11.glColor3f(orange[0], orange[1], orange[2]);
+ GL11.glMaterial(GL11.GL_FRONT, GL11.GL_AMBIENT_AND_DIFFUSE, Utils.ConvertForGL(orange));
+ GL11.glPushMatrix();
+ {
+ GL11.glTranslatef(0.0f, 0.0f, 0.0f);
+ GL11.glRotatef(0f, 1.0f, 0.0f, 0.0f);
+ // GL11.glRotatef(90.0f,0.0f,1.0f,0.0f);
+// GL11.glRotatef((float) (Rotation * 0.2), 0.0f, 1.0f, 0.0f);
+ c3.DrawCylinder();
+
+ // left hand
+ GL11.glColor3f(blue[0], blue[1], blue[2]);
+ GL11.glMaterial(GL11.GL_FRONT, GL11.GL_AMBIENT_AND_DIFFUSE, Utils.ConvertForGL(blue));
+ GL11.glPushMatrix();
+ {
+ GL11.glTranslatef(0.0f, 0.0f, 0.75f);
+ GL11.glTexParameteri(
+ GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_T,
+ GL11.GL_REPEAT);
+ Color.white.bind();
+ getTextures().get("default_stone").bind();
+ ;
+ GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_NEAREST);
+
+ s5.DrawTexSphere();
+ ;
+// sphere.DrawSphere(0.2f, 32, 32);
+
+
+ }
+ GL11.glPopMatrix();
+ }
+ GL11.glPopMatrix();
+ }
+ GL11.glPopMatrix();
+ }
+ GL11.glPopMatrix();
+ }
+ GL11.glPopMatrix();
+
+
+ // to chest
+ GL11.glColor3f(blue[0], blue[1], blue[2]);
+ GL11.glMaterial(GL11.GL_FRONT, GL11.GL_AMBIENT_AND_DIFFUSE, Utils.ConvertForGL(blue));
+ GL11.glPushMatrix();
+ {
+// GL11.glRotatef((float) (Rotation * 0.5), 0f, 0f, 1f);
+
+ GL11.glTranslatef(-0.5f, 0.4f, 0.0f); // move to right arm
+ GL11.glTexParameteri(
+ GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_T,
+ GL11.GL_REPEAT);
+ Color.white.bind();
+ getTextures().get("default_stone").bind();
+ ;
+ GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_NEAREST);
+
+ s6.DrawTexSphere();
+ ;
+// sphere.DrawSphere(0.25f, 32, 32);
+
+
+ // right arm
+ GL11.glColor3f(orange[0], orange[1], orange[2]);
+ GL11.glMaterial(GL11.GL_FRONT, GL11.GL_AMBIENT_AND_DIFFUSE, Utils.ConvertForGL(orange));
+ GL11.glPushMatrix();
+ {
+ GL11.glRotatef(20, 0f, 0f, 1f);
+ GL11.glTranslatef(0.0f, 0.0f, 0.0f);
+ GL11.glRotatef(-90.0f, 1.0f, 0.0f, 0.0f);
+
+
+ GL11.glRotatef(-LimbRotation, 1.0f, 0.0f, 0.0f);
+
+ // GL11.glRotatef(27.5f,0.0f,1.0f,0.0f);
+ c4.DrawCylinder();
+
+
+ // right elbow
+ GL11.glColor3f(blue[0], blue[1], blue[2]);
+ GL11.glMaterial(GL11.GL_FRONT, GL11.GL_AMBIENT_AND_DIFFUSE, Utils.ConvertForGL(blue));
+ GL11.glPushMatrix();
+ {
+ GL11.glRotatef((float) (LimbRotation * -0.5), 0f, 0f, 1f);
+ GL11.glTranslatef(0.0f, 0.0f, 0.75f);
+// GL11.glRotatef((float) (-Rotation * 0.2), 1.0f, 0.0f, 0.0f);
+ GL11.glTexParameteri(
+ GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_T,
+ GL11.GL_REPEAT);
+ Color.white.bind();
+ getTextures().get("default_stone").bind();
+ ;
+ GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_NEAREST);
+
+ s7.DrawTexSphere();
+ ;
+// sphere.DrawSphere(0.2f, 32, 32);
+
+ //right forearm
+ GL11.glColor3f(orange[0], orange[1], orange[2]);
+ GL11.glMaterial(GL11.GL_FRONT, GL11.GL_AMBIENT_AND_DIFFUSE, Utils.ConvertForGL(orange));
+ GL11.glPushMatrix();
+ {
+ GL11.glTranslatef(0.0f, 0.0f, 0.0f);
+ GL11.glRotatef(0f, 1.0f, 0.0f, 0.0f);
+ // GL11.glRotatef(90.0f,0.0f,1.0f,0.0f);
+// GL11.glRotatef((float) (-Rotation * 0.2), 0.0f, 1.0f, 0.0f);
+ c5.DrawCylinder();
+
+ // right hand
+ GL11.glColor3f(blue[0], blue[1], blue[2]);
+ GL11.glMaterial(GL11.GL_FRONT, GL11.GL_AMBIENT_AND_DIFFUSE, Utils.ConvertForGL(blue));
+ GL11.glPushMatrix();
+ {
+ GL11.glTranslatef(0.0f, 0.0f, 0.75f);
+ GL11.glTexParameteri(
+ GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_T,
+ GL11.GL_REPEAT);
+ Color.white.bind();
+ getTextures().get("default_stone").bind();
+ ;
+ GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_NEAREST);
+
+ s8.DrawTexSphere();
+ ;
+// sphere.DrawSphere(0.2f, 32, 32);
+
+
+ }
+ GL11.glPopMatrix();
+ }
+ GL11.glPopMatrix();
+ }
+ GL11.glPopMatrix();
+ }
+ GL11.glPopMatrix();
+ }
+ GL11.glPopMatrix();
+
+ //now chest
+
+
+ }
+ GL11.glPopMatrix();
+// GL11.glRotatef(LimbRotation * 3, 0.0f, 1.0f, 0.0f);
+// GL11.glRotatef((float) (LimbRotation * -0.2), 0.0f, 1.0f, 0.0f);
+
+
+// GL11.glPushMatrix();
+// GL11.glTranslatef(0,-1.8f,0);
+// glDisable(GL_LIGHTING);
+// glDisable(GL_TEXTURE_2D);
+// Color.black.bind();
+// shadow.DrawOval();
+// Color.white.bind();
+// glEnable(GL_TEXTURE_2D);
+// glEnable(GL_LIGHTING);
+// GL11.glPopMatrix();
+ // pelvis
+ // left hip
+ GL11.glColor3f(blue[0], blue[1], blue[2]);
+ GL11.glMaterial(GL11.GL_FRONT, GL11.GL_AMBIENT_AND_DIFFUSE, Utils.ConvertForGL(blue));
+ GL11.glPushMatrix();
+ {
+ GL11.glTranslatef(0.5f, -0.2f, 0.0f);
+ GL11.glTexParameteri(
+ GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_T,
+ GL11.GL_REPEAT);
+ Color.white.bind();
+ getTextures().get("default_cobble").bind();
+ ;
+ GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_NEAREST);
+
+ s9.DrawTexSphere();
+ ;
+// sphere.DrawSphere(0.25f, 32, 32);
+
+
+ // left high leg
+ GL11.glColor3f(orange[0], orange[1], orange[2]);
+ GL11.glMaterial(GL11.GL_FRONT, GL11.GL_AMBIENT_AND_DIFFUSE, Utils.ConvertForGL(orange));
+ GL11.glPushMatrix();
+ {
+ GL11.glTranslatef(0.0f, 0.0f, 0.0f);
+ GL11.glRotatef(0.0f, 0.0f, 0.0f, 0.0f);
+
+
+ GL11.glRotatef((-LimbRotation / 2) + 90, 1.0f, 0.0f, 0.0f);
+ // GL11.glRotatef(90.0f,1.0f,0.0f,0.0f);
+
+ c6.DrawCylinder();
+
+
+ // left knee
+ GL11.glColor3f(blue[0], blue[1], blue[2]);
+ GL11.glMaterial(GL11.GL_FRONT, GL11.GL_AMBIENT_AND_DIFFUSE, Utils.ConvertForGL(blue));
+ GL11.glPushMatrix();
+ {
+ GL11.glTranslatef(0.0f, 0.0f, 0.75f);
+ GL11.glRotatef(0.0f, 0.0f, 0.0f, 0.0f);
+ GL11.glTexParameteri(
+ GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_T,
+ GL11.GL_REPEAT);
+ Color.white.bind();
+ getTextures().get("default_cobble").bind();
+ ;
+ GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_NEAREST);
+
+ s10.DrawTexSphere();
+ ;
+// sphere.DrawSphere(0.25f, 32, 32);
+
+ //left low leg
+ GL11.glColor3f(orange[0], orange[1], orange[2]);
+ GL11.glMaterial(GL11.GL_FRONT, GL11.GL_AMBIENT_AND_DIFFUSE, Utils.ConvertForGL(orange));
+ GL11.glPushMatrix();
+ {
+ GL11.glTranslatef(0.0f, 0.0f, 0.0f);
+ // GL11.glRotatef(120.0f,1.0f,0.0f,0.0f);
+ // GL11.glRotatef(0.0f,0.0f,0.0f,0.0f);
+
+ c7.DrawCylinder();
+
+ // left foot
+ GL11.glColor3f(blue[0], blue[1], blue[2]);
+ GL11.glMaterial(GL11.GL_FRONT, GL11.GL_AMBIENT_AND_DIFFUSE, Utils.ConvertForGL(blue));
+ GL11.glPushMatrix();
+ {
+ GL11.glTranslatef(0.0f, 0.0f, 0.75f);
+ GL11.glTexParameteri(
+ GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_T,
+ GL11.GL_REPEAT);
+ Color.white.bind();
+ getTextures().get("default_cobble").bind();
+ ;
+ GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_NEAREST);
+
+ s11.DrawTexSphere();
+ ;
+
+// sphere.DrawSphere(0.3f, 32, 32);
+
+ }
+ GL11.glPopMatrix();
+ }
+ GL11.glPopMatrix();
+ }
+ GL11.glPopMatrix();
+ }
+ GL11.glPopMatrix();
+ }
+ GL11.glPopMatrix();
+
+ // pelvis
+ // right hip
+ GL11.glColor3f(blue[0], blue[1], blue[2]);
+ GL11.glMaterial(GL11.GL_FRONT, GL11.GL_AMBIENT_AND_DIFFUSE, Utils.ConvertForGL(blue));
+ GL11.glPushMatrix();
+ {
+ GL11.glTranslatef(-0.5f, -0.2f, 0.0f);
+ GL11.glTexParameteri(
+ GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_T,
+ GL11.GL_REPEAT);
+ Color.white.bind();
+ getTextures().get("default_cobble").bind();
+ ;
+ GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_NEAREST);
+
+ s12.DrawTexSphere();
+ ;
+
+// sphere.DrawSphere(0.25f, 32, 32);
+
+
+ // right high leg
+ GL11.glColor3f(orange[0], orange[1], orange[2]);
+ GL11.glMaterial(GL11.GL_FRONT, GL11.GL_AMBIENT_AND_DIFFUSE, Utils.ConvertForGL(orange));
+ GL11.glPushMatrix();
+ {
+ GL11.glTranslatef(0.0f, 0.0f, 0.0f);
+ GL11.glRotatef(0.0f, 0.0f, 0.0f, 0.0f);
+
+
+ GL11.glRotatef((LimbRotation / 2) + 90, 1.0f, 0.0f, 0.0f);
+ // GL11.glRotatef(90.0f,1.0f,0.0f,0.0f);
+
+ c8.DrawCylinder();
+
+
+ // right knee
+ GL11.glColor3f(blue[0], blue[1], blue[2]);
+ GL11.glMaterial(GL11.GL_FRONT, GL11.GL_AMBIENT_AND_DIFFUSE, Utils.ConvertForGL(blue));
+ GL11.glPushMatrix();
+ {
+ GL11.glTranslatef(0.0f, 0.0f, 0.75f);
+ GL11.glRotatef(0.0f, 0.0f, 0.0f, 0.0f);
+ GL11.glTexParameteri(
+ GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_T,
+ GL11.GL_REPEAT);
+ Color.white.bind();
+ getTextures().get("default_cobble").bind();
+ ;
+ GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_NEAREST);
+
+ s13.DrawTexSphere();
+ ;
+// sphere.DrawSphere(0.25f, 32, 32);
+
+ //right low leg
+ GL11.glColor3f(orange[0], orange[1], orange[2]);
+ GL11.glMaterial(GL11.GL_FRONT, GL11.GL_AMBIENT_AND_DIFFUSE, Utils.ConvertForGL(orange));
+ GL11.glPushMatrix();
+ {
+ GL11.glTranslatef(0.0f, 0.0f, 0.0f);
+ // GL11.glRotatef(120.0f,1.0f,0.0f,0.0f);
+ // GL11.glRotatef(0.0f,0.0f,0.0f,0.0f);
+
+ c9.DrawCylinder();
+
+ // left foot
+ GL11.glColor3f(blue[0], blue[1], blue[2]);
+ GL11.glMaterial(GL11.GL_FRONT, GL11.GL_AMBIENT_AND_DIFFUSE, Utils.ConvertForGL(blue));
+ GL11.glPushMatrix();
+ {
+ GL11.glTranslatef(0.0f, 0.0f, 0.75f);
+ GL11.glTexParameteri(
+ GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_T,
+ GL11.GL_REPEAT);
+ Color.white.bind();
+ getTextures().get("default_cobble").bind();
+ ;
+ GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_NEAREST);
+
+ s14.DrawTexSphere();
+ ;
+// sphere.DrawSphere(0.3f, 32, 32);
+
+ }
+ GL11.glPopMatrix();
+ }
+ GL11.glPopMatrix();
+ }
+ GL11.glPopMatrix();
+ }
+ GL11.glPopMatrix();
+ }
+ GL11.glPopMatrix();
+
+ }
+ GL11.glPopMatrix();
+
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/base/obj/Face.java b/src/base/obj/Face.java
new file mode 100644
index 0000000..78a85fa
--- /dev/null
+++ b/src/base/obj/Face.java
@@ -0,0 +1,8 @@
+package base.obj;/**
+ * @Author: WangYuyang
+ * @Date: 2021/11/23-00:08
+ * @Project: Assignment3
+ * @Package: base.obj
+ * @Description:
+ **/public class Face {
+}
diff --git a/src/base/objects3D/Material.java b/src/base/objects3D/Material.java
new file mode 100644
index 0000000..a916c12
--- /dev/null
+++ b/src/base/objects3D/Material.java
@@ -0,0 +1,28 @@
+package base.obj;
+
+import org.newdawn.slick.opengl.Texture;
+
+/**
+ * @Author: WangYuyang
+ * @Date: 2021/11/23-00:07
+ * @Project: Assignment3
+ * @Package: base.obj
+ * @Description:
+ **/
+public class Material {
+ public float spC = 100;
+ public float[] ambientColour = {0.2f, 0.2f, 0.2f};
+ public float[] diffuseColour = {0.3f, 1, 1};
+ public float[] specularColour = {1, 1, 1};
+ public Texture texture;
+
+ @Override
+ public String toString() {
+ return "Material{" +
+ "specularCoefficient=" + spC +
+ ", ambientColour=" + ambientColour +
+ ", diffuseColour=" + diffuseColour +
+ ", specularColour=" + specularColour +
+ '}';
+ }
+}