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".

Reply via email to