Android Open Source - min3d Hollow Cylinder






From Project

Back to project page min3d.

License

The source code is released under:

MIT License

If you think the Android project min3d listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

package com.min3d.lib.objectPrimitives;
//from w  w w.ja  v a  2 s. c  o m
import com.min3d.lib.core.Object3dContainer;
import com.min3d.lib.vos.Color4;
import com.min3d.lib.vos.Number3d;
import com.min3d.lib.vos.Uv;

/**
 * Example of a more complex programmatically-drawn object.
 * 
 * Unfortunately, because the object's faces share as many vertices as possible,
 * shading is incorrect on the cylinder surfaces.
 *  
 * To fix would require duplicating vertices, adding new normals, 
 * and generally reworking algorithm. Yek.
 */
public class HollowCylinder extends Object3dContainer
{
  private double DEG = Math.PI / 180;
  
  private int _segs;
  private float _radiusOuter;
  private float _radiusInner;
  private float _height;
  

  public HollowCylinder(float $radiusOuter, float $radiusInner, float $height, int $segs)
  {
    super($segs * 4, $segs * 8);
    
    _segs = $segs;
    _height = $height;
    _radiusOuter = $radiusOuter;
    _radiusInner = $radiusInner;
    
    addHorizontalSurface(false, _height / +2);
    addHorizontalSurface(true, _height / -2);
    addVerticalSurface(true);
    addVerticalSurface(false);
  }
  
  private void addHorizontalSurface(boolean $isTopSide, float $zOffset)
  {
    int indexOffset = _vertices.size();
    float step = (float)((360.0 / _segs) * DEG);

    // verts
    
    Color4 col = $isTopSide ? new Color4(255,0,0,255) : new Color4(0,255,0,255);
    
    for (int i = 0; i < _segs; i++)
    {
      float angle = (float)i * step;

      // outer 
      float x1     = (float) Math.sin(angle) * _radiusOuter;
      float y1     = (float) Math.cos(angle) * _radiusOuter;
      float z1     = $zOffset; 
      Uv uv1       = new Uv(x1,y1);
      Number3d n1   = new Number3d(0,0, $isTopSide ? -1 : +1);
      this.vertices().addVertex(new Number3d(x1,y1,z1), uv1, n1, col);

      // inner 
      float x2     = (float) Math.sin(angle) * _radiusInner;
      float y2     = (float) Math.cos(angle) * _radiusInner;
      float z2     = $zOffset; 
      Uv uv2      = new Uv(x2,y2);
      Number3d n2  = new Number3d(0,0, $isTopSide ? -1 : +1);
      this.vertices().addVertex(new Number3d(x2,y2,z2), uv2, n2, col);
    }
    
    // indicies
    
    for (int i = 2; i <= _segs; i++)
    {
      int a = indexOffset  +  i*2 - 3 - 1;
      int b = indexOffset  +  i*2 - 2 - 1;
      int c = indexOffset  +  i*2 - 1 - 1;
      int d = indexOffset  +  i*2 - 0 - 1;
      addQuad(a,b,c,d, $isTopSide);
    }    
  
    int a = indexOffset  +  _segs*2 - 1 - 1; // ... connect last segment
    int b = indexOffset  +  _segs*2 - 0 - 1;
    int c = indexOffset  +  0;
    int d = indexOffset  +  1;
    addQuad(a,b,c,d, $isTopSide);
  }
  
  // 
  private void addVerticalSurface(boolean $isOuter)
  {
    int off = (int)(_vertices.size() / 2); 
    
    for (int i = 0; i < _segs - 1; i++)
    {
      int ul = i*2;
      int bl = ul + off;
      int ur = i*2 + 2;
      int br = ur + off;
      
      if (!$isOuter) {
        ul++;
        bl++;
        ur++;
        br++;
      }
      addQuad(ul,bl,ur,br, $isOuter);
    }
    
    int ul = (_segs-1)*2;
    int bl = ul + off;
    int ur = 0*2;
    int br = ur + off;

    if (!$isOuter) {
      ul++;
      bl++;
      ur++;
      br++;
    }

    addQuad(ul,bl,ur,br, $isOuter);
  }
  
  private void addQuad(int ul, int bl, int ur, int br, boolean $flipped)
  {
    if (! $flipped)
    {
      _faces.add((short)ul,(short)bl,(short)ur);
      _faces.add((short)bl,(short)br,(short)ur);
    }
    else
    {
      _faces.add((short)ur,(short)br,(short)ul);
      _faces.add((short)br,(short)bl,(short)ul);
    }
  }
}




