Draw3D for B3DSDK

Blitz3D SDK Forums/Blitz3D SDK Programming/Draw3D for B3DSDK

Hi

I'm trying to convert the lib for b3dsdk but i get problem
with text ? anybody can help me ? The rest seem ok but the
text display strange stuff.

The lib topic :
http://www.blitzbasic.com/Community/posts.php?topic=75362

The library
'Used-Variables
Global MouseX3D=0
Global MouseY3D=0
Global MouseHit3D=0
Global MousePit3D=0
Global MouseDown3D=0
Global MouseOver3D=0
Global MouseText3D:String=""

'Internal-Global-Variables
Global DrawNFR:Int=255 'Native-Farbe-Rot
Global DrawNFG:Int=255 'Native-Farbe-Grün
Global DrawNFB:Int=255 'Native-Farbe-Blau
Global DrawNFA:Float=1 'Native-Alpha-Angabe
Global DrawTFR:Int=255 'Text3D-Farbe-Rot
Global DrawTFG:Int=255 'Text3D-Farbe-Grün
Global DrawTFB:Int=255 'Text3D-Farbe-Blau
Global DrawTFA:Float=1 'Text3D-Alpha-Angabe
Global DrawGFR:Int=255 'Grafik-Farbe-Rot
Global DrawGFG:Int=255 'Grafik-Farbe-Grün
Global DrawGFB:Int=255 'Grafik-Farbe-Blau
Global DrawGFA:Float=1 'Grafik-Alpha-Angabe

Global DrawSFont:Float=1 'Font-Größen-Skallierung
Global DrawHFont:Float=1 'Font-Nur-Höhenskallierung
Global DrawPFont:Float=0 'Font-Zeichenabstand-In-Pixel
Global DrawIFont:Float=0 'Font-Kursiv-(Negativ/Positiv)-Grad

Global DrawXScale:Float=1 'X-Skallierungsfaktor-Für-DrawPivot
Global DrawYScale:Float=1 'Y-Skallierungsfaktor-Für-DrawPivot
Global DrawXSize:Int=0 'X-Skallierungsfaktor-Für-MouseX3D
Global DrawYSize:Int=0 'Y-Skallierungsfaktor-Für-MouseY3D
Global DrawMouseHit:Int=0 'Für-Eigene-MouseHit-Berechnung
Global DrawMousePit:String="" 'Für-Eigene-MousePit-Berechnung
Global DrawNative:Int=0 'NativeInit3D-Initial-Handle
Global DrawPivot:Int=0 'Camera-Pivot-Initial-Handle
Global DrawBankUsed:Int=0 'Maximale-Bankbesetzung

'U|V-Font-Mapping-Constants
Const DRAWUVSCALE:Float=1.0/512.0
Const DRAWVSIZE:Float=1.0/512.0*30

'Bank-Offset-Constants
Const DRAWBANKKING:Int=0
Const DRAWBANKMESH:Int=4
Const DRAWBANKFACE:Int=8
Const DRAWBANKTEXTURE:Int=12
Const DRAWBANKXMAIN:Int=16
Const DRAWBANKYMAIN:Int=20
Const DRAWBANKXSIZE:Int=24
Const DRAWBANKYSIZE:Int=28
Const DRAWBANKU1MAP:Int=32
Const DRAWBANKV1MAP:Int=36
Const DRAWBANKU2MAP:Int=40
Const DRAWBANKV2MAP:Int=44

'Bank-Options-Constants
Const DRAWBANKSIZE:Int=8192
Const DRAWBANKSTEP:Int=48

'Bank-Font-Offset-Constants
Const DRAWBANKWIDTH:Int=DRAWBANKXSIZE
Const DRAWBANKSPACE:Int=DRAWBANKYSIZE

'Bank-Creating-And-Setting-The-Size
Global DrawBank:TBank=CreateBank(DRAWBANKSTEP+DRAWBANKSIZE*DRAWBANKSTEP)

'DrawInit3D(camera)
Function DrawInit3D(FCamera)
	If FCamera=0 Then RuntimeError "Camera not found"
	
	DrawPivot=bbCreatePivot(FCamera)
	bbPositionEntity DrawPivot,0,0,bbGraphicsWidth()/20.0
	bbMoveMouse bbGraphicsWidth()/2,bbGraphicsHeight()/2
	Origin3D(bbGraphicsWidth(),bbGraphicsHeight())
	
	'Glow3D-Mesh/Face/Rexture-Erstellung
	PokeInt DrawBank,DRAWBANKKING,0
	PokeInt DrawBank,DRAWBANKMESH,bbCreateMesh(DrawPivot)
	PokeInt DrawBank,DRAWBANKFACE,bbCreateSurface(PeekInt(DrawBank,DRAWBANKMESH))
	PokeInt DrawBank,DRAWBANKTEXTURE,bbCreateTexture(2,2,2)
	
	bbWritePixel 0,0,$ffffffff,bbTextureBuffer(PeekInt(DrawBank,DRAWBANKTEXTURE))
	bbWritePixel 1,0,$00ffffff,bbTextureBuffer(PeekInt(DrawBank,DRAWBANKTEXTURE))
	bbWritePixel 0,1,$00ffffff,bbTextureBuffer(PeekInt(DrawBank,DRAWBANKTEXTURE))
	bbWritePixel 1,1,$00ffffff,bbTextureBuffer(PeekInt(DrawBank,DRAWBANKTEXTURE))
	
	'Sonstige-Zuweisung/Berechnungen
	bbEntityTexture PeekInt(DrawBank,DRAWBANKMESH),PeekInt(DrawBank,DRAWBANKTEXTURE)
	bbEntityOrder PeekInt(DrawBank,DRAWBANKMESH),-1000-DRAWBANKSIZE-DRAWBANKSTEP
	bbTextureBlend PeekInt(DrawBank,DRAWBANKTEXTURE),2
	bbScaleTexture PeekInt(DrawBank,DRAWBANKTEXTURE),2,2
	bbEntityFX PeekInt(DrawBank,DRAWBANKMESH),1+2+8+16
End Function

'Origin3D( X-Size, Y-Size )
Function Origin3D(FDrawX:Float,FDrawY:Float)
	DrawXScale=bbGraphicsWidth()/FDrawX
	DrawYScale=bbGraphicsHeight()/FDrawY

	bbScaleEntity DrawPivot,DrawXScale/10.0,DrawYScale/10.0,1
	DrawXSize=FDrawX
	DrawYSize=FDrawY
End Function

