Projection of 3D-object
Hi, guys. I need your advice. I need a projection of my 3D-object. I can rotate it and my projection will be changing. How to do it? I think it's neseccery to use BEHAVIOR class but I did not find out any examples of it. Can you help me?
Thanks in advance.
import com.sun.j3d.utils.universe.SimpleUniverse;
import javax.media.j3d.BranchGroup;
import javax.media.j3d.TransformGroup;
import javax.media.j3d.Transform3D;
import com.sun.j3d.utils.geometry.ColorCube;
import com.sun.j3d.utils.geometry.*;
import javax.vecmath.*;
import javax.media.j3d.LineStripArray;
import javax.media.j3d.TriangleFanArray;
import javax.media.j3d.Geometry;
import javax.media.j3d.Appearance;
import javax.media.j3d.Shape3D;
import javax.media.j3d.BoundingSphere;
import com.sun.j3d.utils.behaviors.mouse.MouseRotate;
import javax.media.j3d.LineStripArray;
publicclass gem{
//parameters======================================================
float r = 0.3f;
int N = 40;
int s=10;
//yge ne parameters===============================================
privatefloat level(int c){
float m=0;
if((c>1)||(c<s)){
for(int i=2; i><=c;i++){
m=m+((r-m)/3);
}}
if(c==s){m=r;}
return m;
}
privatefloat radius(int v){
float re,p;
p=level(v);
re=(float)(Math.sqrt((r*r)-(p*p)));
return re;
}
//================================================================
privatefloat getnX(int l,int n){
double a = 2.0 * Math.PI / (N - 1) * n;
float hj=(float) (radius(l) * Math.cos(a));
return hj;
}
privatefloat getnY(int l,int n){
double a = 2.0 * Math.PI / (N - 1) * n;
float hg=(float) (radius(l) * Math.sin(a));
return hg;
}
//=================================================================
private Point3f up(int e,int n){
float x=getnX(e+1,n);
float y=getnY(e+1,n);
float z=level(e+1);
Point3f point=new Point3f(x,y,z);
return point;
}
private Point3f down(int e,int n){
float x=getnX(e-1,n);
float y=getnY(e-1,n);
float z=level(e-1);
Point3f point=new Point3f(x,y,z);
return point;
}
private Point3f right(int e,int n){
float x=getnX(e,n+1);
float y=getnY(e,n+1);
float z=level(e);
Point3f point=new Point3f(x,y,z);
return point;
}
private Point3f left(int e,int n){
float x=getnX(e,n-1);
float y=getnY(e,n-1);
float z=level(e);
Point3f point=new Point3f(x,y,z);
return point;
}
private Point3f upright(int e,int n){
float x=getnX(e+1,n+1);
float y=getnY(e+1,n+1);
float z=level(e+1);
Point3f point=new Point3f(x,y,z);
return point;
}
private Point3f upleft(int e,int n){
float x=getnX(e+1,n-1);
float y=getnY(e+1,n-1);
float z=level(e+1);
Point3f point=new Point3f(x,y,z);
return point;
}
private Point3f downright(int e,int n){
float x=getnX(e-1,n+1);
float y=getnY(e-1,n+1);
float z=level(e-1);
Point3f point=new Point3f(x,y,z);
return point;
}
private Point3f downleft(int e,int n){
float x=getnX(e-1,n-1);
float y=getnY(e-1,n-1);
float z=level(e-1);
Point3f point=new Point3f(x,y,z);
return point;
}
//==============================================================
private Geometry approx(){
LineStripArray tfa;
int totalN=N*(19);
Point3f coords[]=new Point3f[(s-2)*totalN];
int stripCounts[]=newint[s-2];
for(int t=0;t<=(s-3);t++){
stripCounts[t]=totalN;
}
for(int e=2;e<s;e++){
for(int n=0;n<N;n++){
int k=n*19;
int f=k+(e-2)*totalN;
float x=getnX(e,n);
float y=getnY(e,n);
float z=level(e);
coords[f+ 0]=new Point3f(up(e,n));
coords[f+ 1]=new Point3f(upright(e,n));
coords[f+ 2]=new Point3f(right(e,n));
coords[f+ 3]=new Point3f(downright(e,n) );
coords[f+ 4]=new Point3f(down(e,n));
coords[f+ 5]=new Point3f(downleft(e,n));
coords[f+ 6]=new Point3f(left(e,n));
coords[f+ 7]=new Point3f(upleft(e,n));
coords[f+ 8]=new Point3f(up(e,n));
coords[f+9]=new Point3f(x,y,z);
coords[f+10]=new Point3f(up(e,n));
coords[f+11]=new Point3f(x,y,z);
coords[f+12]=new Point3f(right(e,n));
coords[f+13]=new Point3f(x,y,z);
coords[f+14]=new Point3f(down(e,n));
coords[f+15]=new Point3f(x,y,z);
coords[f+16]=new Point3f(left(e,n));
coords[f+17]=new Point3f(x,y,z);
coords[f+18]=new Point3f(up(e,n));
}
}
tfa =new LineStripArray((s-2)*totalN,
LineStripArray.COORDINATES, stripCounts);
tfa.setCoordinates(0, coords);
return tfa;
}
public gem()
{
BoundingSphere bounds=new BoundingSphere(new
Point3d(0.0, 0.0,0.0), 100.0);
SimpleUniverse universe =new SimpleUniverse();
BranchGroup group =new BranchGroup();
TransformGroup TG=new TransformGroup();
Appearance app=new Appearance();
Geometry geom=approx();
Shape3D shape=new Shape3D();
shape.setAppearance(app);
shape.setGeometry(geom);
TG.setCapability(TransformGroup.ALLOW_TRANSFORM_READ);
TG.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
MouseRotate mouseSpin =new MouseRotate();
mouseSpin.setTransformGroup(TG);
mouseSpin.setSchedulingBounds(bounds);
TG.addChild(shape);
group.addChild(TG);
group.addChild(mouseSpin);
universe.getViewingPlatform().setNominalViewingTransform();
universe.addBranchGraph(group);
}
publicstaticvoid main( String[] args ){
new gem();
}
}// end of the program
>

