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

>

[12833 byte] By [America70a] at [2007-11-26 15:43:38]
# 1
You don't specify how your projection could behave.Is it a sort of shadow implementation?
sigua at 2007-7-8 22:02:36 > top of Java-index,Security,Cryptography...