'NativeInit3D( Draw-Mode, Draw-Blend )
Function NativeInit3D(FDrawMode:Int=2,FDrawBlend:Int=2)
	If DrawNative<>0 Then RuntimeError "Double Initialize NativeInit3D"
	
	'Variablen-Vorberechnung
	If FDrawMode<0 Then FDrawMode=0
	If FDrawMode>2 Then FDrawMode=4
	If FDrawBlend<0 Then FDrawBlend=0
	If FDrawBlend>5 Then FDrawBlend=5
	
	'Neue-Bank-Position-Festlegen
	Local DrawBankPosition%=NFDP3D()
	
	'DrawBank-Variablen-EINweisung
	PokeInt DrawBank,DrawBankPosition+DRAWBANKKING,+DrawBankPosition
	PokeInt DrawBank,DrawBankPosition+DRAWBANKMESH,bbCreateMesh(DrawPivot)
	PokeInt DrawBank,DrawBankPosition+DRAWBANKFACE,bbCreateSurface(PeekInt(DrawBank,DrawBankPosition+DRAWBANKMESH))
	PokeInt DrawBank,DrawBankPosition+DRAWBANKTEXTURE,bbCreateTexture(2,2,FDrawMode)
	
	bbWritePixel 0,0,$ffffffff,bbTextureBuffer(PeekInt(DrawBank,DrawBankPosition+DRAWBANKTEXTURE))
	bbWritePixel 1,0,$00ffffff,bbTextureBuffer(PeekInt(DrawBank,DrawBankPosition+DRAWBANKTEXTURE))
	bbWritePixel 0,1,$00ffffff,bbTextureBuffer(PeekInt(DrawBank,DrawBankPosition+DRAWBANKTEXTURE))
	bbWritePixel 1,1,$00ffffff,bbTextureBuffer(PeekInt(DrawBank,DrawBankPosition+DRAWBANKTEXTURE))
	
	'Sonstige-Zuweisung/Berechnungen
	bbEntityTexture PeekInt(DrawBank,DrawBankPosition+DRAWBANKMESH),PeekInt(DrawBank,DrawBankPosition+DRAWBANKTEXTURE)
	bbEntityOrder PeekInt(DrawBank,DrawBankPosition+DRAWBANKMESH),-1000-DrawBankPosition/DRAWBANKSTEP
	bbTextureBlend PeekInt(DrawBank,DrawBankPosition+DRAWBANKTEXTURE),FDrawBlend
	bbScaleTexture PeekInt(DrawBank,DrawBankPosition+DRAWBANKTEXTURE),2,2
	bbEntityFX PeekInt(DrawBank,DrawBankPosition+DRAWBANKMESH),1+2+8+16
	
	DrawNative=PeekInt(DrawBank,DrawBankPosition+DRAWBANKFACE)
End Function

Function NFDP3D()
	'Nächst-Freie-Bank-Vorgabe
	Local DrawNFDP:Int=DRAWBANKSTEP
	
	'Nächst-Freie-Bank-Suchen
	Repeat
		If PeekInt(DrawBank,DrawNFDP+DRAWBANKKING)=0 Then Exit
		DrawNFDP=DrawNFDP+DRAWBANKSTEP
		
		If DrawNFDP>DRAWBANKSIZE Then
			RuntimeError "DrawBank is to small"
		End If
	Forever
	
	'Bank-Benutzungseingrenzung-Festlegen
	If DrawNFDP>DrawBankUsed Then DrawBankUsed=DrawNFDP
	
	Return DrawNFDP
End Function

'Clear3D( )
Function Clear3D()
	If MouseText3D="" Then
		DrawMousePit=""
	Else
		MouseText3D=""
	End If
	
	MouseX3D=bbMouseX()/DrawXScale-(DrawXSize/2)
	MouseY3D=(DrawYSize/2)-bbMouseY()/DrawYScale
	bbClearSurface PeekInt(DrawBank,DRAWBANKFACE),True,True
	
	For Local DrawLoop:Int=0 To DrawBankUsed Step DRAWBANKSTEP
		If PeekInt(DrawBank,DrawLoop+DRAWBANKKING)<>0
			bbClearSurface PeekInt(DrawBank,DrawLoop+DRAWBANKFACE),True,True
		End If
	Next
End Function

'ColorN3D( Red, Green, Blue, Alpha )
Function ColorN3D(FDrawFR:Byte=255,FDrawFG:Byte=255,FDrawFB:Byte=255,FDrawFA:Float=1)
	DrawNFR=FDrawFR
	DrawNFG=FDrawFG
	DrawNFB=FDrawFB
	DrawNFA=FDrawFA
End Function

'ColorT3D( Red, Green, Blue, Alpha )
Function ColorT3D(FDrawFR:Byte=255,FDrawFG:Byte=255,FDrawFB:Byte=255,FDrawFA:Float=1)
	DrawTFR=FDrawFR
	DrawTFG=FDrawFG
	DrawTFB=FDrawFB
	DrawTFA=FDrawFA
End Function




'ColorG3D( Red, Green, Blue, Alpha )
Function ColorG3D(FDrawFR:Byte=255,FDrawFG:Byte=255,FDrawFB:Byte=255,FDrawFA:Float=1)
	DrawGFR=FDrawFR
	DrawGFG=FDrawFG
	DrawGFB=FDrawFB
	DrawGFA=FDrawFA
End Function


'Plot3D ( X-Center, Y-Center, Drawing-Size )
Function Plot3D(FDrawX:Int,FDrawY:Int,FDrawSize:Int=2)
	If DrawNative=0 Then RuntimeError "NativeInit3D() not set"
	If FDrawSize=0 Then FDrawSize=2
	
	'Vertex/Ploygon-Zuweisung/Berechnungen
	Local DrawV0=bbAddVertex(DrawNative,FDrawX-FDrawSize,FDrawY+FDrawSize,0, 1.5,1.5)
	Local DrawV1=bbAddVertex(DrawNative,FDrawX+FDrawSize,FDrawY+FDrawSize,0, 3.5,1.5)
	Local DrawV2=bbAddVertex(DrawNative,FDrawX+FDrawSize,FDrawY-FDrawSize,0, 3.5,3.5)
	Local DrawV3=bbAddVertex(DrawNative,FDrawX-FDrawSize,FDrawY-FDrawSize,0, 1.5,3.5)
	
	bbVertexColor DrawNative,DrawV0,DrawNFR,DrawNFG,DrawNFB,DrawNFA
	bbVertexColor DrawNative,DrawV1,DrawNFR,DrawNFG,DrawNFB,DrawNFA
	bbVertexColor DrawNative,DrawV2,DrawNFR,DrawNFG,DrawNFB,DrawNFA
	bbVertexColor DrawNative,DrawV3,DrawNFR,DrawNFG,DrawNFB,DrawNFA
	
	bbAddTriangle(DrawNative,DrawV0,DrawV1,DrawV2)
	bbAddTriangle(DrawNative,DrawV2,DrawV3,DrawV0)
End Function

'Line3D ( X-Start, Y-Start, X-End, Y-End, Drawing-Size )
Function Line3D(FDrawX1:Int,FDrawY1:Int,FDrawX2:Int,FDrawY2:Int,FDrawSize:Int=2)
	If DrawNative=0 Then RuntimeError "NativeInit3D() not set"
	
	If FDrawX1<>FDrawX2 Or FDrawY1<>FDrawY2 Then
		'Variablen-Vorberechnung
		If FDrawSize=0 Then FDrawSize=2
		bbTFormNormal FDrawX2-FDrawX1,FDrawY2-FDrawY1,0,0,0
		
		Local DrawXTForm:Float=bbTFormedX()*FDrawSize
		Local DrawYTForm:Float=bbTFormedY()*FDrawSize
		
		'Vertex/Ploygon-Zuweisung/Berechnungen
		Local DrawV0=bbAddVertex(DrawNative,FDrawX1+DrawYTForm,FDrawY1-DrawXTForm,0, 1.5,0.5)
		Local DrawV1=bbAddVertex(DrawNative,FDrawX1-DrawYTForm,FDrawY1+DrawXTForm,0, 3.5,0.5)
		Local DrawV2=bbAddVertex(DrawNative,FDrawX2-DrawYTForm,FDrawY2+DrawXTForm,0, 3.5,0.5)
		Local DrawV3=bbAddVertex(DrawNative,FDrawX2+DrawYTForm,FDrawY2-DrawXTForm,0, 1.5,0.5)
		
		bbVertexColor DrawNative,DrawV0,DrawNFR,DrawNFG,DrawNFB,DrawNFA
		bbVertexColor DrawNative,DrawV1,DrawNFR,DrawNFG,DrawNFB,DrawNFA
		bbVertexColor DrawNative,DrawV2,DrawNFR,DrawNFG,DrawNFB,DrawNFA
		bbVertexColor DrawNative,DrawV3,DrawNFR,DrawNFG,DrawNFB,DrawNFA
		
		bbAddTriangle(DrawNative,DrawV0,DrawV1,DrawV2)
		bbAddTriangle(DrawNative,DrawV2,DrawV3,DrawV0)
	End If
