Hi Alessandro and Ben,
I have fixed the problem. Later I will post the code.
Thanks a lot for your help. :)
Ding
> Hi Alessandro,
>
> Thanks a lot. I did combine the several images/icons to be one now.
>
> When I use this code to modify the sample code, it suppose to work. And I
> can compile, but once run, show the:
>
> "Exception in thread "Thread-2" java.lang.NullPointerException"
>
> I think the problem is here: "texBufferedImage" should be the combined
> image which is retured from the main().
>
> Texture tex = new TextureLoader(java.awt.image.BufferedImage
> texBufferedImage).getTexture();
>
> According to the TextureLoader, it should be able to construct the object
> through the "texBufferedImage", right ?
>
> Below is the code:
> ===========================================================================
> import java.awt.font.*;
> import java.awt.geom.*;
> import java.awt.image.*;
> import java.io.*;
> import java.net.*;
> import javax.imageio.*;
> import javax.swing.*;
>
> import java.applet.Applet;
> import java.awt.*;
> import java.awt.event.*;
> import com.sun.j3d.utils.applet.MainFrame;
> import com.sun.j3d.utils.universe.*;
> import com.sun.j3d.utils.image.TextureLoader;
> import com.sun.j3d.utils.geometry.Box;
> import javax.media.j3d.*;
> import javax.vecmath.*;
>
> public class TextureImage extends Applet {
>
> private java.net.URL texImage = null;
> // new added
> private BufferedImage texBufferedImage = null;
> ImageComponent2D ic;
> private SimpleUniverse u = null;
>
> public BranchGroup createSceneGraph() {
> // Create the root of the branch graph
> BranchGroup objRoot = new BranchGroup();
>
> // Create the transform group node and initialize it to the
> // identity. Enable the TRANSFORM_WRITE capability so that
> // our behavior code can modify it at runtime. Add it to the
> // root of the subgraph.
> TransformGroup objTrans = new TransformGroup();
> objTrans.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
> objRoot.addChild(objTrans);
>
> // Create appearance object for textured cube
> Appearance app = new Appearance();
> // Texture tex = new TextureLoader(texImage, this).getTexture();
> Texture tex = new TextureLoader(java.awt.image.BufferedImage
> texBufferedImage).getTexture();
> // Added new one
>
> //ImageComponent2D ic = new ImageComponent2D(ImageComponent.FORMAT_RGB,
> texBufferedImage);
> //ImageComponent2D ic = null ;
> // ic.set(texBufferedImage);
>
>
>
> //Texture2D myTexture = new Texture2D();
> // myTexture.setImage(0, imgtest02);
> // app.setTexture(myTexture);
>
> app.setTexture(tex);
> TextureAttributes texAttr = new TextureAttributes();
> texAttr.setTextureMode(TextureAttributes.MODULATE);
> app.setTextureAttributes(texAttr);
>
> // Create textured cube and add it to the scene graph.
> Box textureCube = new Box(0.4f, 0.4f, 0.4f,
> Box.GENERATE_TEXTURE_COORDS, app);
> objTrans.addChild(textureCube);
>
> // Create a new Behavior object that will perform the desired
> // operation on the specified transform object and add it into
> // the scene graph.
> 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);
>
> // Have Java 3D perform optimizations on this scene graph.
> objRoot.compile();
>
> return objRoot;
> }
>
> public TextureImage() {
> }
>
> // public TextureImage(java.net.URL url) {
> // texImage = url;
> // }
>
> // New added
> public TextureImage(BufferedImage img) {
> texBufferedImage = img;
>
> ImageComponent2D ic = new ImageComponent2D(ImageComponent.FORMAT_RGB,
> texBufferedImage);
> // BufferedImage imgtest = ic.getImage();
> BufferedImage imgtest = null;
>
> if (imgtest == null)
> {
> System.out.println("I am here");
> } ;
> imgtest = ic.getImage();
> if (imgtest == null)
> {
> System.out.println("not get the image to here");
> }
> else{
> System.out.println("then get the image to here");
> }
> ;
> }
> // public BufferedImage TextureBufferedImage(BufferedImage img) {
> // texBufferedImage = img;
> // }
>
> public void init() {
> if (texImage == null) {
> // the path to the image for an applet
> try {
> texImage = new java.net.URL(getCodeBase().toString() +
> "../images/1.jpg");
> }
> catch (java.net.MalformedURLException ex) {
> System.out.println(ex.getMessage());
> System.exit(1);
> }
> }
> setLayout(new BorderLayout());
> GraphicsConfiguration config =
> SimpleUniverse.getPreferredConfiguration();
>
> Canvas3D c = new Canvas3D(config);
> add("Center", c);
>
> // Create a simple scene and attach it to the virtual universe
> BranchGroup scene = createSceneGraph();
> u = new SimpleUniverse(c);
>
> // This will move the ViewPlatform back a bit so the
> // objects in the scene can be viewed.
> u.getViewingPlatform().setNominalViewingTransform();
>
> u.addBranchGraph(scene);
> }
>
> public void destroy() {
> u.cleanup();
> }
>
> //
> // The following allows TextureImage to be run as an application
> // as well as an applet
> //
> // public static void main(String[] args) {
> public static void main(String[] args) throws IOException {
> java.net.URL url = null;
> if (args.length > 0) {
> try {
> url = new java.net.URL("file:" + args[0]);
> }
> catch (java.net.MalformedURLException ex) {
> System.out.println(ex.getMessage());
> System.exit(1);
> }
> }
> else {
> // the path to the image for an application
> try {
> url = new java.net.URL("file:../images/1.jpg");
> }
> catch (java.net.MalformedURLException ex) {
> System.out.println(ex.getMessage());
> System.exit(1);
> }
> }
> // New added
> URL[] urls = {
> // new URL("file:/E:/3D/icon_example/images/1.jpg"),
> new URL("file:../images/1.jpg"),
> new URL("file:../images/2.jpg"),
> new URL("file:../images/3.jpg"),
> };
>
>
> BufferedImage[] images = {
>
> ImageIO.read(urls[0]),
> ImageIO.read(urls[1]),
> ImageIO.read(urls[2]),
> };
>
>
> int w = images[0].getWidth(), h = images[0].getHeight();
>
> BufferedImage total = new BufferedImage(4*w, 4*h,
> BufferedImage.TYPE_INT_RGB);
> Graphics2D g = total.createGraphics();
> g.drawImage(images[0], 0, 0, null);
> g.drawImage(images[1], w, 0, null);
> g.drawImage(images[2], 0, 2*h, null);
> // new MainFrame(new TextureImage(url), 256, 256);
> new MainFrame(new TextureImage(total), 256, 256);
> }
>
> }
>
>
>
>> Check at JavaAlmanac http://www.javaalmanac.com/
>> about same sample codes (search for image/images etc)
>>
>> Alessandro Borges <[EMAIL PROTECTED]> wrote:
>> Hi, Ding
>>
>> By using TextureUnitState you can mix your textures at runtime and show
>> then. Of course a alpha channel can be nice, but you can create a method
>> to add alpha channel , as well mix alpha mask
>>
>> As Ben told, you can use Java2D to mix images into a single one. And
>> with
>> this new image (actually a BufferedImage).
>>
>> image1 + image2 + imagex -->
>> single BufferedImage -> ImageComponent2D -> Texture2D
>>
>> Alessandro
>>
>> "H. Ding" <[EMAIL PROTECTED]> wrote:
>
> ===========================================================================
> 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".