Android Open Source - min3d Torus






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;
/*  w  w w . j  a  v  a2 s . c om*/
import com.min3d.lib.core.Object3dContainer;
import com.min3d.lib.vos.Color4;
import com.min3d.lib.vos.Number3d;
import com.min3d.lib.vos.Uv;
import com.min3d.lib.vos.Vertex3d;

/**
 * @author Dennis Ippel
 * @author Thomas Pfeiffer
 * @author Tim Knip
 *
 * Torus primitive.
 * This is an adaptation from Sandy's ActionScript 3 class which was adapted from Tim Knip's 
 * ActionScript 2 class. All credits go to Tim Knip.
 * Original sources available at: http://www.suite75.net/svn/papervision3d/tim/as2/org/papervision3d/objects/Torus.as
 * Sandy source available at: http://code.google.com/p/sandy/source/browse/trunk/sandy/as3/trunk/src/sandy/primitive/Torus.as
 *
 */

public class Torus extends Object3dContainer {
  private final int MIN_SEGMENTSW = 3;
  private final int MIN_SEGMENTSH = 2;
  
  private float largeRadius;
  private float smallRadius;
  private int segmentsW;
  private int segmentsH;
  
  public Torus() {
    this(2, 1, 12, 8, new Color4());
  }
  
  public Torus(Color4 color) {
    this(2, 1, 12, 8, color);
  }
  
  public Torus(float largeRadius, float smallRadius, int segmentsW, int segmentsH) {
    this(largeRadius, smallRadius, segmentsW, segmentsH, new Color4());
  }
  
  public Torus(float largeRadius, float smallRadius, int segmentsW, int segmentsH, Color4 color) {
    super(segmentsW * segmentsH * 2 * 3, segmentsW * segmentsH * 2);
    this.largeRadius = largeRadius;
    this.smallRadius = smallRadius;
    this.segmentsW = Math.max(MIN_SEGMENTSW, segmentsW);
    this.segmentsH = Math.max(MIN_SEGMENTSH, segmentsH);
    this.defaultColor(color);
    build();
  }
  
  private void build()
  {
    float r1 = largeRadius;
    float r2 = smallRadius;
    int steps1 = segmentsW;
    int steps2 = segmentsH;
    float step1r = (float) ((2.0 * Math.PI) / steps1);
    float step2r = (float) ((2.0 * Math.PI) / steps2);
    float a1a = 0;
    float a1b = step1r;
    int vcount = 0;
    
    for(float s=0; s<steps1; s++, a1a=a1b, a1b+=step1r) {
      float a2a = 0;
      float a2b = step2r;
      
      for(float s2=0; s2<steps2; s2++, a2a=a2b, a2b+=step2r) {
        Vertex3d v0 = getVertex(a1a, r1, a2a, r2);
        Vertex3d v1 = getVertex(a1b, r1, a2a, r2);
        Vertex3d v2 = getVertex(a1b, r1, a2b, r2);
        Vertex3d v3 = getVertex(a1a, r1, a2b, r2);
        
        float ux1 = s/steps1;
        float ux0 = (s+1)/steps1;
        float uy0 = s2/steps2;
        float uy1 = (s2+1)/steps2;

        vertices().addVertex(v0.position, new Uv(1-ux1, uy0), v0.normal, defaultColor());
        vertices().addVertex(v1.position, new Uv(1-ux0, uy0), v1.normal, defaultColor());
        vertices().addVertex(v2.position, new Uv(1-ux0, uy1), v2.normal, defaultColor());
        vertices().addVertex(v3.position, new Uv(1-ux1, uy1), v3.normal, defaultColor());
        
        faces().add(vcount, vcount+1, vcount+2);
        faces().add(vcount, vcount+2, vcount+3);
        
        vcount += 4;
      }
    }
  }
  
  private Vertex3d getVertex(float a1, float r1, float a2, float r2) {
    Vertex3d vertex = new Vertex3d();
    vertex.normal = new Number3d();
    
    float ca1 = (float)Math.cos(a1);
    float sa1 = (float)Math.sin(a1);
    float ca2 = (float)Math.cos(a2);
    float sa2 = (float)Math.sin(a2);
    
    float centerX = r1 * ca1;
    float centerZ = -r1 * sa1;
    
    vertex.normal.x = ca2 * ca1;
    vertex.normal.y = sa2;
    vertex.normal.z = -ca2 * sa1;
    
    vertex.position.x = centerX + r2 * vertex.normal.x;
    vertex.position.y = r2 * vertex.normal.y;
    vertex.position.z = centerZ + r2 * vertex.normal.z;
        
    return vertex;
  }
}




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