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

Reply via email to