Ich habe folgendes Problem... ich brauche für eine Anwendung die Möglichkeit selbsterstellte (nicht wirklich komplexe)
Shape3D - Objekte zu mappen. Leider verstehe ich nicht wirklich wie das mit den Texturkoordinaten funktioniert. Ich hab im folgenden Programm einfach eine Shape3D-Fläche erzeugt auf der ich zB. das unten angegebene Image _komplett_ draufhaben möchte und nicht 8 kleine Bilder so wie es momentan ist... Kann mir da vielleicht jemand helfen?
http://img33.exs.cx/img33/7672/logo53.jpg
Shape3D - Objekte zu mappen. Leider verstehe ich nicht wirklich wie das mit den Texturkoordinaten funktioniert. Ich hab im folgenden Programm einfach eine Shape3D-Fläche erzeugt auf der ich zB. das unten angegebene Image _komplett_ draufhaben möchte und nicht 8 kleine Bilder so wie es momentan ist... Kann mir da vielleicht jemand helfen?
http://img33.exs.cx/img33/7672/logo53.jpg
Code:
import javax.swing.JFrame;
import java.awt.*;
import com.sun.j3d.utils.universe.*;
import com.sun.j3d.utils.image.*;
import com.sun.j3d.utils.geometry.*;
import com.sun.j3d.utils.behaviors.mouse.*;
import javax.media.j3d.*;
import javax.vecmath.*;
public class Test3D extends JFrame
{
private SimpleUniverse u = null;
public Test3D()
{
setSize (400, 400);
setLocationRelativeTo (null);
setDefaultCloseOperation (EXIT_ON_CLOSE);
Container f = getContentPane();
GraphicsConfiguration config = SimpleUniverse.getPreferredConfiguration();
Canvas3D c = new Canvas3D(config);
f.add(c);
u = new SimpleUniverse(c);
setViewPosition();
u.addBranchGraph(createSceneGraph());
setVisible(true);
}
void setViewPosition()
{
TransformGroup viewTG;
Transform3D viewT3D = new Transform3D();
viewTG = u.getViewingPlatform().getViewPlatformTransform();
viewTG.getTransform(viewT3D);
viewT3D.setTranslation(new Vector3f(0f,0f,8f));
viewTG.setTransform(viewT3D);
}
public BranchGroup createSceneGraph()
{
BranchGroup root = new BranchGroup();
TransformGroup imageTG = new TransformGroup();
Appearance imageAppearance = new Appearance();
Shape3D complexObj;
imageAppearance.setTexture((new TextureLoader("logo.jpg",null)).
getTexture());
imageAppearance.setTexCoordGeneration(new TexCoordGeneration
(TexCoordGeneration.OBJECT_LINEAR,TexCoordGeneration.TEXTURE_COORDINATE_2));
imageAppearance.setTextureAttributes(new TextureAttributes
(TextureAttributes.REPLACE,new Transform3D(),new Color4f(),
TextureAttributes.NICEST));
complexObj = createShape3D();
complexObj.setAppearance(imageAppearance);
imageTG.addChild(complexObj);
imageTG.setCapability(TransformGroup.ALLOW_TRANSFORM_READ);
imageTG.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
root.addChild(imageTG);
MouseRotate mr = new MouseRotate(imageTG);
mr.setSchedulingBounds(new BoundingSphere(new Point3d(),100000));
root.addChild(mr);
root.compile();
return root;
}
Shape3D createShape3D()
{
Shape3D S3D = new Shape3D();
GeometryInfo GInfo;
NormalGenerator NormGen = new NormalGenerator();
Point3f[] CoordArr = new Point3f[4];
int[] Vind = new int[4];
CoordArr[0] = new Point3f( -2f, 0f, 0f);
CoordArr[1] = new Point3f( 2f, 0f, 0f);
CoordArr[2] = new Point3f( 2f, 2f, 0f);
CoordArr[3] = new Point3f( -2f, 2f, 0f);
Vind[0]=0; Vind[1]=1; Vind[2]= 2;
Vind[3]=3;
GInfo = new GeometryInfo(GeometryInfo.QUAD_ARRAY);
GInfo.setCoordinates(CoordArr);
GInfo.setCoordinateIndices(Vind);
NormGen.generateNormals(GInfo);
S3D.addGeometry(GInfo.getGeometryArray());
return S3D;
}
public static void main(String[] args)
{
new Test3D();
}
}