End Function

'Rect3D( X-Center, Y-Center, X-Size, Y-Size, Drawing-Mode, Border-Size )
Function Rect3D(FDrawX:Int,FDrawY:Int,FDrawXS:Int,FDrawYS:Int,FDrawFill:Int=1,FDrawSize:Int=0)
	' Filax hack to get boxes
	FDrawXS=FDrawXS/2
	FDrawYS=FDrawYS/2
	
	FDrawX=FDrawX+FDrawXS
	FDrawY=FDrawY-FDrawYS
		
	If DrawNative=0 Then RuntimeError "NativeInit3D() not set"
	
	'Variablen-Vorberechnung
	FDrawXS=Abs(FDrawXS)
	FDrawYS=Abs(FDrawYS)

	Local DrawV0:Int
	Local DrawV1:Int
	Local DrawV2:Int
	Local DrawV3:Int
	Local DrawV4:Int
	Local DrawV5:Int
	Local DrawV6:Int
	Local DrawV7:Int
			
	'Rahmen-Allein-Modus
	If FDrawFill=0 Then
		If FDrawSize=0 Then FDrawSize=2
		
		'Vertex/Ploygon-Zuweisung/Berechnungen
		DrawV0=bbAddVertex(DrawNative,FDrawX-FDrawXS-FDrawSize,FDrawY+FDrawYS+FDrawSize,0, 1.5,0.5)
		DrawV1=bbAddVertex(DrawNative,FDrawX+FDrawXS+FDrawSize,FDrawY+FDrawYS+FDrawSize,0, 1.5,0.5)
		DrawV2=bbAddVertex(DrawNative,FDrawX+FDrawXS+FDrawSize,FDrawY-FDrawYS-FDrawSize,0, 1.5,0.5)
		DrawV3=bbAddVertex(DrawNative,FDrawX-FDrawXS-FDrawSize,FDrawY-FDrawYS-FDrawSize,0, 1.5,0.5)
		DrawV4=bbAddVertex(DrawNative,FDrawX-FDrawXS+FDrawSize,FDrawY+FDrawYS-FDrawSize,0, 3.5,0.5)
		DrawV5=bbAddVertex(DrawNative,FDrawX+FDrawXS-FDrawSize,FDrawY+FDrawYS-FDrawSize,0, 3.5,0.5)
		DrawV6=bbAddVertex(DrawNative,FDrawX+FDrawXS-FDrawSize,FDrawY-FDrawYS+FDrawSize,0, 3.5,0.5)
		DrawV7=bbAddVertex(DrawNative,FDrawX-FDrawXS+FDrawSize,FDrawY-FDrawYS+FDrawSize,0, 3.5,0.5)
		
		bbVertexColor DrawNative,DrawV0,DrawNFR,DrawNFG,DrawNFB,DrawNFA
		bbVertexColor DrawNative,DrawV1,DrawNFR,DrawNFG,DrawNFB,DrawNFA
		bbVertexColor DrawNative,DrawV2,DrawNFR,DrawNFG,DrawNFB,DrawNFA
		bbVertexColor DrawNative,DrawV3,DrawNFR,DrawNFG,DrawNFB,DrawNFA
		bbVertexColor DrawNative,DrawV4,DrawNFR,DrawNFG,DrawNFB,DrawNFA
		bbVertexColor DrawNative,DrawV5,DrawNFR,DrawNFG,DrawNFB,DrawNFA
		bbVertexColor DrawNative,DrawV6,DrawNFR,DrawNFG,DrawNFB,DrawNFA
		bbVertexColor DrawNative,DrawV7,DrawNFR,DrawNFG,DrawNFB,DrawNFA
		
		bbAddTriangle(DrawNative,DrawV0,DrawV1,DrawV5)
		bbAddTriangle(DrawNative,DrawV5,DrawV4,DrawV0)
		bbAddTriangle(DrawNative,DrawV1,DrawV2,DrawV6)
		bbAddTriangle(DrawNative,DrawV6,DrawV5,DrawV1)
		bbAddTriangle(DrawNative,DrawV2,DrawV3,DrawV7)
		bbAddTriangle(DrawNative,DrawV7,DrawV6,DrawV2)
		bbAddTriangle(DrawNative,DrawV3,DrawV0,DrawV4)
		bbAddTriangle(DrawNative,DrawV4,DrawV7,DrawV3)
	Else
		' Gefüllt-Allein-Modus | Vertex/Ploygon-Zuweisung/Berechnungen
		DrawV0:Int=bbAddVertex(DrawNative,FDrawX-FDrawXS,FDrawY+FDrawYS,0, 0.5,0.5)
		DrawV1:Int=bbAddVertex(DrawNative,FDrawX+FDrawXS,FDrawY+FDrawYS,0, 0.5,0.5)
		DrawV2:Int=bbAddVertex(DrawNative,FDrawX+FDrawXS,FDrawY-FDrawYS,0, 0.5,0.5)
		DrawV3:Int=bbAddVertex(DrawNative,FDrawX-FDrawXS,FDrawY-FDrawYS,0, 0.5,0.5)
		
		bbVertexColor DrawNative,DrawV0,DrawNFR,DrawNFG,DrawNFB,DrawNFA
		bbVertexColor DrawNative,DrawV1,DrawNFR,DrawNFG,DrawNFB,DrawNFA
		bbVertexColor DrawNative,DrawV2,DrawNFR,DrawNFG,DrawNFB,DrawNFA
		bbVertexColor DrawNative,DrawV3,DrawNFR,DrawNFG,DrawNFB,DrawNFA
		
		bbAddTriangle(DrawNative,DrawV0,DrawV1,DrawV2)
		bbAddTriangle(DrawNative,DrawV2,DrawV3,DrawV0)
		
		'Halbrahmen-Hinzufügen
		If FDrawSize>0 Then
			'Vertex/Ploygon-Zuweisung/Berechnungen
			DrawV4:Int=bbAddVertex(DrawNative,FDrawX-FDrawXS-FDrawSize,FDrawY+FDrawYS+FDrawSize,0, 1.5,0.5)
			DrawV5:Int=bbAddVertex(DrawNative,FDrawX+FDrawXS+FDrawSize,FDrawY+FDrawYS+FDrawSize,0, 1.5,0.5)
			DrawV6:Int=bbAddVertex(DrawNative,FDrawX+FDrawXS+FDrawSize,FDrawY-FDrawYS-FDrawSize,0, 1.5,0.5)
			DrawV7:Int=bbAddVertex(DrawNative,FDrawX-FDrawXS-FDrawSize,FDrawY-FDrawYS-FDrawSize,0, 1.5,0.5)
			
			bbVertexColor DrawNative,DrawV4,DrawNFR,DrawNFG,DrawNFB,DrawNFA
			bbVertexColor DrawNative,DrawV5,DrawNFR,DrawNFG,DrawNFB,DrawNFA
			bbVertexColor DrawNative,DrawV6,DrawNFR,DrawNFG,DrawNFB,DrawNFA
			bbVertexColor DrawNative,DrawV7,DrawNFR,DrawNFG,DrawNFB,DrawNFA
			
			bbAddTriangle(DrawNative,DrawV4,DrawV5,DrawV1)
			bbAddTriangle(DrawNative,DrawV1,DrawV0,DrawV4)
			bbAddTriangle(DrawNative,DrawV5,DrawV6,DrawV2)
			bbAddTriangle(DrawNative,DrawV2,DrawV1,DrawV5)
			bbAddTriangle(DrawNative,DrawV6,DrawV7,DrawV3)
			bbAddTriangle(DrawNative,DrawV3,DrawV2,DrawV6)
			bbAddTriangle(DrawNative,DrawV7,DrawV4,DrawV0)
			bbAddTriangle(DrawNative,DrawV0,DrawV3,DrawV7)
		End If
	End If