Java Source Code List

com.min3d.ApplicationTest.java
com.min3d.ExampleAccelerometer.java
com.min3d.ExampleAnimatedTexture.java
com.min3d.ExampleAnimatingVertices.java
com.min3d.ExampleAssigningTexturesDynamically.java
com.min3d.ExampleCamera.java
com.min3d.ExampleFog.java
com.min3d.ExampleFromScratch.java
com.min3d.ExampleInsideLayout.java
com.min3d.ExampleKeyframeAnimation.java
com.min3d.ExampleLightProperties.java
com.min3d.ExampleLoad3DSFile.java
com.min3d.ExampleLoadMD2File.java
com.min3d.ExampleLoadObjFileMultiple.java
com.min3d.ExampleLoadObjFile.java
com.min3d.ExampleMipMap.java
com.min3d.ExampleMostMinimal.java
com.min3d.ExampleMultiTexture.java
com.min3d.ExampleMultipleLights.java
com.min3d.ExampleRenderType.java
com.min3d.ExampleRotatingPlanets.java
com.min3d.ExampleSubsetOfFaces.java
com.min3d.ExampleTextureOffset.java
com.min3d.ExampleTextureWrap.java
com.min3d.ExampleTextures.java
com.min3d.ExampleTransparentGlSurface.java
com.min3d.ExampleVertexColors.java
com.min3d.ExampleVerticesVariations.java
com.min3d.ScratchActivity.java
com.min3d.SplashActivity.java
com.min3d.lib.AParser.java
com.min3d.lib.ApplicationTest.java
com.min3d.lib.IParser.java
com.min3d.lib.LittleEndianDataInputStream.java
com.min3d.lib.MD2Parser.java
com.min3d.lib.Max3DSParser.java
com.min3d.lib.Min3d.java
com.min3d.lib.ObjParser.java
com.min3d.lib.ParseObjectData.java
com.min3d.lib.ParseObjectFace.java
com.min3d.lib.Parser.java
com.min3d.lib.Shared.java
com.min3d.lib.Utils.java
com.min3d.lib.animation.AnimationObject3d.java
com.min3d.lib.animation.KeyFrame.java
com.min3d.lib.core.Color4BufferList.java
com.min3d.lib.core.FacesBufferedList.java
com.min3d.lib.core.ManagedLightList.java
com.min3d.lib.core.Number3dBufferList.java
com.min3d.lib.core.Object3dContainer.java
com.min3d.lib.core.Object3d.java
com.min3d.lib.core.RenderCaps.java
com.min3d.lib.core.RendererActivity.java
com.min3d.lib.core.Renderer.java
com.min3d.lib.core.Scene.java
com.min3d.lib.core.TextureList.java
com.min3d.lib.core.TextureManager.java
com.min3d.lib.core.UvBufferList.java
com.min3d.lib.core.Vertices.java
com.min3d.lib.interfaces.IDirtyManaged.java
com.min3d.lib.interfaces.IDirtyParent.java
com.min3d.lib.interfaces.IObject3dContainer.java
com.min3d.lib.interfaces.ISceneController.java
com.min3d.lib.objectPrimitives.Box.java
com.min3d.lib.objectPrimitives.HollowCylinder.java
com.min3d.lib.objectPrimitives.Rectangle.java
com.min3d.lib.objectPrimitives.SkyBox.java
com.min3d.lib.objectPrimitives.Sphere.java
com.min3d.lib.objectPrimitives.Torus.java
com.min3d.lib.vos.AbstractDirtyManaged.java
com.min3d.lib.vos.BooleanManaged.java
com.min3d.lib.vos.CameraVo.java
com.min3d.lib.vos.Color4Managed.java
com.min3d.lib.vos.Color4.java
com.min3d.lib.vos.Face.java
com.min3d.lib.vos.FloatManaged.java
com.min3d.lib.vos.FogType.java
com.min3d.lib.vos.FrustumManaged.java
com.min3d.lib.vos.LightType.java
com.min3d.lib.vos.Light.java
com.min3d.lib.vos.Number3dManaged.java
com.min3d.lib.vos.Number3d.java
com.min3d.lib.vos.RenderType.java
com.min3d.lib.vos.ShadeModelManaged.java
com.min3d.lib.vos.ShadeModel.java
com.min3d.lib.vos.TexEnvxVo.java
com.min3d.lib.vos.TextureVo.java
com.min3d.lib.vos.Uv.java
com.min3d.lib.vos.Vertex3d.java