package template.racing; import java.awt.Image; import java.awt.image.BufferedImage; import javax.media.j3d.AmbientLight; import javax.media.j3d.Appearance; import javax.media.j3d.BoundingSphere; import javax.media.j3d.ColoringAttributes; import javax.media.j3d.DirectionalLight; import javax.media.j3d.ImageComponent2D; import javax.media.j3d.Material; import javax.media.j3d.TexCoordGeneration; import javax.media.j3d.Texture; import javax.media.j3d.Texture2D; import javax.media.j3d.TextureAttributes; import javax.media.j3d.TextureUnitState; import javax.swing.ImageIcon; import javax.vecmath.AxisAngle4d; import javax.vecmath.Color3f; import javax.vecmath.Point3d; import javax.vecmath.Vector3d; import javax.vecmath.Vector3f; import javax.vecmath.Vector4f; import com.sun.j3d.utils.image.TextureLoader; import framework.RWT.RWTFrame3D; import framework.RWT.RWTVirtualController; import framework.animation.Animation3D; import framework.animation.AnimationFactory; import framework.gameMain.MultiViewGame; import framework.gameMain.OvergroundActor; import framework.model3D.BackgroundBox; import framework.model3D.Model3D; import framework.model3D.ModelFactory; import framework.model3D.Object3D; import framework.model3D.Position3D; import framework.model3D.Quaternion3D; import framework.model3D.Terrain3D; import framework.model3D.Universe; import framework.physics.Ground; import framework.physics.Solid3D; import framework.physics.Velocity3D; import framework.test.TestMultiView; import framework.view3D.Camera3D; public class TemplateRacing extends MultiViewGame { Automobile car1; Automobile car2; Ground ground; @Override public void init(Universe universe, Camera3D camera1, Camera3D camera2) { // 環境光 AmbientLight amblight = new AmbientLight(new Color3f(0.3f, 0.3f, 0.3f)); amblight .setInfluencingBounds(new BoundingSphere(new Point3d(), 10000.0)); universe.placeLight(amblight); // 平行光源 DirectionalLight dirlight = new DirectionalLight(true, // 光のON/OFF new Color3f(1.0f, 1.0f, 1.0f), // 光の色 new Vector3f(0.0f, -1.0f, -0.5f) // 光の方向ベクトル ); dirlight .setInfluencingBounds(new BoundingSphere(new Point3d(), 10000.0)); universe.placeLight(dirlight); Model3D carModel = ModelFactory.loadModel("data\\GTR\\GTR.wrl", false, true); Object3D carBody1 = carModel.createObject(); car1 = new Automobile(new Solid3D(carBody1), null); car1.body.apply(new Position3D(200.0, 3.0, 50.0), false); universe.place(car1); Object3D carBody2 = carModel.createObject(); car2 = new Automobile(new Solid3D(carBody2), null); car2.body.apply(new Position3D(-150.0, 3.0, 50.0), false); universe.place(car2); camera1.addTarget(car1); camera1.setViewLine(car1.getDirection()); camera1.setCameraBack(new Vector3d(0.0, 3.0, 5.0)); camera1.setFieldOfView(1.5); camera2.addTarget(car2); camera2.setViewLine(car2.getDirection()); camera2.setCameraBack(new Vector3d(0.0, 3.0, 5.0)); camera2.setFieldOfView(1.5); Object3D stageObj = ModelFactory.loadModel("data\\Road\\RoadStage.WRL").createObject(); ground = new Ground(stageObj); universe.place(ground); buildSkyBox(universe); } @Override public void progress(RWTVirtualController virtualController, long interval) { // TODO Auto-generated method stub if (virtualController.isKeyDown(0, RWTVirtualController.LEFT)) { car1.turnLeft(interval); } else if (virtualController .isKeyDown(0, RWTVirtualController.RIGHT)) { car1.turnRight(interval); } else { car1.steeringSelfCentering(interval); } if (virtualController.isKeyDown(0, RWTVirtualController.DOWN)) { car1.brake(); } else if (virtualController.isKeyDown(0, RWTVirtualController.UP)) { car1.accelrate(); } else { car1.engineBrake(interval); } car1.motion(interval, ground); camera1.setViewLine(car1.getDirection()); if (virtualController.isKeyDown(1, RWTVirtualController.LEFT)) { car2.turnLeft(interval); } else if (virtualController .isKeyDown(1, RWTVirtualController.RIGHT)) { car2.turnRight(interval); } else { car2.steeringSelfCentering(interval); } if (virtualController.isKeyDown(1, RWTVirtualController.DOWN)) { car2.brake(); } else if (virtualController.isKeyDown(1, RWTVirtualController.UP)) { car2.accelrate(); } else { car2.engineBrake(interval); } car2.motion(interval, ground); camera2.setViewLine(car2.getDirection()); } @Override public RWTFrame3D createFrame3D() { RWTFrame3D f = new RWTFrame3D(); f.setSize(800, 600); f.setTitle("RadishRacing"); // f.setShadowCasting(true); return f; } /** * @param args */ public static void main(String[] args) { TemplateRacing game = new TemplateRacing(); game.start(); } private void buildSkyBox(Universe universe) { // TextureLoader loaderTop = new TextureLoader("data\\texture\\top.jpg", // TextureLoader.BY_REFERENCE | TextureLoader.Y_UP, null); // Texture textureTop = loaderTop.getTexture(); // TextureLoader loaderBottom = new TextureLoader( // "data\\texture\\bottom.jpg", TextureLoader.BY_REFERENCE // | TextureLoader.Y_UP, null); // Texture textureBottom = loaderBottom.getTexture(); // TextureLoader loaderNorth = new TextureLoader( // "data\\texture\\north.jpg", TextureLoader.BY_REFERENCE // | TextureLoader.Y_UP, null); // Texture textureNorth = loaderNorth.getTexture(); // TextureLoader loaderSouth = new TextureLoader( // "data\\texture\\south.jpg", TextureLoader.BY_REFERENCE // | TextureLoader.Y_UP, null); // Texture textureSouth = loaderSouth.getTexture(); // TextureLoader loaderWest = new TextureLoader("data\\texture\\west.jpg", // TextureLoader.BY_REFERENCE | TextureLoader.Y_UP, null); // Texture textureWest = loaderWest.getTexture(); // TextureLoader loaderEast = new TextureLoader("data\\texture\\east.jpg", // TextureLoader.BY_REFERENCE | TextureLoader.Y_UP, null); // Texture textureEast = loaderEast.getTexture(); // // BackgroundBox background = new BackgroundBox(textureNorth, textureWest, // textureSouth, textureEast, textureTop, textureBottom); // BoundingSphere bs = new BoundingSphere(); // bs.setRadius(1000); // background.setApplicationBounds(bs); // universe.place(background); } }