1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141
|
package test;
import java.awt.Graphics2D;
import javax.imageio.ImageIO;
import javax.media.j3d.Alpha;
import javax.media.j3d.Appearance;
import javax.media.j3d.BoundingSphere;
import javax.media.j3d.BranchGroup;
import javax.media.j3d.Canvas3D;
import javax.media.j3d.ImageComponent2D;
import javax.media.j3d.RotationInterpolator;
import javax.media.j3d.TextureAttributes;
import javax.media.j3d.TextureCubeMap;
import javax.media.j3d.Transform3D;
import javax.media.j3d.TransformGroup;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.vecmath.Point3d;
import com.sun.j3d.utils.geometry.Box;
import com.sun.j3d.utils.universe.SimpleUniverse;
import java.awt.BorderLayout;
import java.awt.image.BufferedImage;
import java.io.File;
public class Cube extends JFrame
{
private static final long serialVersionUID = 1L;
private static final int IMG_WIDTH = 128;
private static final int IMG_HEIGHT = 128;
private ImageComponent2D[] myImages = new ImageComponent2D[6] ;
private SimpleUniverse universe = null;
private BranchGroup root = null;
public Cube()
{
process() ;
}
private void process()
{
créerImages();
getContentPane().setLayout(null);
setSize(300,300 );
JPanel canvasPanel = new JPanel();
canvasPanel.setLayout(new BorderLayout());
canvasPanel.setBounds(10, 11, 256, 256);
Canvas3D canvas = new Canvas3D(SimpleUniverse.getPreferredConfiguration());
universe = new SimpleUniverse(canvas);
universe.getViewingPlatform().setNominalViewingTransform();
root = new BranchGroup();
root = createSceneGraph();
universe.addBranchGraph(root);
canvasPanel.add(canvas);
getContentPane().add(canvasPanel);
this.setLocationRelativeTo(null);
setVisible(true);
}
private void créerImages()
{
File img = null;
ImageComponent2D[] myImages = new ImageComponent2D[6] ;
BufferedImage buffImg = null, newImg = null;
String[] photos = {"Steven.jpg", "Steven Paul.jpg","Steven.jpg", "Steven Paul.jpg", "Steven.jpg", "Steven Paul.jpg"};
String userdir = System.getProperties().getProperty("user.dir") ;
try
{
for (int i=0; i<myImages.length; i++)
{
img = new File(userdir + File.separator + "Images" + File.separator + photos[i] );
buffImg = ImageIO.read(img );
int type = buffImg.getType() == 0? BufferedImage.TYPE_INT_ARGB : buffImg.getType();
newImg = resizeImage(buffImg, type);
myImages[i] = new ImageComponent2D(ImageComponent2D.FORMAT_RGB,newImg );
}
}
catch (Exception ex)
{
System.out.println(ex.getMessage());
System.exit(1);
}
}
public BranchGroup createSceneGraph()
{
try
{
int mipmaplevel = 0;
TransformGroup objTrans = new TransformGroup();
objTrans.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
root.addChild(objTrans);
Appearance app = new Appearance();
TextureCubeMap tex = new TextureCubeMap(TextureCubeMap.MULTI_LEVEL_MIPMAP,TextureCubeMap.RGB, IMG_WIDTH);
tex.setImage(mipmaplevel, TextureCubeMap.POSITIVE_X, myImages[0]);
tex.setImage(mipmaplevel, TextureCubeMap.NEGATIVE_X, myImages[1]);
tex.setImage(mipmaplevel, TextureCubeMap.POSITIVE_Y, myImages[2]);
tex.setImage(mipmaplevel, TextureCubeMap.NEGATIVE_Y, myImages[3]);
tex.setImage(mipmaplevel, TextureCubeMap.POSITIVE_Z, myImages[4]);
tex.setImage(mipmaplevel, TextureCubeMap.NEGATIVE_Z, myImages[5]);
app.setTexture(tex);
TextureAttributes texAttr = new TextureAttributes();
texAttr.setTextureMode(TextureAttributes.MODULATE);
app.setTextureAttributes(texAttr);
Box textureCube = new Box(0.4f, 0.4f, 0.4f, Box.GENERATE_TEXTURE_COORDS, app);
objTrans.addChild(textureCube);
Transform3D yAxis = new Transform3D();
Alpha rotationAlpha = new Alpha(-1, Alpha.INCREASING_ENABLE, 0, 0, 4000, 0, 0, 0, 0, 0);
RotationInterpolator rotator = new RotationInterpolator(rotationAlpha, objTrans, yAxis, 0.0f, (float) Math.PI * 2.0f);
BoundingSphere bounds = new BoundingSphere(new Point3d(0.0, 0.0, 0.0), 100.0);
rotator.setSchedulingBounds(bounds);
objTrans.addChild(rotator);
// Je compile ma scene.
root.compile();
return root;
}
catch (Exception ex)
{
System.out.println(ex.toString()); System.exit(1);}
return null;
}
private static BufferedImage resizeImage(BufferedImage originalImage, int type)
{
BufferedImage resizedImage = new BufferedImage(IMG_WIDTH, IMG_HEIGHT, type);
Graphics2D g = resizedImage.createGraphics();
g.drawImage(originalImage, 0, 0, IMG_WIDTH, IMG_HEIGHT, null);
g.dispose();
return resizedImage;
}
public static void main(String[] args)
{
new Cube();
}
} |
Partager