hello,
i'm still trying to understand the code you posted
Florin...
i tried to make some modifications,but i have a
problem and i couldn't solve it..in the code which is
attached to this email i played a bit with your code
Florin...i tried to make a triangle only using your
inner-face..but now i can see only inner side of
triangle,but i want to see all of triangle..i'm trying
to play with light to make outer face of triangle
also..but until now i couldn't do it..
if you Florin or anyone can help me for this i'll be
glad to him/her...

best wishes

ps:enclosed code
--- Florin Herinean <[EMAIL PROTECTED]> wrote:
> :) I coudn't stop myself, so here is a slightly
> modified scene which has a
> waving water flowing through the pipe.
>
> Of course, the model is very simplistic, no bouncing
> on the walls (infinite
> pipe model, laminar flow), water waves follows a
> strictly sinusoidal curve,
> no textures (pure geometry).
>
> Starting with that model, I hope I'll see posted by
> you a nice simulation of
> a fluid flowing through a non liniar pipe: turbulent
> / laminar flow
> depending on the Reynolds/Prandtl numbers, etc.
>
> Consider shape of the pipe, roughness of the pipe
> material, characteristics
> of the flowing fluid (water, milk), debit of the
> fluid, etc.
>
> Cheers,
>
> Florin
>
> -----Original Message-----
> From: Discussion list for Java 3D API
> [mailto:[EMAIL PROTECTED] Behalf Of
> demir sencer
> Sent: Donnerstag, 1. April 2004 17:18
> To: [EMAIL PROTECTED]
> Subject: Re: [JAVA3D] how to draw a 3D
> hollow-semi-cylinder HELP
>
>
> wow!!!
> thnx florin,it really looks interesting..
> i'll work on this all the nite i think..
>
> thnk u..
>
> --- Florin Herinean <[EMAIL PROTECTED]> wrote:
> > Hi Demir,
> >
> > I've played a little and I've created for you a
> > class to generate a half
> > cylinder parametrized by height, inner/outer
> radius
> > and number of slices for
> > the curvature.
> >
> > The class has a static method generate(...) which
> > will create for you a
> > Geometry object.
> >
> > Also the class is runnable, so you can test your
> > cylinder.
> >
> > I've intentionally left out the texture
> coordinates
> > as an exercise for you.
> >
> > You should really try to experiment by creating
> > geometries by hand from time
> > to time, to get a feeling of what can be done and
> > how. And don't forget to
> > read the manuals.
> >
> > Cheers,
> >
> > Florin
> >
> > -----Original Message-----
> > From: Discussion list for Java 3D API
> > [mailto:[EMAIL PROTECTED] Behalf Of
> > demir sencer
> > Sent: Donnerstag, 1. April 2004 15:33
> > To: [EMAIL PROTECTED]
> > Subject: Re: [JAVA3D] how to draw a 3D
> > hollow-semi-cylinder HELP
> >
> >
> > first of all i'm so so so sorry,Florin and Gilson,
> > i made mistake,i wanted to send to whole group my
> > messages but i sent emails by mistake to 2 u who
> > helped me with their ideas/code..sorry to disturb
> u
> > :(:(
> >
> > its what i did up to now,its code of my 3DWorld
> > class..i created everything here..if anyone wants
> i
> > can send all my package to have a look how it
> > works,how it looks like..
> > ...
> >
> >
>
===========================================================================
> > 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".
> >
>
> > ATTACHMENT part 2 java/* name=HollowCilinder.java
>
>
>
> __________________________________
> Do you Yahoo!?
> Yahoo! Small Business $15K Web Design Giveaway
> http://promotions.yahoo.com/design_giveaway/
>
>
===========================================================================
> 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".
>

> ATTACHMENT part 2 java/* name=HollowCilinder.java



__________________________________
Do you Yahoo!?
Yahoo! Small Business $15K Web Design Giveaway
http://promotions.yahoo.com/design_giveaway/

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

import java.awt.BorderLayout;
import java.util.Enumeration;

import javax.media.j3d.*;
import javax.swing.JFrame;
import javax.vecmath.Color3f;
import javax.vecmath.Point3d;
import javax.vecmath.Vector3f;
import javax.vecmath.Vector3d;

import com.sun.j3d.utils.behaviors.vp.OrbitBehavior;
import com.sun.j3d.utils.universe.PlatformGeometry;
import com.sun.j3d.utils.universe.SimpleUniverse;
import com.sun.j3d.utils.universe.ViewingPlatform;

public class HollowCylinder2
{
   private static int steps = 16;
   private static double length = 2;
   private static double inner = 0.4;
   private static double height = 0.3;
   private static double outer = 0.6;

   public static Geometry generatePipe()
   {
      int p_steps = 2 * steps;

      double[] coords = new double[(2 * p_steps + 1) * 24];
      float[] normals = new float[(2 * p_steps + 1) * 24];

      double[] xi = new double[p_steps + 1];
      double[] xo = new double[p_steps + 1];
      double[] zi = new double[p_steps + 1];
      double[] zo = new double[p_steps + 1];

      xi[0] = inner;
      xo[0] = outer;
      xi[p_steps] = -inner;
      xo[p_steps] = -outer;

      double a = Math.PI / p_steps;
      double h = length / 2;

      for (int i = 1; i < p_steps; i++)
      {
         double x = Math.cos(a * i);
         double z = Math.sin(a * i);
         xi[i] = x * inner;
         xo[i] = x * outer;
         zi[i] = z * inner;
         zo[i] = z * outer;
      }

      int c = 0;
      int n = 0;

   /*   // upper cap
      for (int i = 0; i < p_steps; i++)
      {
         coords[c++] = xo[i];
         coords[c++] = h;
         coords[c++] = zo[i];

         coords[c++] = xi[i];
         coords[c++] = h;
         coords[c++] = zi[i];

         coords[c++] = xi[i + 1];
         coords[c++] = h;
         coords[c++] = zi[i + 1];

         coords[c++] = xo[i + 1];
         coords[c++] = h;
         coords[c++] = zo[i + 1];

         for (int j = 0; j < 4; j++)
         {
            normals[n++] = 0;
            normals[n++] = 1;
            normals[n++] = 0;
         }
      }

      // lower cap
      for (int i = 0; i < p_steps; i++)
      {
         coords[c++] = xi[i];
         coords[c++] = -h;
         coords[c++] = zi[i];

         coords[c++] = xo[i];
         coords[c++] = -h;
         coords[c++] = zo[i];

         coords[c++] = xo[i + 1];
         coords[c++] = -h;
         coords[c++] = zo[i + 1];

         coords[c++] = xi[i + 1];
         coords[c++] = -h;
         coords[c++] = zi[i + 1];

         for (int j = 0; j < 4; j++)
         {
            normals[n++] = 0;
            normals[n++] = -1;
            normals[n++] = 0;
         }
      }

      // outer face
      for (int i = 0; i < p_steps; i++)
      {
         coords[c++] = xo[i];
         coords[c++] = -h;
         coords[c++] = zo[i];

         coords[c++] = xo[i];
         coords[c++] = h;
         coords[c++] = zo[i];

         coords[c++] = xo[i + 1];
         coords[c++] = h;
         coords[c++] = zo[i + 1];

         coords[c++] = xo[i + 1];
         coords[c++] = -h;
         coords[c++] = zo[i + 1];

         for (int k = 0; k < 2; k++)
         {
            double nx = Math.cos((i + k) * a);
            double nz = Math.sin((i + k) * a);
            for (int j = 0; j < 2; j++)
            {
               normals[n++] = (float) nx;
               normals[n++] = 0;
               normals[n++] = (float) nz;
            }
         }
      }

      // first transition
      coords[c++] = xo[p_steps];
      coords[c++] = -h;
      coords[c++] = zo[p_steps];

      coords[c++] = xo[p_steps];
      coords[c++] = h;
      coords[c++] = zo[p_steps];

      coords[c++] = xi[p_steps];
      coords[c++] = h;
      coords[c++] = zi[p_steps];

      coords[c++] = xi[p_steps];
      coords[c++] = -h;
      coords[c++] = zi[p_steps];

      for (int k = 0; k < 4; k++)
      {
         normals[n++] = 0;
         normals[n++] = 0;
         normals[n++] = -1;
      }                                                     */

      // inner face

          xi = new double[3];
                  zi = new double[3];

          xi[0] = -0.1;
          xi[1] = 0;
          xi[2] = 0.1;
          zi[0] = 0.1;
          zi[1] = 0;
          zi[2] = 0.1;



      for (int i =2 /*p_steps*/; i > 0; i--)
      {
         coords[c++] = xi[i];
         coords[c++] = -h;
         coords[c++] = zi[i];

         coords[c++] = xi[i];
         coords[c++] = h;
         coords[c++] = zi[i];

         coords[c++] = xi[i - 1];
         coords[c++] = h;
         coords[c++] = zi[i - 1];

         coords[c++] = xi[i - 1];
         coords[c++] = -h;
         coords[c++] = zi[i - 1];

  /*       for (int k = 0; k < 2; k++)
         {
            double nx = -Math.cos((i - k) * a);
            double nz = -Math.sin((i - k) * a);
            for (int j = 0; j < 2; j++)
            {
               normals[n++] = (float) nx;
               normals[n++] = 0;
               normals[n++] = (float) nz;
            }
         }                  */
      }

   /*   // last transition
      coords[c++] = xi[0];
      coords[c++] = -h;
      coords[c++] = zi[0];

      coords[c++] = xi[0];
      coords[c++] = h;
      coords[c++] = zi[0];

      coords[c++] = xo[0];
      coords[c++] = h;
      coords[c++] = zo[0];

      coords[c++] = xo[0];
      coords[c++] = -h;
      coords[c++] = zo[0];  */

      for (int k = 0; k < 4; k++)
      {
         normals[n++] = 0;
         normals[n++] = 0;
         normals[n++] = -1;
      }

      GeometryArray result = new QuadArray(coords.length / 3, 
GeometryArray.COORDINATES | GeometryArray.NORMALS);
      result.setCoordinates(0, coords);
      result.setNormals(0, normals);
      return result;
   }

   public static void main(String[] args)
   {
      // super("Memory Usage Test");
      JFrame frame = new JFrame("my 2nd Hollow Half Cylinder :):)");

      // create canvas & universe
      Canvas3D c3d = new Canvas3D(SimpleUniverse.getPreferredConfiguration());
      SimpleUniverse universe = new SimpleUniverse(c3d);
      ViewingPlatform platform = universe.getViewingPlatform();
      Transform3D t3d = new Transform3D();
      Point3d center = new Point3d(0, 0, 0.3);
      Point3d eye = new Point3d(3.6, 2, -0.7);
      Vector3d up = new Vector3d(0, 0, -1);
      t3d.lookAt(eye, center, up);
      t3d.invert();
      platform.getViewPlatformTransform().setTransform(t3d);

      // create orbiter
      Bounds bounds = new BoundingSphere(new Point3d(), 10.0);
      OrbitBehavior orbit = new OrbitBehavior(c3d,
            OrbitBehavior.REVERSE_ALL /* |
            OrbitBehavior.DISABLE_TRANSLATE |
            OrbitBehavior.DISABLE_ZOOM */ );

      orbit.setSchedulingBounds(bounds);
      platform.setViewPlatformBehavior(orbit);

      // setup the lights
      Color3f ambientLightColor = new Color3f(0.30f, 0.30f, 0.30f);
      Color3f diffuseLightColor = new Color3f(0.75f, 0.75f, 0.75f);
      Vector3f diffuseLightDirection = new Vector3f(-1, -1, -1);
      PlatformGeometry pg = new PlatformGeometry();
      Light ambient = new AmbientLight(true, ambientLightColor);
      ambient.setInfluencingBounds(bounds);
      pg.addChild(ambient);
      Light directional = new DirectionalLight(true,
            diffuseLightColor,
            diffuseLightDirection);
      directional.setInfluencingBounds(bounds);
      pg.addChild(directional);
      platform.setPlatformGeometry(pg);

      BranchGroup root = new BranchGroup();
      Appearance appearance1 = new Appearance();
      Material material1 = new Material();
      appearance1.setMaterial(material1);
      Shape3D shape1 = new Shape3D(generatePipe(), appearance1);
      root.addChild(shape1);
      Appearance appearance = new Appearance();
      Material material = new Material();
      material.setDiffuseColor(0.5f, 0.5f, 1);
      material.setShininess(100);
      appearance.setMaterial(material);
      appearance.setPolygonAttributes(new 
PolygonAttributes(PolygonAttributes.POLYGON_FILL, PolygonAttributes.CULL_NONE, 0, 
true));
      appearance.setTransparencyAttributes(new 
TransparencyAttributes(TransparencyAttributes.NICEST, 0.7f));
      GeometryArray water = generateWater();
      Shape3D shape = new Shape3D(water, appearance);
      root.addChild(shape);
      Behavior wb = new WaterBehavior(water);
      wb.setSchedulingBounds(bounds);
      root.addChild(wb);
      root.compile();

      universe.getLocale().addBranchGraph(root);

      // show the window
      frame.getContentPane().add(c3d, BorderLayout.CENTER);
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.setSize(400, 400);
      frame.setLocation(300, 300);
      frame.setVisible(true);
   }

   private static GeometryArray generateWater()
   {
      int w_steps = steps * 8;
      double[] coords = new double[w_steps * 4 * 3];
      float[] normals = new float[w_steps * 4 * 3];
      double l = length / w_steps;
      double y = length / 2;
      double z = inner - height;
      double x = Math.sqrt(inner * inner - z * z);
      int c = 0;
      int n = 0;
      for (int i = 0; i < w_steps; i++)
      {
         coords[c++] = -x;
         coords[c++] = y;
         coords[c++] = z;

         coords[c++] = x;
         coords[c++] = y;
         coords[c++] = z;

         y -= l;

         coords[c++] = x;
         coords[c++] = y;
         coords[c++] = z;

         coords[c++] = -x;
         coords[c++] = y;
         coords[c++] = z;
      }

      for (int i = 0; i < w_steps * 4; i++)
      {
         normals[n++] = 0;
         normals[n++] = 0;
         normals[n++] = -1;
      }

      GeometryArray result = new QuadArray(coords.length / 3, 
GeometryArray.COORDINATES | GeometryArray.NORMALS | GeometryArray.BY_REFERENCE);
      result.setCapability(GeometryArray.ALLOW_REF_DATA_WRITE);
      result.setCapability(GeometryArray.ALLOW_REF_DATA_READ);
      result.setCoordRefDouble(coords);
      result.setNormalRefFloat(normals);
      return result;
   }

   private static class WaterBehavior extends Behavior implements GeometryUpdater
   {
      private WakeupCondition wakeup = new WakeupOnElapsedTime(20);
      private GeometryArray geometry;
      private Alpha alpha = new Alpha();

      public WaterBehavior(GeometryArray geometry)
      {
         this.geometry = geometry;
      }

      public void initialize()
      {
         wakeupOn(wakeup);
      }

      public void processStimulus(Enumeration enumeration)
      {
         geometry.updateData(this);
         wakeupOn(wakeup);
      }

      public void updateData(Geometry geometry)
      {
         double[] coords = ((GeometryArray) geometry).getCoordRefDouble();
         float[] normals = ((GeometryArray) geometry).getNormalRefFloat();
         int stripes = coords.length / 12;
         double delta = length / stripes;
         double u = 2 * Math.PI * alpha.value();
         for (int i = 0; i < stripes; i++)
         {
            double a = u + i * delta * 20;
            double h = inner - height + Math.sin(a) * 0.025;
            int offset = 12 * i;
            coords[offset + 2] = h;
            coords[offset + 5] = h;
            a = u + (i + 1) * delta * 20;
            h = inner - height + Math.sin(a) * 0.025;
            coords[offset + 8] = h;
            coords[offset + 11] = h;

            double dz = coords[offset + 8] - coords[offset + 2];
            double dy = coords[offset + 7] - coords[offset + 1];
            double len = Math.sqrt(dz * dz + dy * dy);
            dz /= len;
            dy /= len;
            for (int k = 0; k < 4; k++)
            {
               normals[offset + 1] = (float) -dz;
               normals[offset + 2] = (float) dy;
               offset += 3;
            }
         }
         for (int i = 1; i < stripes; i++)
         {
            int offset = 12 * i;
            float dy = (normals[offset - 2] + normals[offset + 1]) / 2;
            float dz = (normals[offset - 1] + normals[offset + 2]) / 2;
            offset -= 5;
            for (int k = 0; k < 4; k++)
            {
               normals[offset] = dy;
               normals[offset + 1] = dz;
               offset += 3;
            }
         }
      }
   }
}

===========================================================================
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