⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gallery.java

📁 一个java 3D程序的源代码
💻 JAVA
字号:
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import java.awt.image.MemoryImageSource;
//import java.awt.image.*;
import java.awt.image.PixelGrabber;

public class gallery extends Applet implements KeyListener, ActionListener{
	public Image offScreenImage;
	public Ticker t;
	public static int[] screen;
	public static int[] screenBuffer;
	public static boolean[] buffer;
	public MemoryImageSource source;
	public Image img;
	public camera Camera;
	public static texture[] textures;
	public model world;
	public static polygon3D[] polygons;

	public double lastTime;
	public int[] frameRate;
	public int fps;
	public int counter;
	public static int visiblePolygon;
	public String message;

	public void init(){
		Color c1 = new Color(40,40,40);
		Color c2 = new Color(41,41,40);
		System.out.println(c1.getRGB() - c2.getRGB());

		frameRate = new int[30];
		Camera = new camera(new vector(10,8,-9));
		screen = new int[640*480];
		screenBuffer = new int[640*480];
		buffer = new boolean[640*480];
		source = new MemoryImageSource(640, 480, screen, 0, 640);
		source.setAnimated(true);
		source.setFullBufferUpdates(true);
		img = createImage(source);

		addKeyListener(this);
		requestFocus();

		t = new Ticker(0);
		t.addActionListener(this);
		t.start();
	}

	public final void actionPerformed(ActionEvent e){
		if(textures == null){
			loadTexture();
		}

		if(counter == 0){
			Camera = new camera(new vector(10,5,-9));
			gameData.makeData();
			loadModels();
		}

		counter++;
		gameData.update();
		visiblePolygon = 0;
		double thisTime = System.currentTimeMillis();
		frameRate[counter%30] = (int)(1000/(thisTime - lastTime));
		fps = 0;
		for(int i = 0; i < 30; i++)
			fps+=frameRate[i];
		lastTime = thisTime;
		fps= fps/30;

		clearScreen();
		camera.update();
		LightSource.update();

		world.update();
		world.sort();
		world.draw();

		message = "FPS: " + fps + "      " + "visible polygons: " + visiblePolygon;

		source.newPixels(0, 0, 640, 480);
		myPaint(this.getGraphics());

	}

	public final void clearScreen(){
		for(int i =  0; i < screen.length; i++){
			screen[i] = -134250;
		}
	}

	public final void myPaint(Graphics g){
		Graphics offScreenGraphics;
		if (offScreenImage == null) {
			offScreenImage = createImage(640, 480);
		}
		offScreenGraphics = offScreenImage.getGraphics();
		offScreenGraphics.drawImage(img, 0, 0, this);
		if(message != null)
			offScreenGraphics.drawString(message, 10,10);
		g.drawImage(offScreenImage, 0, 0, this);

	}

	public final void paint(Graphics g){
		clearScreen();
		myPaint(this.getGraphics());
	}
    public final void update(Graphics g){}


	public void loadTexture(){
		textures = new texture[18];
		clearScreen();
		textures[0] = new texture(getImage(getDocumentBase(), "Image\\" + "0.jpg"), 9, 8);
		textures[1] = new texture(getImage(getDocumentBase(), "Image\\" + "1.jpg"), 9, 9);
		textures[2] = new texture(getImage(getDocumentBase(), "Image\\" + "2.jpg"),8, 8);
		textures[3] = new texture(getImage(getDocumentBase(), "Image\\" + "3.jpg"),8, 4);
		textures[4] = new texture(getImage(getDocumentBase(), "Image\\" + "4.jpg"),8, 8);
		textures[5] = new texture(getImage(getDocumentBase(), "Image\\" + "5.jpg"),1, 1);
		textures[6] = new texture(getImage(getDocumentBase(), "Image\\" + "6.jpg"),1, 1);
		textures[7] = new texture(getImage(getDocumentBase(), "Image\\" + "7.jpg"),1, 1);
		textures[8] = new texture(getImage(getDocumentBase(), "Image\\" + "8.jpg"),1, 1);
		textures[9] = new texture(getImage(getDocumentBase(), "Image\\" + "9.jpg"),1, 1);
		textures[10] = new texture(getImage(getDocumentBase(), "Image\\" + "10.jpg"),1, 1);
		textures[11] = new texture(getImage(getDocumentBase(), "Image\\" + "11.jpg"),7, 7);
		textures[12] = new texture(getImage(getDocumentBase(), "Image\\" + "12.jpg"),7, 7);
		textures[13] = new texture(getImage(getDocumentBase(), "Image\\" + "13.jpg"),6, 6);
		textures[14] = new texture(getImage(getDocumentBase(), "Image\\" + "14.jpg"),9, 8);
		textures[15] = new texture(getImage(getDocumentBase(), "Image\\" + "15.gif"),9, 8);
		textures[16] = new texture(getImage(getDocumentBase(), "Image\\" + "16.jpg"),8, 7);
		textures[17] = new texture(getImage(getDocumentBase(), "Image\\" + "17.jpg"),9, 9);



	}


	public void loadModels(){
		modelBuilder.build();
		world = modelBuilder.world;
	}

	public void keyTyped(KeyEvent e){

	}

	public void keyReleased(KeyEvent e){
	 	if(e.getKeyChar() == 'w')
			camera.MOVE_FORWARD = false;
		else if(e.getKeyChar() == 's')
			camera.MOVE_BACKWARD = false;
		else if(e.getKeyChar() == 'a')
			camera.SLIDE_LEFT = false;
		else if(e.getKeyChar() == 'd')
			camera.SLIDE_RIGHT = false;

		if(e.getKeyCode() == KeyEvent.VK_UP)
			Camera.UP_TYPED= false;
		else if(e.getKeyCode() == KeyEvent.VK_DOWN)
			Camera.DOWN_TYPED = false;
		else if(e.getKeyCode() == KeyEvent.VK_LEFT)
			Camera.LEFT_TYPED = false;
		else if(e.getKeyCode() == KeyEvent.VK_RIGHT)
			Camera.RIGHT_TYPED = false;



	}

	public void keyPressed(KeyEvent e){
        if(e.getKeyChar() == 'w')
			camera.MOVE_FORWARD = true;
		else if(e.getKeyChar() == 's')
			camera.MOVE_BACKWARD = true;
		else if(e.getKeyChar() == 'a')
			camera.SLIDE_LEFT = true;
		else if(e.getKeyChar() == 'd')
			camera.SLIDE_RIGHT = true;



		if(e.getKeyCode() == KeyEvent.VK_UP)
			Camera.UP_TYPED= true;
		else if(e.getKeyCode() == KeyEvent.VK_DOWN)
			Camera.DOWN_TYPED = true;
		else if(e.getKeyCode() == KeyEvent.VK_LEFT)
			Camera.LEFT_TYPED = true;
		else if(e.getKeyCode() == KeyEvent.VK_RIGHT)
			Camera.RIGHT_TYPED = true;
	}

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -