Bonjour,

Je débute dans le monde 3D et j'ai essayé de m'inspirer de quelques exemples trouvés dans différents forums pour faire tourner un Cube, chaque face ayant des photos différentes (je n'ai trouvé que des exemples avec différentes couleurs sur chaque face).
Lorsque je lance mon programme (sous Eclipse pour l'instant), j'obtiens le message : Texture: mipmap image not set at level0

Je dois avouer que malgré mes recherche je n'ai pas vraiment trouvé d'explications simples sur le rapport entre la définition de TextureCubeMap et la façon d'ajouter des images.
Merci de me guider vers la bonne solution si possible. Mon code est ci-dessous.

gégé

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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();
	 }
}