End Function


'Glow3D( X-Center, Y-Center, X-First-Vertex, Y-First-Vertex, X-Second-Vertex, Y-Second-Vertex )
Function Glow3D(FDrawX0:Float,FDrawY0:Float,FDrawX1:Float,FDrawY1:Float,FDrawX2:Float,FDrawY2:Float,FTextOver:String)
	'Variablen-Vorberechnung
	Local DrawRX3:Float=FDrawX0-FDrawX1+FDrawX2
	Local DrawRY3:Float=FDrawY0-FDrawY1+FDrawY2
	Local DrawGlowFace=PeekInt(DrawBank,DRAWBANKFACE)
	
	MouseOver3D=0
	MouseDown3D=0
	MouseHit3D=0
	MousePit3D=0
	
	'Quadkollision-Berechnen/Glow3D-Anwenden
	If (FDrawY1-FDrawY0)*(MouseX3D-FDrawX1)-(FDrawX1-FDrawX0)*(MouseY3D-FDrawY1)>0 Then
		If (FDrawY2-FDrawY1)*(MouseX3D-FDrawX2)-(FDrawX2-FDrawX1)*(MouseY3D-FDrawY2)>0 Then
			If (DrawRY3-FDrawY2)*(MouseX3D-DrawRX3)-(DrawRX3-FDrawX2)*(MouseY3D-DrawRY3)>0 Then
				If (FDrawY0-DrawRY3)*(MouseX3D-FDrawX0)-(FDrawX0-DrawRX3)*(MouseY3D-FDrawY0)>0 Then
					' Vertex/Ploygon-Zuweisung/Berechnungen
					Local DrawV0=bbAddVertex(DrawGlowFace,FDrawX0+(FDrawX0-FDrawX2)/8,FDrawY0+(FDrawY0-FDrawY2)/8,0, 1.5,1.5)
					Local DrawV1=bbAddVertex(DrawGlowFace,FDrawX1+(FDrawX1-DrawRX3)/8,FDrawY1+(FDrawY1-DrawRY3)/8,0, 3.5,1.5)
					Local DrawV2=bbAddVertex(DrawGlowFace,FDrawX2+(FDrawX2-FDrawX0)/8,FDrawY2+(FDrawY2-FDrawY0)/8,0, 3.5,3.5)
					Local DrawV3=bbAddVertex(DrawGlowFace,DrawRX3+(DrawRX3-FDrawX1)/8,DrawRY3+(DrawRY3-FDrawY1)/8,0, 1.5,3.5)
					
					bbVertexColor DrawGlowFace,DrawV0,255,255,255,.5
					bbVertexColor DrawGlowFace,DrawV1,255,255,255,.5
					bbVertexColor DrawGlowFace,DrawV2,255,255,255,.5
					bbVertexColor DrawGlowFace,DrawV3,255,255,255,.5
					
					bbAddTriangle(DrawGlowFace,DrawV0,DrawV1,DrawV2)
					bbAddTriangle(DrawGlowFace,DrawV2,DrawV3,DrawV0)
					
					'Globale-Maus-Variablen-Berechnung
					MouseDown3D=bbMouseDown(1)+(bbMouseDown(2)*2)+(bbMouseDown(3)*4)
					
					If DrawMouseHit=0 Then MouseHit3D=MouseDown3D
					If DrawMousePit<>FTextOver Then MousePit3D=1
					
					DrawMouseHit=MouseDown3D
					DrawMousePit=FTextOver
					
					MouseText3D=FTextOver
					MouseOver3D=1
					
					Return True
				End If
			End If
		End If
	End If
End Function



'SetFont3D( Font-Size, Font-Height, Font-Padding, Italic-Font)
Function SetFont3D(FDrawSFont:Float=1,FDrawHFont:Float=1,FDrawPFont:Float=1,FDrawIFont:Float=0)
	DrawSFont=FDrawSFont
	DrawHFont=FDrawHFont
	DrawPFont=FDrawPFont-1
	DrawIFont=FDrawIFont
End Function

