13. november 2002 - 10:50
Der er
2 kommentarer og
1 løsning
3D cube med tekst...
Hej,
Er der nogen der kan lave en 3D-cube der kan rotere om sig selv. Det er planen at der skal være tekst på hver enkel kant af cuben. Oven i hatten skal det være muligt at ændre på teksten uden de store manøvrer...
Det er ikke krav til hvilket program den skal laves i, men jo simplere jo bedre :)
På forhånd tak
13. november 2002 - 23:09
#1
du kan lave det i Java.
----------------------------------------------
import java.applet.*;
import java.awt.*;
import java.io.*;
public class cube extends java.applet.Applet implements java.lang.Runnable {
//core 3d stuff
world3d w;
meshBuilder mb;
mesh3d obj;
matrix34 rot; //incremental rotation
Frame frm; //needed if we arent in an applet
Thread t; //needed if we ARE in an applet
boolean isinApplet=true;
//animation stuff
int delay; //to get a fixed framerate
double swing; //for the cameras swing
//to prevent flicker
Dimension offDimension; Image offImage; Graphics offGraphics;
//This lets the same program run as an applet and a java program
public static void main(String[] argv) {
cube c = new cube();
c.isinApplet=false;
c.frm = new Frame("3D-Cube");
c.frm.add("Center", c);
c.frm.show();
c.init();
c.start();
}
double toRadian(double n) {
return n * Math.PI/180.0;
}
public void init(){
int i=0;
//frame rate stuff
String str = getParameter("fps");
int fps = (str != null) ? Integer.parseInt(str) : 30;
delay = (fps > 0) ? (1000 / fps) : 100;
//create a cube
mb = new meshBuilder();
obj = mb.mkCube(50);
mb=null;
//set cubes colors
for(i = 0; i < obj.vertices(); i++)
obj.vertex(i).color=0x00FF0000;
obj.transform.setDirection(toRadian(45.0), 0.0, 1.0, 0.0);
obj.transform.setOffset(0.0, 0.0, 160.0);
rot = new matrix34(toRadian(3.0), 0.5, -1.0, 5.0);
//place it in the world
w = new world3d();
w.push(obj);
//set the worlds camera at 0,0,0 defaults fov to 70
w.camera.transform.setIdentity();
str = getParameter("fov");
w.camera.fov = toRadian((str != null) ? Integer.parseInt(str) : 70.0);
swing=0.0;
//start the damned applet already
t=new Thread(this);
t.start();
}
public void run(){
while(Thread.currentThread()==t) {
repaint();
try { // Delay for a while
Thread.sleep(delay);
} catch (InterruptedException e) {
break;
}
doframe(); //update world
}
}
public void stop() {
t = null;
}
public void paint(Graphics g) {
if (offImage != null) {
g.drawImage(offImage, 0, 0, null); // Paint offscreen image onto screen
}
}
public void update(Graphics g) {
Dimension d = size();
// Create offscreen image
if ((offGraphics == null)
|| (d.width != offDimension.width)
|| (d.height != offDimension.height)) {
offDimension = d;
offImage = createImage(d.width, d.height);
offGraphics = offImage.getGraphics();
}
// Paint current frame into offscreen image
offGraphics.setColor(getBackground());
offGraphics.fillRect(0, 0, d.width, d.height);
w.render(offGraphics, 0, 0, size().width, size().height);
g.drawImage(offImage, 0, 0, null); // Paint offscreen image onto screen
}
public void doframe() {
//rotate the object by applying rotation on it
obj.transform.mul(rot);
}
};
--------------------------------------------------
--> HB5v6