Code archives/3D Graphics - Mesh/CreateCylinderTaper()
This code has been declared by its author to be Public Domain code.
Download source code
| |||||
Creates a tapered cylinder per user passed values | |||||
; Tapered Cylinder function ; Written by Martin Parrott ; V1.1 ; Oct. 28, 2001 - 1. Added ability to map texture on object ; 2. Changed triangle creation order, caused by 1. above ; 3. Cleaned up variable names ; ; This code is hiware. If you use it, please send me an email and say Hi! ; You are free to use, modify, etc. No warranty is written Or implied ; Use at your own risk ; This code is free to use, but if you modify it, please send the ; changes to the above email address so I can continue to release ; updates so others can benefit. Function CreateCylinderTaper(seg=8,parent=0,solid=True,xloc#=0,yloc#=0,zloc#=0,rad1#=1,rad2#=.75,height#=2) ; seg defines the number of segments/vertices in the cylinder cross-section ; parent is the parent enitity handle ; solid defines whether the cylinder ends are capped or open, true-they are closed, false-they are open ; xloc# is the final x axis location for the cylinder ; yloc# is the final y axis location for the cylinder ; zloc# is the final z axis location for the cylinder ; rad1# is the radius of the bottom of the cylinder ; rad2# is the radius of the top of the cylinder ; height# is the total height of the cylinder If seg<2 Then seg=8 ; make sure the number of segments is set to something sane If seg>32 Then seg=32 cylmesh=CreateMesh() cylsurf=CreateSurface(cylmesh) ;Create center vertex of bottom disc AddVertex cylsurf,0,0,0,1,1 angle#=0 ; Set our initial starting angle inc#=Float 360 / Float seg ; Setup increment for setting up vertices around our cylinder ends ; Do bottom end vertices While angle# < 360.01 x#=rad1#*Cos(angle#) z#=rad1#*Sin(angle#) u#=angle#/360 AddVertex (cylsurf,x#,0,z#,u#,1) angle#=angle#+inc# Wend ; If solid is set, then cap end. Do triangles If solid>0 For vert=1 To seg AddTriangle cylsurf,0,vert,vert+1 Next EndIf ;Create center vertex of top disc AddVertex cylsurf,0,height#,0,0,0 angle#=0 ; reset angle ; Do top end While angle# < 360.01 x#=rad2#*Cos(angle#) z#=rad2#*Sin(angle#) u#=angle#/360 AddVertex (cylsurf,x#,height#,z#,u#,0) angle#=angle#+inc# Wend ; If solid is set, then cap end. Do triangles If solid>0 For vert=seg+3 To (seg*2)+3 AddTriangle cylsurf,seg+2,vert+1,vert Next EndIf ; Do sides of cylinder For vert=1 To seg AddTriangle cylsurf,vert,vert+seg+2,vert+seg+3 AddTriangle cylsurf,vert,vert+seg+3,vert+1 Next UpdateNormals cylmesh ; fix our normals MoveEntity cylmesh,xloc#,yloc#,zloc# ; Put the cylinder in place If parent > 0 ; Assign our cylinder to a parent if one is passed to us EntityParent cylmesh,parent EndIf Return cylmesh End Function |
Comments
None.
Code Archives Forum