'LoadFont3D( Texture-Name, Texture-Mode, Texture-Blend )
Function LoadFont3D(FDrawFile$,FDrawMode%=2,FDrawBlend%=2)
	If FileType(FDrawFile)<>1 Then RuntimeError FDrawFile+" not found"
	'Variablen-Vorberechnung
	If FDrawMode<0 Then FDrawMode=0
	If FDrawMode>2 Then FDrawMode=4
	If FDrawBlend<0 Then FDrawBlend=0
	If FDrawBlend>5 Then FDrawBlend=5
	
	'Neue-Bank-Position-Festlegen
	Local DrawBankPosition%=NFDP3D()
	
	'DrawBank-Variablen-EINweisung
	PokeInt DrawBank,DrawBankPosition+DRAWBANKKING,DrawBankPosition
	PokeInt DrawBank,DrawBankPosition+DRAWBANKMESH,bbCreateMesh(DrawPivot)
	PokeInt DrawBank,DrawBankPosition+DRAWBANKFACE,bbCreateSurface(PeekInt(DrawBank,DrawBankPosition+DRAWBANKMESH))
	PokeInt DrawBank,DrawBankPosition+DRAWBANKTEXTURE,bbLoadTexture(FDrawFile,FDrawMode)
	
	PokeInt DrawBank,DrawBankPosition+DRAWBANKXMAIN,bbTextureWidth(PeekInt(DrawBank,DrawBankPosition+DRAWBANKTEXTURE))/2.0
	PokeInt DrawBank,DrawBankPosition+DRAWBANKYMAIN,bbTextureHeight(PeekInt(DrawBank,DrawBankPosition+DRAWBANKTEXTURE))/2.0
	PokeInt DrawBank,DrawBankPosition+DRAWBANKWIDTH,(bbReadPixel(0,0,bbTextureBuffer(PeekInt(DrawBank,DrawBankPosition+DRAWBANKTEXTURE))) And $FF0000)/$10000
	PokeInt DrawBank,DrawBankPosition+DRAWBANKSPACE,(bbReadPixel(0,0,bbTextureBuffer(PeekInt(DrawBank,DrawBankPosition+DRAWBANKTEXTURE))) And $FF00)/$100

	PokeFloat DrawBank,DrawBankPosition+DRAWBANKU1MAP,0+(0.25/PeekInt(DrawBank,DrawBankPosition+DRAWBANKXMAIN))
	PokeFloat DrawBank,DrawBankPosition+DRAWBANKV1MAP,0+(0.25/PeekInt(DrawBank,DrawBankPosition+DRAWBANKYMAIN))
	PokeFloat DrawBank,DrawBankPosition+DRAWBANKU2MAP,1-(0.25/PeekInt(DrawBank,DrawBankPosition+DRAWBANKXMAIN))
	PokeFloat DrawBank,DrawBankPosition+DRAWBANKV2MAP,1-(0.25/PeekInt(DrawBank,DrawBankPosition+DRAWBANKYMAIN))
	
	'Sonstige-Zuweisung/Berechnungen
	bbEntityTexture PeekInt(DrawBank,DrawBankPosition+DRAWBANKMESH),PeekInt(DrawBank,DrawBankPosition+DRAWBANKTEXTURE)
	bbEntityOrder PeekInt(DrawBank,DrawBankPosition+DRAWBANKMESH),-1000-DrawBankPosition/DRAWBANKSTEP
	bbTextureBlend PeekInt(DrawBank,DrawBankPosition+DRAWBANKTEXTURE),FDrawBlend
	bbEntityFX PeekInt(DrawBank,DrawBankPosition+DRAWBANKMESH),1+2+8+16
	
	'Variablen-Ausstiegsvorbereitung
	Return DrawBankPosition
End Function

'Text3D( Handle, X-Center-Position, Y-Center-Position, Text-String, Text-Align, Button, Rotation )
Function Text3D(FDrawHandle%,FDrawX:Float,FDrawY:Float,FDrawString:String,FDrawAlign:Byte=0,FDrawButton:Byte=0,FDrawRotation:Float=0)
	If FDrawHandle=0 Then RuntimeError "LoadFont3D() not set"
	
	'DrawBank-Variablen-AUSweisung
	Local LDrawFace%=PeekInt(DrawBank,FDrawHandle+DRAWBANKFACE)
	Local LDrawFontWidth%=PeekInt(DrawBank,FDrawHandle+DRAWBANKWIDTH)
	Local LDrawFontSpace%=PeekInt(DrawBank,FDrawHandle+DRAWBANKSPACE)
	
	'Variablen-Vorberechnung
	Local DrawLen%=Len(FDrawString)
	
	Local DrawXVector#=Cos(-FDrawRotation)*DrawSFont/LDrawFontSpace*16
	Local DrawYVector#=Sin(-FDrawRotation)*DrawSFont/LDrawFontSpace*16
	
	Local DrawDiff#=(LDrawFontWidth-LDrawFontSpace)/2.0
	Local DrawXSpeed#=DrawXVector*LDrawFontSpace+DrawPFont*DrawXVector*LDrawFontSpace
	Local DrawYSpeed#=DrawYVector*LDrawFontSpace+DrawPFont*DrawYVector*LDrawFontSpace
	Local DrawXAlign#=(FDrawAlign*DrawXSpeed*DrawLen*.5)+(DrawDiff-DrawPFont/2)*DrawXVector
	Local DrawYAlign#=(FDrawAlign*DrawYSpeed*DrawLen*.5)+(DrawDiff-DrawPFont/2)*DrawYVector
	Local DrawXPos1#=FDrawX-DrawYVector*15*DrawHFont-DrawXAlign
	Local DrawYPos1#=FDrawY+DrawXVector*15*DrawHFont-DrawYAlign
	Local DrawXPos4#=FDrawX+DrawYVector*15*DrawHFont-DrawXAlign
	Local DrawYPos4#=FDrawY-DrawXVector*15*DrawHFont-DrawYAlign
	Local DrawXPos2#=DrawXPos1+LDrawFontWidth*DrawXVector
	Local DrawYPos2#=DrawYPos1+LDrawFontWidth*DrawYVector
	Local DrawXPos3#=DrawXPos4+LDrawFontWidth*DrawXVector
	Local DrawYPos3#=DrawYPos4+LDrawFontWidth*DrawYVector
	Local DrawUStep#=DRAWUVSCALE*LDrawFontWidth
	Local DrawXTemp#=DrawXPos1
	Local DrawYTemp#=DrawYPos1
	
	'String-Durchgehend-Zeichnen
	For Local DrawLoop:Int=1 To DrawLen
	
		Local DrawAsc=Asc(Mid$(FDrawString,DrawLoop,1))
		
		Local DrawUMap#=DRAWUVSCALE+(DrawAsc*32 Mod 512)*DRAWUVSCALE
		Local DrawVMap#=DRAWUVSCALE+DrawAsc/16*32*DRAWUVSCALE
		
		Local DrawXI#=DrawXVector*DrawIFont*DrawHFont
		Local DrawYI#=DrawYVector*DrawIFont*DrawHFont
		
		'Vertex/Ploygon-Zuweisung/Berechnungen
		Local DrawV0=bbAddVertex(LDrawFace,DrawXPos1+DrawXI,DrawYPos1+DrawYI,0, DrawUMap,DrawVMap)
		Local DrawV1=bbAddVertex(LDrawFace,DrawXPos2+DrawXI,DrawYPos2+DrawYI,0, DrawUMap+DrawUStep,DrawVMap)
		Local DrawV2=bbAddVertex(LDrawFace,DrawXPos3-DrawXI,DrawYPos3-DrawYI,0, DrawUMap+DrawUStep,DrawVMap+DRAWVSIZE)
		Local DrawV3=bbAddVertex(LDrawFace,DrawXPos4-DrawXI,DrawYPos4-DrawYI,0, DrawUMap,DrawVMap+DRAWVSIZE)
		bbVertexColor LDrawFace,DrawV0,DrawTFR,DrawTFG,DrawTFB,DrawTFA
		bbVertexColor LDrawFace,DrawV1,DrawTFR,DrawTFG,DrawTFB,DrawTFA
		bbVertexColor LDrawFace,DrawV2,DrawTFR,DrawTFG,DrawTFB,DrawTFA
		bbVertexColor LDrawFace,DrawV3,DrawTFR,DrawTFG,DrawTFB,DrawTFA
		bbAddTriangle LDrawFace,DrawV0,DrawV1,DrawV2
		bbAddTriangle LDrawFace,DrawV2,DrawV3,DrawV0
		
		'Positionierung-Für-Nächstes-Zeichen
		DrawXPos1=DrawXPos1+DrawXSpeed
		DrawYPos1=DrawYPos1+DrawYSpeed
		DrawXPos2=DrawXPos2+DrawXSpeed
		DrawYPos2=DrawYPos2+DrawYSpeed
		DrawXPos3=DrawXPos3+DrawXSpeed
		DrawYPos3=DrawYPos3+DrawYSpeed
		DrawXPos4=DrawXPos4+DrawXSpeed
		DrawYPos4=DrawYPos4+DrawYSpeed
		
	Next
	
	If FDrawButton Then Glow3D(DrawXTemp,DrawYTemp,DrawXPos2-DrawXSpeed,DrawYPos2-DrawYSpeed,DrawXPos3-DrawXSpeed,DrawYPos3-DrawYSpeed,FDrawString)
