Try this..
>Date: Fri, 03 May 2002 09:46:21 +0200
>From: "Sch�fer, Peter" <[EMAIL PROTECTED]>
>Subject: Re: [JAVA3D] TextureCubeMap
>To: [EMAIL PROTECTED]
>MIME-version: 1.0
>Delivered-to: [EMAIL PROTECTED]
>
>>
>> Hi Rob
>>
>> > Does anyone have a quick-and-dirty demo of the new TextureCubeMap
>> > feature ? I was hoping that there would be a demo in the
>>
>> Yes I've got some.
>>
>
>Great ;-)
>
>but where are they ?
>
>> > new J3D 1.3 beta 2 but I couldn't find one when I looked.
>>
>> What new Version? Wow this comes with a surpise, starting webbrowser
>> surfing to java.sun.com ......
>>
>> EOF,
>> J.D.
>>
>> --
>> Explore SRT with the help of Java3D
>> (http://wwwvis.informatik.uni-stuttgart.de/relativity/minkowski)
>> (http://www.antiflash.net/java3d/relativity (mirror)
>>
>> ==============================================================
>> =============
>> To unsubscribe, send email to [EMAIL PROTECTED] and
>> include in the body
>> of the message "signoff JAVA3D-INTEREST". For general help,
>> send email to
>> [EMAIL PROTECTED] and include in the body of the message "help".
>>
>
>===========================================================================
>To unsubscribe, send email to [EMAIL PROTECTED] and include in the body
>of the message "signoff JAVA3D-INTEREST". For general help, send email to
>[EMAIL PROTECTED] and include in the body of the message "help".
/*
* @(#)TextureCubeMapTest.java 1.14 98/04/13 13:07:16
*
* Copyright (c) 1996-1998 Sun Microsystems, Inc. All Rights Reserved.
*
* Sun grants you ("Licensee") a non-exclusive, royalty free, license to use,
* modify and redistribute this software in source and binary code form,
* provided that i) this copyright notice and license appear on all copies of
* the software; and ii) Licensee does not utilize the software in a manner
* which is disparaging to Sun.
*
* This software is provided "AS IS," without a warranty of any kind. ALL
* EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING ANY
* IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
* NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN AND ITS LICENSORS SHALL NOT BE
* LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING
* OR DISTRIBUTING THE SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR ITS
* LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT,
* INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER
* CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF THE USE OF
* OR INABILITY TO USE SOFTWARE, EVEN IF SUN HAS BEEN ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGES.
*
* This software is not designed or intended for use in on-line control of
* aircraft, air traffic, aircraft navigation or aircraft communications; or in
* the design, construction, operation or maintenance of any nuclear
* facility. Licensee represents and warrants that it will not use or
* redistribute the Software for such purposes.
*/
import com.sun.j3d.utils.behaviors.mouse.*;
import java.applet.*;
import java.awt.*;
import java.io.*;
import java.net.*;
import java.awt.BorderLayout;
import java.awt.event.*;
import javax.media.j3d.*;
import javax.vecmath.*;
import com.sun.j3d.utils.universe.*;
import com.sun.j3d.utils.image.TextureLoader;
import com.sun.j3d.utils.applet.MainFrame;
import java.awt.image.*;
import java.awt.color.ColorSpace;
import com.sun.j3d.utils.geometry.Sphere;
public class TextureCubeMapTest extends Applet implements ItemListener {
TexCoordGeneration genEyeLinear;
TexCoordGeneration genObjectLinear;
TexCoordGeneration genSphereMap;
TexCoordGeneration genNormalMap;
TexCoordGeneration genReflectionMap;
Checkbox cbEyeLinear;
Checkbox cbObjectLinear;
Checkbox cbSphereMap;
Checkbox cbNormalMap;
Checkbox cbReflectionMap;
Appearance cubeAppearance;
TextureUnitState [] texture;
/**
* Create the scenegraph.
*/
public BranchGroup createSceneGraph() {
// Define colors
Color3f white = new Color3f(1.0f, 1.0f, 1.0f);
Color3f black = new Color3f(0.0f, 0.0f, 0.0f);
Color3f red = new Color3f(0.80f, 0.20f, 0.2f);
Color3f ambientRed = new Color3f(0.2f, 0.05f, 0.0f);
Color3f ambient = new Color3f(0.6f, 0.6f, 0.6f);
Color3f diffuse = new Color3f(0.7f, 0.7f, 0.7f);
Color3f specular = new Color3f(0.7f, 0.7f, 0.7f);
Color3f bgColor = new Color3f(0.05f, 0.05f, 0.2f);
// Create the branch group
BranchGroup branchGroup = new BranchGroup();
// Create a Transformgroup to scale all objects so they
// appear in the scene.
TransformGroup objScale = new TransformGroup();
Transform3D t3d = new Transform3D();
t3d.setScale(0.4);
objScale.setTransform(t3d);
branchGroup.addChild(objScale);
// Create the bounding leaf node
BoundingSphere bounds =
new BoundingSphere(new Point3d(0.0,0.0,0.0), 100.0);
BoundingLeaf boundingLeaf = new BoundingLeaf(bounds);
objScale.addChild(boundingLeaf);
// Create the ambient light
AmbientLight ambLight = new AmbientLight(white);
ambLight.setInfluencingBounds(bounds);
objScale.addChild(ambLight);
// Create the directional light
Vector3f dir = new Vector3f(-1.0f, -1.0f, -1.0f);
DirectionalLight dirLight = new DirectionalLight(white, dir);
dirLight.setInfluencingBounds(bounds);
objScale.addChild(dirLight);
// Create the Cube appearance node
Material cubeMaterial =
new Material(ambient, black, white, white, 75.0f);
cubeMaterial.setLightingEnable(true);
cubeAppearance = new Appearance();
cubeAppearance.setMaterial(cubeMaterial);
// Adding Environment mapping:
Vector4f planeS = new Vector4f(1.0f, 0.0f, 0.0f, 1.0f);
Vector4f planeT = new Vector4f(0.0f, 1.0f, 0.0f, 1.0f);
Vector4f planeR = new Vector4f(0.0f, 0.0f, 0.0f, 0.0f);
genEyeLinear = new TexCoordGeneration(TexCoordGeneration.EYE_LINEAR,
TexCoordGeneration.TEXTURE_COORDINATE_2,
planeS,
planeT,
planeR);
genObjectLinear = new TexCoordGeneration(TexCoordGeneration.OBJECT_LINEAR,
TexCoordGeneration.TEXTURE_COORDINATE_2,
planeS,
planeT,
planeR);
genSphereMap = new TexCoordGeneration(TexCoordGeneration.SPHERE_MAP,
TexCoordGeneration.TEXTURE_COORDINATE_3,
planeS,
planeT,
planeR);
genNormalMap = new TexCoordGeneration(TexCoordGeneration.NORMAL_MAP,
TexCoordGeneration.TEXTURE_COORDINATE_3);
genReflectionMap = new TexCoordGeneration(
TexCoordGeneration.REFLECTION_MAP,
TexCoordGeneration.TEXTURE_COORDINATE_3);
texture = createTexture();
cubeAppearance.setTextureUnitState(texture);
// Create the white appearance node
Material whiteMaterial =
new Material(ambient, black, diffuse, specular, 75.0f);
whiteMaterial.setLightingEnable(true);
Appearance whiteAppearance = new Appearance();
whiteAppearance.setMaterial(whiteMaterial);
// Create the transform node
TransformGroup transformGroup = new TransformGroup();
transformGroup.setCapability(TransformGroup.ALLOW_TRANSFORM_READ);
transformGroup.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
transformGroup.addChild(new Sphere(0.8f, cubeAppearance));
objScale.addChild(transformGroup);
// Create the drag behavior node
MouseRotate behavior = new MouseRotate();
behavior.setTransformGroup(transformGroup);
transformGroup.addChild(behavior);
behavior.setSchedulingBounds(bounds);
// Create the zoom behavior node
MouseZoom behavior2 = new MouseZoom();
behavior2.setTransformGroup(transformGroup);
transformGroup.addChild(behavior2);
behavior2.setSchedulingBounds(bounds);
// Create the zoom behavior node
MouseTranslate behavior3 = new MouseTranslate();
behavior3.setTransformGroup(transformGroup);
transformGroup.addChild(behavior3);
behavior3.setSchedulingBounds(bounds);
branchGroup.setCapability(BranchGroup.ALLOW_DETACH);
// Let Java 3D perform optimizations on this scene graph.
branchGroup.compile();
return branchGroup;
}
TextureUnitState[] createTexture() {
// create texture cube map
Color3f cubeColor[] = new Color3f[6];
cubeColor[0] = new Color3f(1.0f, 0.0f, 0.0f);
cubeColor[1] = new Color3f(0.0f, 1.0f, 0.0f);
cubeColor[2] = new Color3f(0.0f, 0.0f, 1.0f);
cubeColor[3] = new Color3f(1.0f, 1.0f, 0.0f);
cubeColor[4] = new Color3f(1.0f, 0.0f, 1.0f);
cubeColor[5] = new Color3f(0.0f, 1.0f, 1.0f);
int width = 16;
int height = 16;
int numFaces = 6;
TextureCubeMap texCubeMap = new TextureCubeMap(Texture.BASE_LEVEL,
Texture.RGB, width);
ColorSpace cs = ColorSpace.getInstance(ColorSpace.CS_sRGB);
int[] nBits = {8, 8, 8};
ComponentColorModel colorModel =
new ComponentColorModel(cs, nBits, false, false, Transparency.OPAQUE
, 0);
for (int face = 0; face < numFaces; face++) {
WritableRaster raster =
colorModel.createCompatibleWritableRaster(width, height);
BufferedImage image =
new BufferedImage(colorModel, raster, false, null);
byte[] byteData = ((DataBufferByte)raster.getDataBuffer()).getData
();
int k = 0;
for (int i = 0; i < height; i++){
for (int j = 0;j < width; j++){
byteData[k++] = (byte)(255 * cubeColor[face].x);
byteData[k++] = (byte)(255 * cubeColor[face].y);
byteData[k++] = (byte)(255 * cubeColor[face].z);
}
}
ImageComponent2D imgCmp = new ImageComponent2D(
ImageComponent.FORMAT_RGB, width, height);
imgCmp.set(image);
texCubeMap.setImage(0, face, imgCmp);
}
texCubeMap.setCapability(Texture.ALLOW_ENABLE_WRITE);
texCubeMap.setCapability(Texture.ALLOW_IMAGE_WRITE);
texCubeMap.setEnable(true);
// create the basic texture
Texture2D tex = new Texture2D(Texture.BASE_LEVEL,
Texture.RGB, width, height);
WritableRaster raster =
colorModel.createCompatibleWritableRaster(width, height);
BufferedImage image =
new BufferedImage(colorModel, raster, false, null);
byte[] byteData = ((DataBufferByte)raster.getDataBuffer()).getData
();
int k = 0;
int cc;
for (int i = 0; i < height; i++){
for (int j = 0;j < width; j++){
if (((i + j) % 2) == 0)
cc = 0;
else
cc = 0x7f;
byteData[k++] = (byte)(cc);
byteData[k++] = (byte)(cc);
byteData[k++] = (byte)(cc);
}
}
ImageComponent2D imgCmp = new ImageComponent2D(
ImageComponent.FORMAT_RGB, width, height);
imgCmp.set(image);
tex.setImage(0, imgCmp);
tex.setCapability(Texture.ALLOW_ENABLE_WRITE);
tex.setCapability(Texture.ALLOW_IMAGE_WRITE);
tex.setEnable(true);
TextureAttributes texAttrs = new TextureAttributes();
texAttrs.setTextureMode(TextureAttributes.MODULATE);
TextureUnitState texUnitState[] = new TextureUnitState[2];
texUnitState[0] = new TextureUnitState(tex, texAttrs, genObjectLinear);
texUnitState[1] = new TextureUnitState(texCubeMap, texAttrs, genNormalMap);
texUnitState[1].setCapability(TextureUnitState.ALLOW_STATE_WRITE);
return texUnitState;
}
/**
* Calls the various methods necessary to initialize the
* program.
*/
public void init() {
// Set the layout manager
setLayout(new BorderLayout());
// Create the 3D canvas
Canvas3D canvas = new Canvas3D(null);
add("Center", canvas);
System.out.println("textureCubeMapAvailable= " +
((Boolean)canvas.queryProperties().get("textureCubeMapAvailable")).booleanValue());
// Create the scene branch graph
BranchGroup scene = createSceneGraph();
// Create the Universe, the Locale, and the view branch graph
SimpleUniverse u = new SimpleUniverse(canvas);
// This will move the ViewPlatform back a bit so the
// objects in the scene can be viewed.
u.getViewingPlatform().setNominalViewingTransform();
u.addBranchGraph(scene);
Panel panel = new Panel();
CheckboxGroup cbg = new CheckboxGroup();
cbEyeLinear = new Checkbox("Eye Linear", false, cbg);
cbObjectLinear = new Checkbox("Object Linear", false, cbg);
cbSphereMap = new Checkbox("Sphere Map", false, cbg);
cbNormalMap = new Checkbox("Normal Map", true, cbg);
cbReflectionMap = new Checkbox("Reflection Map", false, cbg);
panel.add(new Label("CubeMap TexCoordGeneration mode:"));
panel.add(cbEyeLinear);
panel.add(cbObjectLinear);
panel.add(cbSphereMap);
panel.add(cbNormalMap);
panel.add(cbReflectionMap);
cbEyeLinear.addItemListener(this);
cbObjectLinear.addItemListener(this);
cbSphereMap.addItemListener(this);
cbNormalMap.addItemListener(this);
cbReflectionMap.addItemListener(this);
add("South", panel);
}
public void itemStateChanged(ItemEvent e) {
if (e.getSource() == cbEyeLinear) {
System.out.println("Set to Eye Linear");
texture[1].setTexCoordGeneration(genEyeLinear);
} else if (e.getSource() == cbObjectLinear) {
System.out.println("Set to Object Linear");
texture[1].setTexCoordGeneration(genObjectLinear);
} else if (e.getSource() == cbSphereMap) {
System.out.println("Set to Sphere Map");
texture[1].setTexCoordGeneration(genSphereMap);
} else if (e.getSource() == cbNormalMap) {
System.out.println("Set to NormalMap");
texture[1].setTexCoordGeneration(genNormalMap);
} else if (e.getSource() == cbReflectionMap) {
System.out.println("Set to ReflectionMap");
texture[1].setTexCoordGeneration(genReflectionMap);
}
}
public static void main(String[] args) {
new MainFrame(new TextureCubeMapTest(), 800, 800);
}
}