Create a vertex
Blitz3D Forums/Blitz3D Beginners Area/Create a vertex
| ||
Hi I'm still new to this even though I've been programming for almost 2 years, I want to create a circular entity that only has one side, like what the portal game is doing, how do I create a half sphere object? |
| ||
http://www.blitzbasic.com/codearcs/codearcs.php?code=639 |
| ||
that does not help much though, it sill gives me a full sphere but it has been flattened, I only want one side of the sphere at all |
| ||
Probably not perfect for all segment levels but works with the default of 8 ... Stevie Graphics3D 640,480,16,1 light = CreateLight() : RotateEntity light, 30,-45,0 camera = CreateCamera() : PositionEntity camera, 0,0,-3 ss = SEMI_SPHERE() : EntityFX ss, 4 While Not KeyDown(1) TurnEntity ss, 1,0,-1 RenderWorld() Flip Wend End ;============================================================== Function SEMI_SPHERE() temp = CreateSphere() ts = GetSurface( temp, 1 ) mesh = CreateMesh() s = CreateSurface( mesh ) For t = 0 To CountTriangles( ts ) - 1 v0 = TriangleVertex( ts, t , 0 ) v1 = TriangleVertex( ts, t , 1 ) v2 = TriangleVertex( ts, t , 2 ) If VertexY( ts, v0 ) > 0 Or VertexY( ts, v1) > 0 Or VertexY( ts, v2 ) > 0 nv0 = AddVertex( s, VertexX( ts, v0 ) , VertexY( ts, v0 ) , VertexZ( ts, v0 ) ) nv1 = AddVertex( s, VertexX( ts, v1 ) , VertexY( ts, v1 ) , VertexZ( ts, v1 ) ) nv2 = AddVertex( s, VertexX( ts, v2 ) , VertexY( ts, v2 ) , VertexZ( ts, v2 ) ) VertexNormal s, nv0, VertexNX( ts, v0 ) , VertexNY( ts, v0 ), VertexNZ( ts, v0 ) VertexNormal s, nv1, VertexNX( ts, v1 ) , VertexNY( ts, v1 ), VertexNZ( ts, v1 ) VertexNormal s, nv2, VertexNX( ts, v2 ) , VertexNY( ts, v2 ), VertexNZ( ts, v2 ) AddTriangle ( s, nv0, nv1, nv2 ) EndIf Next FreeEntity temp Return mesh End Function |
| ||
that does not help much though, it sill gives me a full sphere but it has been flattened, I only want one side of the sphere at all Eh? No it doesn't - it creates a hemisphere, which is what I thought you wanted. |
| ||
I think he means he wants a stretched out circle shape... or stretched out semi-circle |
| ||
You could explain yourself a bit better with a picture .. |
| ||
if you mean what I think you mean, It's be most productive to use a sprite with a masked texture |
| ||
okay so I want a round one sided shape, that link you gave me to that code big10p takes half of the vertexes and places them on the reverse side of the other half of the sphere. but the sphere still has all it's vertexes I need a oval shape which is one sided, so if I was behind it it would be invisible. |
| ||
Try this ... This example creates a filled circle of radius 100 : SUN = MESHring( 0 , 100 , 7.5,7.5, 15 ) This example creates a hollow circle with inner radius of 4 and outer radius of 5 : CURSOR = MESHring( 4,5,15,15, 30 ) Try this also .. POINTER = MESHring( 20 , 25 , 0,5,90 ) Function MESHring( Min# , Max#, MinA#, MaxA#, Segs = 30 ) mesh = CreateMesh() s = CreateSurface( mesh ) Closed = ( MinA = MaxA And MinA = Segs * .5 ) For a = 1 To 360 If ( a Mod segs ) = 0 If ( Not Closed ) v0 = AddVertex( s, Max * Cos( a - MaxA ) , Max * Sin( a - MaxA ) , 0 ) v1 = AddVertex( s, Max * Cos( a + MaxA ) , Max * Sin( a + MaxA ) , 0 ) v2 = AddVertex( s, Min * Cos( a + MinA ) , Min * Sin( a + MinA ) , 0 ) v3 = AddVertex( s, Min * Cos( a - MinA ) , Min * Sin( a - MinA ) , 0 ) AddTriangle s, v2, v1, v0 AddTriangle s, v0, v3, v2 Else AddVertex( s, Max * Cos( a ) , Max * Sin( a ) , 0 ) AddVertex( s, Min * Cos( a ) , Min * Sin( a ) , 0 ) EndIf EndIf Next If Closed Points = 360.0 / Segs For l = 0 To Points - 1 n = ( l + 1 ) Mod Points V0 = l * 2 V1 = V0+1 V3 = n * 2 V2 = v3 + 1 AddTriangle s, v0, v1, v2 AddTriangle s, v2, v3, v0 Next EndIf Return Mesh End Function |