End Function

'Oval3D( X-Center, Y-Center, X-Size, Y-Size, Drawing-Mode, Border-Size )
Function Oval3D(FDrawX:Int,FDrawY:Int,FDrawXS:Int,FDrawYS:Int,FDrawFill:Int=1,FDrawSize:Int=0)
	If DrawNative=0 Then RuntimeError "NativeInit3D() not set"
	
	'Variablen-Vorberechnung
	FDrawXS=Abs(FDrawXS)
	FDrawYS=Abs(FDrawYS)
	
	Local DrawSequences:Float=4+Int((FDrawXS+FDrawYS)/60)
	If DrawSequences>12 Then DrawSequences=12
	Local DrawAngle:Float=90.0/DrawSequences
	
	'Rahmen-Allein-Modus
	If FDrawFill=0 Then
		If FDrawSize=0 Then FDrawSize=2
		Local DrawXOutside:Float=FDrawXS+FDrawSize
		Local DrawYOutside:Float=FDrawYS+FDrawSize
		Local DrawXInside:Float=FDrawXS-FDrawSize
		Local DrawYInside:Float=FDrawYS-FDrawSize

		Local DrawV0:Int
		Local DrawV1:Int
		Local DrawV2:Int
		Local DrawV3:Int
		
		Local DrawXPos1:Float
		Local DrawYPos1:Float
		Local DrawXPos2:Float
		Local DrawYPos2:Float
		
		Local DrawLoop:Int
					
		For DrawLoop=1 To DrawSequences
		
			'Vertex/Ploygon-Zuweisung/Berechnungen
			DrawXPos1=Cos(DrawLoop*DrawAngle)
			DrawYPos1=Sin(DrawLoop*DrawAngle)
			DrawXPos2=Cos(DrawLoop*DrawAngle-DrawAngle)
			DrawYPos2=Sin(DrawLoop*DrawAngle-DrawAngle)
			
			'Oval3D-Quartal-1/4-Mirror
			DrawV0=bbAddVertex(DrawNative,FDrawX+DrawXPos1*DrawXOutside,FDrawY+DrawYPos1*DrawYOutside,0, 1.5,0.5)
			DrawV1=bbAddVertex(DrawNative,FDrawX+DrawXPos2*DrawXOutside,FDrawY+DrawYPos2*DrawYOutside,0, 1.5,0.5)
			DrawV2=bbAddVertex(DrawNative,FDrawX+DrawXPos2*DrawXInside,FDrawY+DrawYPos2*DrawYInside,0, 3.5,0.5)
			DrawV3=bbAddVertex(DrawNative,FDrawX+DrawXPos1*DrawXInside,FDrawY+DrawYPos1*DrawYInside,0, 3.5,0.5)
			
			bbVertexColor DrawNative,DrawV0,DrawNFR,DrawNFG,DrawNFB,DrawNFA
			bbVertexColor DrawNative,DrawV1,DrawNFR,DrawNFG,DrawNFB,DrawNFA
			bbVertexColor DrawNative,DrawV2,DrawNFR,DrawNFG,DrawNFB,DrawNFA
			bbVertexColor DrawNative,DrawV3,DrawNFR,DrawNFG,DrawNFB,DrawNFA
			bbAddTriangle(DrawNative,DrawV0,DrawV1,DrawV2)
			bbAddTriangle(DrawNative,DrawV2,DrawV3,DrawV0)
			
			'Oval3D-Quartal-2/4-Mirror
			DrawV0=bbAddVertex(DrawNative,FDrawX+DrawXPos1*DrawXOutside,FDrawY-DrawYPos1*DrawYOutside,0, 1.5,0.5)
			DrawV1=bbAddVertex(DrawNative,FDrawX+DrawXPos2*DrawXOutside,FDrawY-DrawYPos2*DrawYOutside,0, 1.5,0.5)
			DrawV2=bbAddVertex(DrawNative,FDrawX+DrawXPos2*DrawXInside,FDrawY-DrawYPos2*DrawYInside,0, 3.5,0.5)
			DrawV3=bbAddVertex(DrawNative,FDrawX+DrawXPos1*DrawXInside,FDrawY-DrawYPos1*DrawYInside,0, 3.5,0.5)
			bbVertexColor DrawNative,DrawV0,DrawNFR,DrawNFG,DrawNFB,DrawNFA
			bbVertexColor DrawNative,DrawV1,DrawNFR,DrawNFG,DrawNFB,DrawNFA
			bbVertexColor DrawNative,DrawV2,DrawNFR,DrawNFG,DrawNFB,DrawNFA
			bbVertexColor DrawNative,DrawV3,DrawNFR,DrawNFG,DrawNFB,DrawNFA
			bbAddTriangle(DrawNative,DrawV0,DrawV1,DrawV2)
			bbAddTriangle(DrawNative,DrawV2,DrawV3,DrawV0)
			
			'Oval3D-Quartal-3/4-Mirror
			DrawV0=bbAddVertex(DrawNative,FDrawX-DrawXPos1*DrawXOutside,FDrawY-DrawYPos1*DrawYOutside,0, 1.5,0.5)
			DrawV1=bbAddVertex(DrawNative,FDrawX-DrawXPos2*DrawXOutside,FDrawY-DrawYPos2*DrawYOutside,0, 1.5,0.5)
			DrawV2=bbAddVertex(DrawNative,FDrawX-DrawXPos2*DrawXInside,FDrawY-DrawYPos2*DrawYInside,0, 3.5,0.5)
			DrawV3=bbAddVertex(DrawNative,FDrawX-DrawXPos1*DrawXInside,FDrawY-DrawYPos1*DrawYInside,0, 3.5,0.5)
			bbVertexColor DrawNative,DrawV0,DrawNFR,DrawNFG,DrawNFB,DrawNFA
			bbVertexColor DrawNative,DrawV1,DrawNFR,DrawNFG,DrawNFB,DrawNFA
			bbVertexColor DrawNative,DrawV2,DrawNFR,DrawNFG,DrawNFB,DrawNFA
			bbVertexColor DrawNative,DrawV3,DrawNFR,DrawNFG,DrawNFB,DrawNFA
			bbAddTriangle(DrawNative,DrawV0,DrawV1,DrawV2)
			bbAddTriangle(DrawNative,DrawV2,DrawV3,DrawV0)
			
			'Oval3D-Quartal-4/4-Mirror
			DrawV0=bbAddVertex(DrawNative,FDrawX-DrawXPos1*DrawXOutside,FDrawY+DrawYPos1*DrawYOutside,0, 1.5,0.5)
			DrawV1=bbAddVertex(DrawNative,FDrawX-DrawXPos2*DrawXOutside,FDrawY+DrawYPos2*DrawYOutside,0, 1.5,0.5)
			DrawV2=bbAddVertex(DrawNative,FDrawX-DrawXPos2*DrawXInside,FDrawY+DrawYPos2*DrawYInside,0, 3.5,0.5)
			DrawV3=bbAddVertex(DrawNative,FDrawX-DrawXPos1*DrawXInside,FDrawY+DrawYPos1*DrawYInside,0, 3.5,0.5)
			bbVertexColor DrawNative,DrawV0,DrawNFR,DrawNFG,DrawNFB,DrawNFA
			bbVertexColor DrawNative,DrawV1,DrawNFR,DrawNFG,DrawNFB,DrawNFA
			bbVertexColor DrawNative,DrawV2,DrawNFR,DrawNFG,DrawNFB,DrawNFA
			bbVertexColor DrawNative,DrawV3,DrawNFR,DrawNFG,DrawNFB,DrawNFA
			bbAddTriangle(DrawNative,DrawV0,DrawV1,DrawV2)
			bbAddTriangle(DrawNative,DrawV2,DrawV3,DrawV0)
		Next
	Else
		'Mittelpunkt-Vertex-Zuweisung/Berechnungen
		Local DrawVC:Int=bbAddVertex(DrawNative,FDrawX,FDrawY,0, 0.5,0.5)
		bbVertexColor DrawNative,DrawVC,DrawNFR,DrawNFG,DrawNFB,DrawNFA
		
		'Gefüllt+Halbrahmen-Modus
		If FDrawSize>0 Then
			DrawXOutside=FDrawXS+FDrawSize
			DrawYOutside=FDrawYS+FDrawSize
			
			For DrawLoop=1 To DrawSequences
			
				'Vertex/Ploygon-Zuweisung/Berechnungen
				DrawXPos1=Cos(DrawLoop*DrawAngle)
				DrawYPos1=Sin(DrawLoop*DrawAngle)
				DrawXPos2=Cos(DrawLoop*DrawAngle-DrawAngle)
				DrawYPos2=Sin(DrawLoop*DrawAngle-DrawAngle)

				'Oval3D-Quartal-1/4-Mirror
				DrawV0=bbAddVertex(DrawNative,FDrawX+DrawXPos1*DrawXOutside,FDrawY+DrawYPos1*DrawYOutside,0, 1.5,0.5)
				DrawV1=bbAddVertex(DrawNative,FDrawX+DrawXPos2*DrawXOutside,FDrawY+DrawYPos2*DrawYOutside,0, 1.5,0.5)
				DrawV2=bbAddVertex(DrawNative,FDrawX+DrawXPos2*FDrawXS,FDrawY+DrawYPos2*FDrawYS,0, 0.5,0.5)
				DrawV3=bbAddVertex(DrawNative,FDrawX+DrawXPos1*FDrawXS,FDrawY+DrawYPos1*FDrawYS,0, 0.5,0.5)
				bbVertexColor DrawNative,DrawV0,DrawNFR,DrawNFG,DrawNFB,DrawNFA
				bbVertexColor DrawNative,DrawV1,DrawNFR,DrawNFG,DrawNFB,DrawNFA
				bbVertexColor DrawNative,DrawV2,DrawNFR,DrawNFG,DrawNFB,DrawNFA
				bbVertexColor DrawNative,DrawV3,DrawNFR,DrawNFG,DrawNFB,DrawNFA
				bbAddTriangle(DrawNative,DrawV0,DrawV1,DrawV2)
				bbAddTriangle(DrawNative,DrawV2,DrawV3,DrawV0)
				bbAddTriangle(DrawNative,DrawVC,DrawV3,DrawV2)
				
				'Oval3D-Quartal-2/4-Mirror
				DrawV0=bbAddVertex(DrawNative,FDrawX+DrawXPos1*DrawXOutside,FDrawY-DrawYPos1*DrawYOutside,0, 1.5,0.5)
				DrawV1=bbAddVertex(DrawNative,FDrawX+DrawXPos2*DrawXOutside,FDrawY-DrawYPos2*DrawYOutside,0, 1.5,0.5)
				DrawV2=bbAddVertex(DrawNative,FDrawX+DrawXPos2*FDrawXS,FDrawY-DrawYPos2*FDrawYS,0, 0.5,0.5)
				DrawV3=bbAddVertex(DrawNative,FDrawX+DrawXPos1*FDrawXS,FDrawY-DrawYPos1*FDrawYS,0, 0.5,0.5)
				bbVertexColor DrawNative,DrawV0,DrawNFR,DrawNFG,DrawNFB,DrawNFA
				bbVertexColor DrawNative,DrawV1,DrawNFR,DrawNFG,DrawNFB,DrawNFA
				bbVertexColor DrawNative,DrawV2,DrawNFR,DrawNFG,DrawNFB,DrawNFA
				bbVertexColor DrawNative,DrawV3,DrawNFR,DrawNFG,DrawNFB,DrawNFA
				bbAddTriangle(DrawNative,DrawV0,DrawV1,DrawV2)
				bbAddTriangle(DrawNative,DrawV2,DrawV3,DrawV0)
				bbAddTriangle(DrawNative,DrawVC,DrawV3,DrawV2)
				
				'Oval3D-Quartal-3/4-Mirror
				DrawV0=bbAddVertex(DrawNative,FDrawX-DrawXPos1*DrawXOutside,FDrawY-DrawYPos1*DrawYOutside,0, 1.5,0.5)
				DrawV1=bbAddVertex(DrawNative,FDrawX-DrawXPos2*DrawXOutside,FDrawY-DrawYPos2*DrawYOutside,0, 1.5,0.5)
				DrawV2=bbAddVertex(DrawNative,FDrawX-DrawXPos2*FDrawXS,FDrawY-DrawYPos2*FDrawYS,0, 0.5,0.5)
				DrawV3=bbAddVertex(DrawNative,FDrawX-DrawXPos1*FDrawXS,FDrawY-DrawYPos1*FDrawYS,0, 0.5,0.5)
				bbVertexColor DrawNative,DrawV0,DrawNFR,DrawNFG,DrawNFB,DrawNFA
				bbVertexColor DrawNative,DrawV1,DrawNFR,DrawNFG,DrawNFB,DrawNFA
				bbVertexColor DrawNative,DrawV2,DrawNFR,DrawNFG,DrawNFB,DrawNFA
				bbVertexColor DrawNative,DrawV3,DrawNFR,DrawNFG,DrawNFB,DrawNFA
				bbAddTriangle(DrawNative,DrawV0,DrawV1,DrawV2)
				bbAddTriangle(DrawNative,DrawV2,DrawV3,DrawV0)
				bbAddTriangle(DrawNative,DrawVC,DrawV3,DrawV2)
				
				'Oval3D-Quartal-4/4-Mirror
				DrawV0=bbAddVertex(DrawNative,FDrawX-DrawXPos1*DrawXOutside,FDrawY+DrawYPos1*DrawYOutside,0, 1.5,0.5)
				DrawV1=bbAddVertex(DrawNative,FDrawX-DrawXPos2*DrawXOutside,FDrawY+DrawYPos2*DrawYOutside,0, 1.5,0.5)
				DrawV2=bbAddVertex(DrawNative,FDrawX-DrawXPos2*FDrawXS,FDrawY+DrawYPos2*FDrawYS,0, 0.5,0.5)
				DrawV3=bbAddVertex(DrawNative,FDrawX-DrawXPos1*FDrawXS,FDrawY+DrawYPos1*FDrawYS,0, 0.5,0.5)
				bbVertexColor DrawNative,DrawV0,DrawNFR,DrawNFG,DrawNFB,DrawNFA
				bbVertexColor DrawNative,DrawV1,DrawNFR,DrawNFG,DrawNFB,DrawNFA
				bbVertexColor DrawNative,DrawV2,DrawNFR,DrawNFG,DrawNFB,DrawNFA
				bbVertexColor DrawNative,DrawV3,DrawNFR,DrawNFG,DrawNFB,DrawNFA
				bbAddTriangle(DrawNative,DrawV0,DrawV1,DrawV2)
				bbAddTriangle(DrawNative,DrawV2,DrawV3,DrawV0)
				bbAddTriangle(DrawNative,DrawVC,DrawV3,DrawV2)
			Next
		Else
			'Gefüllt-Allein-Modus
			For DrawLoop=1 To DrawSequences
			
				'Vertex/Ploygon-Zuweisung/Berechnungen
				DrawXPos1=Cos(DrawLoop*DrawAngle)
				DrawYPos1=Sin(DrawLoop*DrawAngle)
				DrawXPos2=Cos(DrawLoop*DrawAngle-DrawAngle)
				DrawYPos2=Sin(DrawLoop*DrawAngle-DrawAngle)
												
				'Oval3D-Quartal-1/4-Mirror
				DrawV0=bbAddVertex(DrawNative,FDrawX+DrawXPos1*FDrawXS,FDrawY+DrawYPos1*FDrawYS,0, 0.5,0.5)
				DrawV1=bbAddVertex(DrawNative,FDrawX+DrawXPos2*FDrawXS,FDrawY+DrawYPos2*FDrawYS,0, 0.5,0.5)
				bbVertexColor DrawNative,DrawV0,DrawNFR,DrawNFG,DrawNFB,DrawNFA
				bbVertexColor DrawNative,DrawV1,DrawNFR,DrawNFG,DrawNFB,DrawNFA
				bbAddTriangle(DrawNative,DrawVC,DrawV1,DrawV0)
				
				'Oval3D-Quartal-2/4-Mirror
				DrawV0=bbAddVertex(DrawNative,FDrawX+DrawXPos1*FDrawXS,FDrawY-DrawYPos1*FDrawYS,0, 0.5,0.5)
				DrawV1=bbAddVertex(DrawNative,FDrawX+DrawXPos2*FDrawXS,FDrawY-DrawYPos2*FDrawYS,0, 0.5,0.5)
				bbVertexColor DrawNative,DrawV0,DrawNFR,DrawNFG,DrawNFB,DrawNFA
				bbVertexColor DrawNative,DrawV1,DrawNFR,DrawNFG,DrawNFB,DrawNFA
				bbAddTriangle(DrawNative,DrawVC,DrawV1,DrawV0)
				
				'Oval3D-Quartal-3/4-Mirror
				DrawV0=bbAddVertex(DrawNative,FDrawX-DrawXPos1*FDrawXS,FDrawY-DrawYPos1*FDrawYS,0, 0.5,0.5)
				DrawV1=bbAddVertex(DrawNative,FDrawX-DrawXPos2*FDrawXS,FDrawY-DrawYPos2*FDrawYS,0, 0.5,0.5)
				bbVertexColor DrawNative,DrawV0,DrawNFR,DrawNFG,DrawNFB,DrawNFA
				bbVertexColor DrawNative,DrawV1,DrawNFR,DrawNFG,DrawNFB,DrawNFA
				bbAddTriangle(DrawNative,DrawVC,DrawV1,DrawV0)
				
				'Oval3D-Quartal-4/4-Mirror
				DrawV0=bbAddVertex(DrawNative,FDrawX-DrawXPos1*FDrawXS,FDrawY+DrawYPos1*FDrawYS,0, 0.5,0.5)
				DrawV1=bbAddVertex(DrawNative,FDrawX-DrawXPos2*FDrawXS,FDrawY+DrawYPos2*FDrawYS,0, 0.5,0.5)
				bbVertexColor DrawNative,DrawV0,DrawNFR,DrawNFG,DrawNFB,DrawNFA
				bbVertexColor DrawNative,DrawV1,DrawNFR,DrawNFG,DrawNFB,DrawNFA
				bbAddTriangle(DrawNative,DrawVC,DrawV1,DrawV0)
			Next
		End If
	End If
