16
News / Away from keyboard for one week
« on: December 07, 2006, 12:01:21 am »
picture... please pictures !!
have fun !!
have fun !!
This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.
public void apply(int[] dest, int[] source) {
System.arraycopy(fb.getPixels(), 0, dest, 0, fb.getPixels().length);
}
public void display(FrameBuffer buffer, int x, int y) {
if (buffer != null) {
buffer.blit(getTexture(), 0, 0, x, y, getTexture().getWidth(),
getTexture().getHeight(), false);
}
// fb.display(g, x, y);
}
public void afterPaintComponent(Graphics g) {
rearview.display(getBuffer(), 30, 30);
g.setColor(Color.WHITE);
g.drawRect(30, 30, 300, 100);
g.drawString(Integer.toString(lastFPS) + "FPS", 15, 15);
}
protected void paintComponent(Graphics g) {
if (buffer != null) {
buffer.display(g, leftBorderWidth, titleBarHeight);
afterPaintComponent(g);
}
}
public class ViewPortEffect implements ITextureEffect {
private FrameBuffer fb;
public ViewPortEffect(FrameBuffer fb) {
this.fb = fb;
}
public void apply(int[] dest, int[] source) {
dest = fb.getPixels();
}
public void init(Texture arg0) {
}
}
public ViewPort(World master, int width, int height) {
this.camera = new Camera();
this.width = width;
this.height = height;
this.w = master;
fb = new FrameBuffer(width, height, FrameBuffer.SAMPLINGMODE_NORMAL);
fb.enableRenderer(IRenderer.RENDERER_SOFTWARE);
texture = TextureManager.getInstance().getDummyTexture();
texture.setEffect(new ViewPortEffect(fb));
// buffer = new BufferedImage(width, height,
// BufferedImage.TYPE_INT_RGB);
// g2 = buffer.createGraphics();
}
public void render() {
Camera foo = w.getCamera();
w.setCameraTo(camera);
fb.clear();
w.renderScene(fb);
w.draw(fb);
fb.update();
texture.applyEffect();
w.setCameraTo(foo);
}
mirror = new ViewPort(getWorld(), 256, 256);
Camera c = mirror.getCamera();
getTextureManager().replaceTexture("mirror", mirror.getTexture());
c.setPosition(80, -70, 80);
c.lookAt(SimpleVector.ORIGIN);
System.setOut(new PrintStream(new OutputStream() {
public void write(int i) {
}
public void write(byte[] b) throws IOException {
}
public void write(byte[] b, int off, int len) throws IOException {
}
}));
package com.foo.game.util;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.util.Enumeration;
import com.threed.jpct.FrameBuffer;
import com.threed.jpct.IRenderer;
import com.threed.jpct.Texture;
import com.threed.jpct.World;
public class ViewPort {
private World w;
private FrameBuffer fb;
private int width;
private int height;
public ViewPort(World master, int width, int height) {
this.width = width;
this.height = height;
w = new World();
Enumeration objects = master.getObjects();
while (objects.hasMoreElements()) {
AbstractEntity element = (AbstractEntity) objects.nextElement();
AbstractEntity clone = new AbstractEntity(element.cloneObject());
element.addSyncObject(clone);
w.addObject(clone);
}
w.buildAllObjects();
fb = new FrameBuffer(width, height, FrameBuffer.SAMPLINGMODE_NORMAL);
fb.enableRenderer(IRenderer.RENDERER_SOFTWARE);
}
public void render() {
fb.clear();
w.renderScene(fb);
w.draw(fb);
fb.update();
}
public World getWorld() {
return w;
}
/**
* draws the world using the framebuffer in the informed Graphics at the
* position (x,y)
*
* @param g
* @param x
* @param y
*/
public void display(Graphics g, int x, int y) {
fb.display(g, x, y);
}
/**
* returns the draw result of the view port in a texture
*
* @return
*/
public Texture getTexture() {
BufferedImage buffer = new BufferedImage(width, height,
BufferedImage.TYPE_INT_RGB);
Graphics2D g2 = buffer.createGraphics();
display(g2, 0, 0);
return new Texture(buffer);
}
}
package com.foo.game.rearview;
import java.awt.Color;
import java.awt.Component;
import java.awt.Graphics;
import com.foo.game.test.Pathbuilder;
import com.foo.game.util.AbstractEntity;
import com.foo.game.util.CameraUtil;
import com.foo.game.util.FPSListener;
import com.foo.game.util.LightUtil;
import com.foo.game.util.PlaneUtil;
import com.foo.game.util.SimpleGame;
import com.foo.game.util.ViewPort;
import com.threed.jpct.Camera;
import com.threed.jpct.Config;
import com.threed.jpct.Object3D;
import com.threed.jpct.Primitives;
import com.threed.jpct.SimpleVector;
import com.threed.jpct.Texture;
import com.threed.jpct.TextureManager;
public class RearViewGame extends SimpleGame implements FPSListener {
public RearViewGame(Component owner, Pathbuilder builder) throws Exception {
super(owner, builder);
init();
}
private static final long serialVersionUID = 1L;
private static final float ROTATE_ANGLE = (float) Math.toRadians(20.0);
private static final float SPEED = 25.0f;
private Object3D current = null;
private int lastFPS = 0;
private ViewPort rearview;
private ViewPort mirror;
public void init() throws Exception {
System.out.println("Config.maxPolysVisible=" + Config.maxPolysVisible);
Config.maxPolysVisible = 12000;
addTexture("rocks", "textures/rocks.jpg");
addTexture("floor", "textures/floor.jpg");
AbstractEntity[] list = new AbstractEntity[4];
list[0] = new AbstractEntity(Primitives.getCube(20));
setCurrent(list[0]);
// remove from the floor, decrease
list[0].translate(0, -20, 0);
list[2] = new AbstractEntity(Primitives.getCylinder(50));
list[2].translate(0, -50, -100);
// the mirror
list[3] = new AbstractEntity(Primitives.getPlane(50, 3));
list[3].translate(100, -50, 100);
getTextureManager().addTexture("mirror",
getTextureManager().getDummyTexture());
list[3].setTexture("mirror");
list[1] = new AbstractEntity(PlaneUtil.getPlane("floor", 20, 300));
addObjects(list);
CameraUtil.setCameraLookingFromTop(getCamera(), list[0]);
mirror = new ViewPort(getWorld(), 256, 256);
Camera c = mirror.getWorld().getCamera();
c.setPosition(100, -50, 100);
c.lookAt(SimpleVector.ORIGIN);
rearview = new ViewPort(getWorld(), 300, 100);
c = rearview.getWorld().getCamera();
c.setPosition(50, -100, 50);
c.lookAt(SimpleVector.ORIGIN);
LightUtil.addDefaultLight(getWorld());
LightUtil.addDefaultLight(rearview.getWorld());
LightUtil.addDefaultLight(mirror.getWorld());
addFPSListener(this);
}
public void afterPaintComponent(Graphics g) {
rearview.display(g, 30, 30);
g.setColor(Color.WHITE);
g.drawRect(30, 30, 300, 100);
g.drawString(Integer.toString(lastFPS) + "FPS", 15, 15);
}
public void loop() {
rearview.render();
mirror.render();
getTextureManager().replaceTexture("mirror", mirror.getTexture());
if (getCurrent() != null) {
if (isUp()) {
SimpleVector a = getCurrent().getZAxis();
a.scalarMul(SPEED);
getCurrent().translate(a);
CameraUtil.moveCamera(getWorld().getCamera(), current);
}
if (isDown()) {
SimpleVector a = getCurrent().getZAxis();
a.scalarMul(-SPEED);
getCurrent().translate(a);
CameraUtil.moveCamera(getWorld().getCamera(), current);
}
if (isLeft()) {
getCurrent().rotateY(ROTATE_ANGLE);
}
if (isRight()) {
getCurrent().rotateY(-ROTATE_ANGLE);
}
} else {
System.out.println("current is null");
}
}
public Object3D getCurrent() {
return current;
}
public void setCurrent(Object3D current) {
this.current = current;
}
public void notifyFPS(int fps) {
lastFPS = fps;
}
}
package com.foo.game.rearview;
import java.awt.Color;
import java.awt.Component;
import java.awt.Graphics;
import java.util.Enumeration;
import com.foo.game.test.Pathbuilder;
import com.foo.game.util.AbstractEntity;
import com.foo.game.util.CameraUtil;
import com.foo.game.util.FPSListener;
import com.foo.game.util.LightUtil;
import com.foo.game.util.PlaneUtil;
import com.foo.game.util.SimpleGame;
import com.threed.jpct.Camera;
import com.threed.jpct.FrameBuffer;
import com.threed.jpct.IRenderer;
import com.threed.jpct.Object3D;
import com.threed.jpct.Primitives;
import com.threed.jpct.SimpleVector;
import com.threed.jpct.World;
public class RearViewGame extends SimpleGame implements FPSListener{
public RearViewGame(Component owner, Pathbuilder builder) throws Exception {
super(owner, builder);
init();
}
private static final long serialVersionUID = 1L;
private static final float ROTATE_ANGLE = (float) Math.toRadians(20.0);
private static final float SPEED = 25.0f;
private Object3D current = null;
private int lastFPS = 0;
public void init() throws Exception {
addTexture("rocks", "textures/rocks.jpg");
addTexture("floor", "textures/floor.jpg");
AbstractEntity[] list = new AbstractEntity[3];
list[0] = new AbstractEntity(Primitives.getCube(20));
setCurrent(list[0]);
// remove from the floor, decrease
list[0].translate(0, -20, 0);
list[2] = new AbstractEntity(Primitives.getCylinder(50));
list[2].translate(0, -50, -100);
list[1] = new AbstractEntity(PlaneUtil.getPlane("floor", 20, 300));
addObjects(list);
CameraUtil.setCameraLookingFromTop(getCamera(), list[0]);
LightUtil.addDefaultLight(getWorld());
createRearViewWorld();
addFPSListener(this);
}
World rearViewWorld = new World();
FrameBuffer rearViewBuffer;
private void createRearViewWorld() {
rearViewWorld = new World();
Enumeration objects = getWorld().getObjects();
while (objects.hasMoreElements()) {
AbstractEntity element = (AbstractEntity) objects.nextElement();
AbstractEntity clone = new AbstractEntity( element.cloneObject());
[b] element.addSyncObject(clone);
[/b] rearViewWorld.addObject(clone);
}
rearViewWorld.buildAllObjects();
LightUtil.addDefaultLight(rearViewWorld);
Camera c = rearViewWorld.getCamera();
c.setPosition(50, -100, 50);
c.lookAt(SimpleVector.ORIGIN);
[b]rearViewBuffer = new FrameBuffer(300, 100,
FrameBuffer.SAMPLINGMODE_NORMAL);[/b]
rearViewBuffer.enableRenderer(IRenderer.RENDERER_SOFTWARE);
Enumeration o = rearViewWorld.getObjects();
while (o.hasMoreElements()) {
Object3D element = (Object3D) o.nextElement();
System.out.println(element.getCenter());
}
}
private void renderRearView() {
rearViewBuffer.clear();
rearViewWorld.renderScene(rearViewBuffer);
rearViewWorld.draw(rearViewBuffer);
rearViewBuffer.update();
}
[b] public void afterPaintComponent(Graphics g) {
[/b]
rearViewBuffer.display(g, 30, 30);
g.setColor(Color.WHITE);
g.drawRect(30, 30, 300, 100);
g.drawString(Integer.toString(lastFPS) + "FPS", 15, 15);
}
// TODO move the camera with the object
public void loop() {
renderRearView();
if (getCurrent() != null) {
if (isUp()) {
SimpleVector a = getCurrent().getZAxis();
a.scalarMul(SPEED);
getCurrent().translate(a);
CameraUtil.moveCamera(getWorld().getCamera(), current);
}
if (isDown()) {
SimpleVector a = getCurrent().getZAxis();
a.scalarMul(-SPEED);
getCurrent().translate(a);
CameraUtil.moveCamera(getWorld().getCamera(), current);
}
if (isLeft()) {
getCurrent().rotateY(ROTATE_ANGLE);
}
if (isRight()) {
getCurrent().rotateY(-ROTATE_ANGLE);
}
} else {
System.out.println("current is null");
}
}
public Object3D getCurrent() {
return current;
}
public void setCurrent(Object3D current) {
this.current = current;
}
public void notifyFPS(int fps) {
lastFPS = fps;
}
}