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 + + '}'; + } +}