End Function


An example :
'Strict

Import blitz3d.blitz3dsdk

Include "Inc_Perfect.bmx"

Global Size_X = 1024
Global Size_Y = 768

bbBeginBlitz3D()
bbGraphics3D Size_X,Size_Y,32,2

Global Camera=bbCreateCamera()
bbCameraClsColor camera,64,64,72




DrawInit3D(Camera)
NativeInit3D()
Origin3D(Size_X,Size_Y)

Global font1=LoadFont3D("cosmic.png",2,2)
SetFont3D(10,1,1,0)
'SetFont3D(18,1)

Global Ox=-(Size_X/2)
Global Oy=(Size_Y/2)


' --------------------
' Refresh frame number
' --------------------
Global AppFPS =45
Local FrameElapsed
Local FrameTicks
Local FrameTween:Float

Local FramePeriod = 1000 / AppFPS
Local FrameTime = MilliSecs () - FramePeriod

' -------------
' Main loop
' -------------
While Not bbKeyHit(1) Or AppTerminate()
	' -------------------
	' Frame rate limiting
	' -------------------
	Repeat
		FrameElapsed = MilliSecs () - FrameTime
	Until FrameElapsed

	FrameTicks = FrameElapsed / FramePeriod
	FrameTween# = Float (FrameElapsed Mod FramePeriod) / Float (FramePeriod)
	
	' ---------------
	' Update tweening
	' ---------------
	For Local FrameLimit = 1 To FrameTicks
		If FrameLimit = FrameTicks Then
			bbCaptureWorld
		EndIf

		FrameTime = FrameTime + FramePeriod
		
		UpdateGame ()		
		bbUpdateWorld
	Next

'SetFont3D(1,1,1,0)
'ColorT3D(255,255,255)
Text3D(font1,MouseX3D,MouseY3D,"A",1)


'Oval3D(50,50,100,100,0,1)

	ColorN3D(255,255,255,1)
	Line3D(Ox,Oy,MouseX3D,MouseY3D,1)
	
	ColorN3D(255,0,255,1)
	Plot3D(MouseX3D,MouseY3D,5)

	ColorN3D(255,255,0,1)	
	'Rect3D(MouseX3D+50,MouseY3D-50,50,50,False,1)


	Rect3D(MouseX3D,MouseY3D,512,384,False,1)

	ColorN3D(0,255,255,1)	
	Rect3D(Ox,Oy,512,384,False,1)
		
	bbRenderWorld FrameTween
	

	
	Clear3D()
	
	bbText 50,50,MouseX3D+" / "+MouseY3D
	
	bbFlip False
Wend

Function UpdateGame()

End Function


BTW..is your problem solwed now with 3.1 ?

Yes! Text Problems are out :)

Here is the 3.1 version :
http://www.blitzbasic.com/Community/posts.php?topic=75651