Draw3D v3.1

Blitz3D Forums/Blitz3D Programming/Draw3D v3.1

Version : 3.1
(Discussion about 3.0 are here : http://www.blitzbasic.com/Community/posts.php?topic=75362 )

Beta of 3.1 : http://www.hectic.de/data/Draw3D.V.3.1.rar
Note: 3.1 is not 100% compatible to 3.0, this beta is only for testing. More informations soon (~end of the week)

Thanks to report every bug/problem here.

That name is sorta misleading, considering what it's doing is drawing 2D graphics, not 3D.

If that is your only problem, we are happy. ;)

Good job guys, looking forward to testing it over the weekend!

danke shön!

..thatz my boyz...I need this...luv ya..

Hi :)

Here is the version for blitz3D SDK, i hope do not forget
anything :) Is there a way to draw rectangle from the left
up corner ?

Library 3.1
'Draw3D.V.3.1
'29.01.2008
'Autor.hectic
'www.hectic.de

' convertion & modification
' - To b3dsdk by filax

'====-===-==-=-O-P-T-I-O-N-S-=---- --- -- - -  -   -    -
Const DRAWOFFSET:Float=0.25 'Grabing-UV-Offset-Constant (Standard 0.25)
Const DRAWBANKSIZE=4096 'Drawbank-Size-Declaration (Maximal Images)
Const DRAWFONTBANKSIZE=16 'Fontbank-Size-Declaration (Maximal Fonts)
Const DRAWRECTOFFSET:Float=0.0 'Rect-Drawing-Art-Constant (Less Than 0.25)
'====-===-==-=-O-P-T-I-O-N-S-=---- --- -- - -  -   -    -

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

'Internal-Global-Variables
Global ADrawPivot:Int[2] 'Camera-Pivot-Handle
Global GDrawNFR:Int=255 'Native-Farbe-Rot
Global GDrawNFG:Int=255 'Native-Farbe-Grün
Global GDrawNFB:Int=255 'Native-Farbe-Blau
Global GDrawNFA:Float=1 'Native-Alpha-Angabe

Global GDrawTFR:Int=255 'Text3D-Farbe-Rot
Global GDrawTFG:Int=255 'Text3D-Farbe-Grün
Global GDrawTFB:Int=255 'Text3D-Farbe-Blau
Global GDrawTFA:Float=1 'Text3D-Alpha-Angabe

Global GDrawGFR:Int=255 'Grafik-Farbe-Rot
Global GDrawGFG:Int=255 'Grafik-Farbe-Grün
Global GDrawGFB:Int=255 'Grafik-Farbe-Blau
Global GDrawGFA:Float=1 'Grafik-Alpha-Angabe

Global GDrawSFont:Float=1 'Font-Größen-Skallierung
Global GDrawHFont:Float=1 'Font-Nur-Höhenskallierung
Global GDrawPFont:Float=0 'Font-Zeichenabstand-In-Pixel
Global GDrawIFont:Float=0 'Font-Kursiv-(Negativ/Positiv)-Grad
Global GDrawXScale:Float=1 'X-Skallierungsfaktor-Für-IDrawPivot
Global GDrawYScale:Float=1 'Y-Skallierungsfaktor-Für-IDrawPivot
Global GDrawXSize:Int=0 'X-Skallierungsfaktor-Für-MouseX3D
Global GDrawYSize:Int=0 'Y-Skallierungsfaktor-Für-MouseY3D
Global GDrawMouseHit:Int=0 'Für-Eigene-MouseHit-Berechnung
Global GDrawMousePit:String="" 'Für-Eigene-MousePit-Berechnung
Global GDrawBankUsed:Int=0 'Maximale-Bankbesetzung

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

'Font-Offset-Constants
Const DRAWFONTBANK=DRAWBANKXMAIN
Const DRAWFONTSIZE=DRAWBANKYMAIN
Const DRAWFONTUVSTEP:Float=1.0/16.0
Const DRAWFONTBANKSTEP=256

'Bank-Creating-And-Setting-The-Size
Global GDrawBank=CreateBank(DRAWBANKSTEP+DRAWBANKSIZE*DRAWBANKSTEP)
Global GDrawFontBank=CreateBank(DRAWFONTBANKSIZE*DRAWFONTBANKSTEP)




'DrawInit3D( Camera )
Function DrawInit3D(FDrawCamera)
	If FDrawCamera=0 Then RuntimeError "Camera not found"
	ADrawPivot[0]=bbCreatePivot(FDrawCamera)
	ADrawPivot[1]=bbCreatePivot()

	
	bbPositionEntity  ADrawPivot[0],0,0,bbGraphicsWidth()/2.0
	bbPositionEntity  ADrawPivot[1],0,0,bbGraphicsWidth()/2.0
	
	bbMoveMouse bbGraphicsWidth()/2,bbGraphicsHeight()/2
	Origin3D(bbGraphicsWidth(),bbGraphicsHeight())
	
	'MAV-Workaround-Für-FACE
	Local IDrawMesh:Int=bbCreateMesh(ADrawPivot[0])
	Local IDrawFace:Int=bbCreateSurface(IDrawMesh)
	
	PokeInt GDrawBank,DRAWBANKMESH,IDrawMesh
	PokeInt GDrawBank,DRAWBANKFACE,IDrawFace
End Function




'DrawFree3D( )
Function DrawFree3D()
	Local IDrawLoop:Int
	'Alle-Bankpositionen-Durchgehen
	For IDrawLoop=DRAWBANKSTEP To GDrawBankUsed Step DRAWBANKSTEP
		If PeekInt(GDrawBank,IDrawLoop+DRAWBANKKING)>0
			bbClearSurface PeekInt(GDrawBank,IDrawLoop+DRAWBANKFACE),True,True
			bbFreeEntity PeekInt(GDrawBank,IDrawLoop*DRAWBANKSTEP+DRAWBANKMESH)
			bbFreeTexture PeekInt(GDrawBank,IDrawLoop*DRAWBANKSTEP+DRAWBANKTEXTURE)
			PokeInt GDrawBank,IDrawLoop,0
		End If
	Next
	'Sonstiges-Freigeben
	bbFreeEntity ADrawPivot[0]
	bbFreeEntity ADrawPivot[1]
	GDrawBank=Null
End Function




'Origin3D( X-Size, Y-Size )
Function Origin3D(FDrawX:Float=0,FDrawY:Float=0)
	'Automatische-1:1-Stellung
	If FDrawX=0 And FDrawY=0 Then
		FDrawX=bbGraphicsWidth()
		FDrawY=bbGraphicsHeight()
	End If
	
	'Relationsberechnungen
	GDrawXScale=bbGraphicsWidth()/FDrawX
	GDrawYScale=bbGraphicsHeight()/FDrawY
	
	bbPositionEntity  ADrawPivot[0],0,0,(bbGraphicsWidth()/2.0)/GDrawXScale
	bbPositionEntity  ADrawPivot[1],0,0,(bbGraphicsWidth()/2.0)/GDrawXScale
	
	bbScaleEntity ADrawPivot[0],1,GDrawYScale/GDrawXScale,1
	bbScaleEntity ADrawPivot[1],1,GDrawYScale/GDrawXScale,1
	
	GDrawXSize=FDrawX
	GDrawYSize=FDrawY
End Function




'Clear3D( Handle )
Function Clear3D(FDrawFace:Int=0)
	Local IDrawLoop:Int
	If FDrawFace=0
		If MouseText3D="" Then GDrawMousePit="" Else MouseText3D=""
		
		MouseX3D=bbMouseX()/GDrawXScale-(GDrawXSize/2)
		MouseY3D=(GDrawYSize/2)-bbMouseY()/GDrawYScale
		
		For IDrawLoop=DRAWBANKSTEP To GDrawBankUsed Step DRAWBANKSTEP
			If PeekInt(GDrawBank,IDrawLoop+DRAWBANKKING)>0
				bbClearSurface PeekInt(GDrawBank,IDrawLoop+DRAWBANKFACE),True,True
			End If
		Next
	Else
		bbClearSurface PeekInt(GDrawBank,FDrawFace+DRAWBANKFACE),True,True
	End If
End Function




'ClearOn3D( Handle )
Function ClearOn3D(FDrawHandle:Int)
	Local LDrawKing:Int=PeekInt(GDrawBank,FDrawHandle+DRAWBANKKING)
	Local IDrawMaster:Int=DRAWBANKSTEP+DRAWBANKSIZE*DRAWBANKSTEP
	If LDrawKing=-IDrawMaster-FDrawHandle Then PokeInt(GDrawBank,FDrawHandle,FDrawHandle)
End Function




'ClearOff3D( Handle )
Function ClearOff3D(FDrawHandle:Int)
	Local LDrawKing:Int=PeekInt(GDrawBank,FDrawHandle+DRAWBANKKING)
	Local IDrawMaster:Int=DRAWBANKSTEP+DRAWBANKSIZE*DRAWBANKSTEP
	If LDrawKing>0 Then PokeInt(GDrawBank,LDrawKing,-LDrawKing-IDrawMaster)
End Function




'ColorN3D( Red, Green, Blue, Alpha )
Function ColorN3D(FDrawFR:Int=255,FDrawFG:Int=255,FDrawFB:Int=255,FDrawFA:Float=1)
	GDrawNFR=FDrawFR
	GDrawNFG=FDrawFG
	GDrawNFB=FDrawFB
	GDrawNFA=FDrawFA
End Function




'ColorT3D( Red, Green, Blue, Alpha )
Function ColorT3D(FDrawFR:Int=255,FDrawFG:Int=255,FDrawFB:Int=255,FDrawFA:Float=1)
	GDrawTFR=FDrawFR
	GDrawTFG=FDrawFG
	GDrawTFB=FDrawFB
	GDrawTFA=FDrawFA
End Function




'ColorG3D( Red, Green, Blue, Alpha )
Function ColorG3D(FDrawFR:Int=255,FDrawFG:Int=255,FDrawFB:Int=255,FDrawFA:Float=1)
	GDrawGFR=FDrawFR
	GDrawGFG=FDrawFG
	GDrawGFB=FDrawFB
	GDrawGFA=FDrawFA
End Function




'SetFont3D( Font-Size, Font-Height, Font-Padding, Italic-Font)
Function SetFont3D(FDrawSFont:Float=1,FDrawHFont:Float=1,FDrawPFont:Float=0,FDrawIFont:Float=0)
	GDrawSFont=FDrawSFont
	GDrawHFont=FDrawHFont
	GDrawPFont=FDrawPFont
	GDrawIFont=FDrawIFont
End Function




'LoadFont3D( Texture-Name, Texture-Mode, Texture-Blend, Texture-Pivot )
Function LoadFont3D(FDrawFile:String,FDrawMode:Int=2,FDrawBlend:Int=2,FDrawPivot:Int=0)
	If FileType(FDrawFile)<>1 Then RuntimeError FDrawFile+" not found"
	'Variablen-Vorberechnung
	If FDrawMode<0 Then FDrawMode=0
	If FDrawMode>4 Then FDrawMode=4
	If FDrawBlend<0 Then FDrawBlend=0
	If FDrawBlend>5 Then FDrawBlend=5
	If FDrawPivot<0 Then FDrawPivot=0
	If FDrawPivot>1 Then FDrawPivot=1
	
	'Neue-Bank-Positionen-Festlegen
	Local IDrawBankPosition:Int=XDrawBP3D()
	Local IDrawFontBankPosition:Int=XDrawFP3D()
	'Variablen-Vorberechnung
	Local IDrawXLoop:Int=0
	Local IDrawYLoop:Int=0
	Local IDrawValue:Int=0
	Local IDrawKing:Int=IDrawBankPosition
	Local IDrawMesh:Int=bbCreateMesh(ADrawPivot(FDrawPivot))
	Local IDrawFace:Int=bbCreateSurface(IDrawMesh)
	Local IDrawTexture:Int=bbLoadTexture(FDrawFile,FDrawMode)
	Local IDrawXMain:Int=bbTextureWidth(IDrawTexture)
	Local IDrawYMain:Int=bbTextureHeight(IDrawTexture)
	Local IDrawXSize:Int=IDrawXMain/16
	'DrawBank-Variablen-EINweisung
	PokeInt GDrawBank,IDrawBankPosition+DRAWBANKKING,IDrawKing
	PokeInt GDrawBank,IDrawBankPosition+DRAWBANKMESH,IDrawMesh
	PokeInt GDrawBank,IDrawBankPosition+DRAWBANKFACE,IDrawFace
	PokeInt GDrawBank,IDrawBankPosition+DRAWBANKTEXTURE,IDrawTexture
	PokeInt GDrawBank,IDrawBankPosition+DRAWFONTBANK,IDrawFontBankPosition
	PokeInt GDrawBank,IDrawBankPosition+DRAWFONTSIZE,IDrawXSize
	
	'Sonstige-Zuweisung/Berechnungen
	bbEntityTexture IDrawMesh,IDrawTexture
	bbTextureBlend IDrawTexture,FDrawBlend
'	bbEntityOrder IDrawMesh,-1000-IDrawKing/DRAWBANKSTEP
	bbEntityFx IDrawMesh,1+2+8+16
	XDrawMP3D(IDrawKing,FDrawMode)
	
	'Zeichenspezifische-Festlegung
	For IDrawYLoop=0 To 15
		For IDrawXLoop=0 To 15
			IDrawValue=XDrawTT3D(IDrawTexture,IDrawXMain,IDrawYMain,IDrawXLoop,IDrawYLoop)
			PokeByte GDrawFontBank,IDrawFontBankPosition+IDrawXLoop+IDrawYLoop*16,IDrawValue
		Next
	Next
	
	IDrawValue=PeekByte(GDrawFontBank,IDrawFontBankPosition+33)
	PokeByte GDrawFontBank,IDrawFontBankPosition+DRAWBANKKING,1
	PokeByte GDrawFontBank,IDrawFontBankPosition+32,IDrawValue
	
	'Variablen-Ausstiegsvorbereitung
	Return IDrawKing
End Function




'LoadImage3D( Texture-Name, Texture-Mode, Texture-Blend, Texture-Pivot )
Function LoadImage3D(FDrawFile:String,FDrawMode:Int=2,FDrawBlend:Int=2,FDrawPivot:Int=0)
	If FileType(FDrawFile)<>1 Then RuntimeError FDrawFile+" not found"
	'Variablen-Vorberechnung
	If FDrawMode<0 Then FDrawMode=0
	If FDrawMode>4 Then FDrawMode=4
	If FDrawBlend<0 Then FDrawBlend=0
	If FDrawBlend>5 Then FDrawBlend=5
	If FDrawPivot<0 Then FDrawPivot=0
	If FDrawPivot>1 Then FDrawPivot=1
	'Neue-Bank-Position-Festlegen
	Local IDrawBankPosition:Int=XDrawBP3D()
	'Variablen-Vorberechnung
	Local IDrawKing:Int=IDrawBankPosition
	Local IDrawMesh:Int=bbCreateMesh(ADrawPivot(FDrawPivot))
	Local IDrawFace:Int=bbCreateSurface(IDrawMesh)
	Local IDrawTexture:Int=bbLoadTexture(FDrawFile,FDrawMode)
	Local IDrawXMain:Int=bbTextureWidth(IDrawTexture)/2
	Local IDrawYMain:Int=bbTextureHeight(IDrawTexture)/2
	Local IDrawXSize:Int=IDrawXMain
	Local IDrawYSize:Int=IDrawYMain
	Local IDrawU1Map:Float=0+(DRAWOFFSET/IDrawXMain)
	Local IDrawV1Map:Float=0+(DRAWOFFSET/IDrawYMain)
	Local IDrawU2Map:Float=1-(DRAWOFFSET/IDrawXMain)
	Local IDrawV2Map:Float=1-(DRAWOFFSET/IDrawYMain)
	'DrawBank-Variablen-EINweisung
	PokeInt GDrawBank,IDrawBankPosition+DRAWBANKKING,IDrawKing
	PokeInt GDrawBank,IDrawBankPosition+DRAWBANKMESH,IDrawMesh
	PokeInt GDrawBank,IDrawBankPosition+DRAWBANKFACE,IDrawFace
	PokeInt GDrawBank,IDrawBankPosition+DRAWBANKTEXTURE,IDrawTexture
	PokeInt GDrawBank,IDrawBankPosition+DRAWBANKXMAIN,IDrawXMain
	PokeInt GDrawBank,IDrawBankPosition+DRAWBANKYMAIN,IDrawYMain
	PokeInt GDrawBank,IDrawBankPosition+DRAWBANKXSIZE,IDrawXSize
	PokeInt GDrawBank,IDrawBankPosition+DRAWBANKYSIZE,IDrawYSize
	PokeFloat GDrawBank,IDrawBankPosition+DRAWBANKU1MAP,IDrawU1Map
	PokeFloat GDrawBank,IDrawBankPosition+DRAWBANKV1MAP,IDrawV1Map
	PokeFloat GDrawBank,IDrawBankPosition+DRAWBANKU2MAP,IDrawU2Map
	PokeFloat GDrawBank,IDrawBankPosition+DRAWBANKV2MAP,IDrawV2Map
	'Sonstige-Zuweisung/Berechnungen
	bbEntityTexture IDrawMesh,IDrawTexture
	bbTextureBlend IDrawTexture,FDrawBlend
	bbEntityOrder IDrawMesh,-1000-IDrawKing/DRAWBANKSTEP
	bbEntityFx IDrawMesh,1+2+8+16
	XDrawMP3D(IDrawKing,FDrawMode)
	'Variablen-Ausstiegsvorbereitung
	Return IDrawKing
End Function




'GrabImage3D( Handle, U-Start-Position, V-Start-Position, U-Size, V-Size, X-Scale, Y-Scale )
Function GrabImage3D(FDrawHandle:Int,FDrawUP:Float,FDrawVP:Float,FDrawUSize:Float,FDrawVSize:Float,FDrawXScale:Float=1,FDrawYScale:Float=1)
	If FDrawHandle<0 Then RuntimeError "Grabbing only main-images!"
	'Variablen-Vorberechnung
	FDrawUP=FDrawUP/2.0
	FDrawVP=FDrawVP/2.0
	FDrawUSize=FDrawUSize/2.0
	FDrawVSize=FDrawVSize/2.0
	'Neue-Bank-Position-Festlegen
	Local IDrawBankPosition:Int=XDrawBP3D()
	'DrawBank-Variablen-AUSweisung
	Local LDrawMesh:Int=PeekInt(GDrawBank,FDrawHandle+DRAWBANKMESH)
	Local LDrawFace:Int=PeekInt(GDrawBank,FDrawHandle+DRAWBANKFACE)
	Local LDrawTexture:Int=PeekInt(GDrawBank,FDrawHandle+DRAWBANKTEXTURE)
	Local LDrawXMain:Int=PeekInt(GDrawBank,FDrawHandle+DRAWBANKXMAIN)
	Local LDrawYMain:Int=PeekInt(GDrawBank,FDrawHandle+DRAWBANKYMAIN)
	'DrawBank-Variablen-EINweisung
	PokeInt GDrawBank,IDrawBankPosition+DRAWBANKKING,-FDrawHandle
	PokeInt GDrawBank,IDrawBankPosition+DRAWBANKMESH,LDrawMesh
	PokeInt GDrawBank,IDrawBankPosition+DRAWBANKFACE,LDrawFace
	PokeInt GDrawBank,IDrawBankPosition+DRAWBANKTEXTURE,LDrawTexture
	PokeInt GDrawBank,IDrawBankPosition+DRAWBANKXMAIN,LDrawXMain
	PokeInt GDrawBank,IDrawBankPosition+DRAWBANKYMAIN,LDrawYMain
	PokeInt GDrawBank,IDrawBankPosition+DRAWBANKXSIZE,Abs(FDrawUSize)*FDrawXScale
	PokeInt GDrawBank,IDrawBankPosition+DRAWBANKYSIZE,Abs(FDrawVSize)*FDrawYScale
	PokeFloat GDrawBank,IDrawBankPosition+DRAWBANKU1MAP,(FDrawUP/LDrawXMain)+(DRAWOFFSET/LDrawXMain*Sgn(FDrawUSize))
	PokeFloat GDrawBank,IDrawBankPosition+DRAWBANKV1MAP,(FDrawVP/LDrawYMain)+(DRAWOFFSET/LDrawYMain*Sgn(FDrawVSize))
	PokeFloat GDrawBank,IDrawBankPosition+DRAWBANKU2MAP,(FDrawUP+FDrawUSize)/LDrawXMain-(DRAWOFFSET/LDrawXMain*Sgn(FDrawUSize))
	PokeFloat GDrawBank,IDrawBankPosition+DRAWBANKV2MAP,(FDrawVP+FDrawVSize)/LDrawYMain-(DRAWOFFSET/LDrawYMain*Sgn(FDrawVSize))
	'Variablen-Ausstiegsvorbereitung
	Return IDrawBankPosition
End Function




'DrawImage3D( Handle, X-Center-Position, Y-Center-Position, Button, Rotation, Image-Frame )
Function DrawImage3D(FDrawHandle:Int,FDrawX:Float,FDrawY:Float,FDrawButton:Int=0,FDrawAngle:Float=0,FDrawScale:Float=1,FDrawFrame:Int=0)
	FDrawFrame=FDrawFrame*DRAWBANKSTEP
	'DrawBank-Variablen-AUSweisung
	Local LDrawFace:Int=PeekInt(GDrawBank,FDrawHandle+DRAWBANKFACE+FDrawFrame)
	Local LDrawXSize:Float=PeekInt(GDrawBank,FDrawHandle+DRAWBANKXSIZE+FDrawFrame)*FDrawScale
	Local LDrawYSize:Float=PeekInt(GDrawBank,FDrawHandle+DRAWBANKYSIZE+FDrawFrame)*FDrawScale
	Local LDrawU1Map:Float=PeekFloat(GDrawBank,FDrawHandle+DRAWBANKU1MAP+FDrawFrame)
	Local LDrawV1Map:Float=PeekFloat(GDrawBank,FDrawHandle+DRAWBANKV1MAP+FDrawFrame)
	Local LDrawU2Map:Float=PeekFloat(GDrawBank,FDrawHandle+DRAWBANKU2MAP+FDrawFrame)
	Local LDrawV2Map:Float=PeekFloat(GDrawBank,FDrawHandle+DRAWBANKV2MAP+FDrawFrame)
	'Variablen-Vorberechnung
	FDrawX=FDrawX-0.5
	FDrawY=FDrawY+0.5
	If FDrawAngle<>0 Then
		Local IDrawAngle:Float=ATan2(LDrawYSize,LDrawXSize)
		Local IDrawRadius:Float=Sqr((LDrawXSize*LDrawXSize)+(LDrawYSize*LDrawYSize))
		Local IDrawXPos1:Float=Cos(IDrawAngle+FDrawAngle)*IDrawRadius
		Local IDrawYPos1:Float=Sin(IDrawAngle+FDrawAngle)*IDrawRadius
		Local IDrawXPos2:Float=Cos(IDrawAngle-FDrawAngle)*IDrawRadius
		Local IDrawYPos2:Float=Sin(IDrawAngle-FDrawAngle)*IDrawRadius
	Else
		IDrawXPos1=LDrawXSize
		IDrawYPos1=LDrawYSize
		IDrawXPos2=LDrawXSize
		IDrawYPos2=LDrawYSize
	End If
	'Vertex/Ploygon-Zuweisung/Berechnungen
	Local IDrawV0=bbAddVertex(LDrawFace,FDrawX-IDrawXPos1,FDrawY+IDrawYPos1,0 ,LDrawU1Map,LDrawV1Map)
	Local IDrawV1=bbAddVertex(LDrawFace,FDrawX+IDrawXPos2,FDrawY+IDrawYPos2,0 ,LDrawU2Map,LDrawV1Map)
	Local IDrawV2=bbAddVertex(LDrawFace,FDrawX+IDrawXPos1,FDrawY-IDrawYPos1,0 ,LDrawU2Map,LDrawV2Map)
	Local IDrawV3=bbAddVertex(LDrawFace,FDrawX-IDrawXPos2,FDrawY-IDrawYPos2,0 ,LDrawU1Map,LDrawV2Map)
	bbVertexColor LDrawFace,IDrawV0,GDrawGFR,GDrawGFG,GDrawGFB,GDrawGFA
	bbVertexColor LDrawFace,IDrawV1,GDrawGFR,GDrawGFG,GDrawGFB,GDrawGFA
	bbVertexColor LDrawFace,IDrawV2,GDrawGFR,GDrawGFG,GDrawGFB,GDrawGFA
	bbVertexColor LDrawFace,IDrawV3,GDrawGFR,GDrawGFG,GDrawGFB,GDrawGFA
	bbAddTriangle LDrawFace,IDrawV0,IDrawV1,IDrawV2
	bbAddTriangle LDrawFace,IDrawV2,IDrawV3,IDrawV0
	If FDrawButton<>0 Then CheckQuad3D(FDrawX-IDrawXPos1,FDrawY+IDrawYPos1,FDrawX+IDrawXPos2,FDrawY+IDrawYPos2,FDrawX+IDrawXPos1,FDrawY-IDrawYPos1,FDrawX-IDrawXPos2,FDrawY-IDrawYPos2,FDrawButton,"image:"+String(FDrawHandle/DRAWBANKSTEP))
End Function




'ImageLine3D( Handle, X-Start, Y-Start, X-End, Y-End, IDrawing-Size, IDrawing-Mode, Image-Frame )
Function ImageLine3D(FDrawHandle:Int,FDrawX1:Float,FDrawY1:Float,FDrawX2:Float,FDrawY2:Float,FDrawSize:Float,FDrawMode:Int=0,FDrawFrame:Int=0)
	If FDrawX1<>FDrawX2 Or FDrawY1<>FDrawY2 Then
		FDrawFrame=FDrawFrame*DRAWBANKSTEP
		
		'DrawBank-Variablen-AUSweisung
		Local LDrawFace:Int=PeekInt(GDrawBank,FDrawHandle+DRAWBANKFACE+FDrawFrame)
		Local LDrawXSize:Int=PeekInt(GDrawBank,FDrawHandle+DRAWBANKXSIZE+FDrawFrame)
		
		Local LDrawU1Map:Float=PeekFloat(GDrawBank,FDrawHandle+DRAWBANKU1MAP+FDrawFrame)
		Local LDrawV1Map:Float=PeekFloat(GDrawBank,FDrawHandle+DRAWBANKV1MAP+FDrawFrame)
		Local LDrawU2Map:Float=PeekFloat(GDrawBank,FDrawHandle+DRAWBANKU2MAP+FDrawFrame)
		Local LDrawV2Map:Float=PeekFloat(GDrawBank,FDrawHandle+DRAWBANKV2MAP+FDrawFrame)
		
		'Variablen-Vorberechnung
		bbTFormNormal FDrawX2-FDrawX1,FDrawY2-FDrawY1,0,0,0
		Local IDrawXTForm:Float=bbTFormedX()*FDrawSize
		Local IDrawYTForm:Float=bbTFormedY()*FDrawSize
		
		'Modus-Rollen
		If FDrawMode=1 Then
			Local IDrawLineSize:Float=Sqr((FDrawX1-FDrawX2)*(FDrawX1-FDrawX2)+(FDrawY1-FDrawY2)*(FDrawY1-FDrawY2))
			LDrawU2Map:Float=LDrawU1Map+(IDrawLineSize/PeekInt(GDrawBank,FDrawHandle+DRAWBANKXMAIN))/2
		End If
		
		'Modus-Absolut
		If FDrawMode=2 Then
			FDrawX2=FDrawX1+bbTFormedX()*LDrawXSize*2
			FDrawY2=FDrawY1+bbTFormedY()*LDrawXSize*2
		End If
		
		'Vertex/Ploygon-Zuweisung/Berechnungen
		Local IDrawV0=bbAddVertex(LDrawFace,FDrawX1-IDrawYTForm-0.5,FDrawY1+IDrawXTForm+0.5,0, LDrawU1Map,LDrawV1Map)
		Local IDrawV1=bbAddVertex(LDrawFace,FDrawX2-IDrawYTForm-0.5,FDrawY2+IDrawXTForm+0.5,0, LDrawU2Map,LDrawV1Map)
		Local IDrawV2=bbAddVertex(LDrawFace,FDrawX2+IDrawYTForm-0.5,FDrawY2-IDrawXTForm+0.5,0, LDrawU2Map,LDrawV2Map)
		Local IDrawV3=bbAddVertex(LDrawFace,FDrawX1+IDrawYTForm-0.5,FDrawY1-IDrawXTForm+0.5,0, LDrawU1Map,LDrawV2Map)
		
		bbVertexColor LDrawFace,IDrawV0,GDrawGFR,GDrawGFG,GDrawGFB,GDrawGFA
		bbVertexColor LDrawFace,IDrawV1,GDrawGFR,GDrawGFG,GDrawGFB,GDrawGFA
		bbVertexColor LDrawFace,IDrawV2,GDrawGFR,GDrawGFG,GDrawGFB,GDrawGFA
		bbVertexColor LDrawFace,IDrawV3,GDrawGFR,GDrawGFG,GDrawGFB,GDrawGFA
		
		bbAddTriangle(LDrawFace,IDrawV0,IDrawV1,IDrawV2)
		bbAddTriangle(LDrawFace,IDrawV2,IDrawV3,IDrawV0)
	End If
End Function




'DrawQuad3D( Handle, X1-Pos, Y1-Pos, X2-Pos, Y2-Pos, X3-Pos, Y3-Pos, X4-Pos, Y4-Pos, Button, Image-Frame )
Function DrawQuad3D(FDrawHandle:Int,FDrawX1:Float,FDrawY1:Float,FDrawX2:Float,FDrawY2:Float,FDrawX3:Float,FDrawY3:Float,FDrawX4:Float,FDrawY4:Float,FDrawButton:Int=0,FDrawFrame:Int=0)
	FDrawFrame=FDrawFrame*DRAWBANKSTEP
	'DrawBank-Variablen-AUSweisung
	Local LDrawFace:Int=PeekInt(GDrawBank,FDrawHandle+DRAWBANKFACE+FDrawFrame)
	Local LDrawU1Map:Float=PeekFloat(GDrawBank,FDrawHandle+DRAWBANKU1MAP+FDrawFrame)
	Local LDrawV1Map:Float=PeekFloat(GDrawBank,FDrawHandle+DRAWBANKV1MAP+FDrawFrame)
	Local LDrawU2Map:Float=PeekFloat(GDrawBank,FDrawHandle+DRAWBANKU2MAP+FDrawFrame)
	Local LDrawV2Map:Float=PeekFloat(GDrawBank,FDrawHandle+DRAWBANKV2MAP+FDrawFrame)
	'Vertex/Ploygon-Zuweisung/Berechnungen
	Local IDrawV0=bbAddVertex(LDrawFace,FDrawX1-0.5,FDrawY1+0.5,0 ,LDrawU1Map,LDrawV1Map)
	Local IDrawV1=bbAddVertex(LDrawFace,FDrawX2-0.5,FDrawY2+0.5,0 ,LDrawU2Map,LDrawV1Map)
	Local IDrawV2=bbAddVertex(LDrawFace,FDrawX3-0.5,FDrawY3+0.5,0 ,LDrawU2Map,LDrawV2Map)
	Local IDrawV3=bbAddVertex(LDrawFace,FDrawX4-0.5,FDrawY4+0.5,0 ,LDrawU1Map,LDrawV2Map)
	bbVertexColor LDrawFace,IDrawV0,GDrawGFR,GDrawGFG,GDrawGFB,GDrawGFA
	bbVertexColor LDrawFace,IDrawV1,GDrawGFR,GDrawGFG,GDrawGFB,GDrawGFA
	bbVertexColor LDrawFace,IDrawV2,GDrawGFR,GDrawGFG,GDrawGFB,GDrawGFA
	bbVertexColor LDrawFace,IDrawV3,GDrawGFR,GDrawGFG,GDrawGFB,GDrawGFA
	bbAddTriangle LDrawFace,IDrawV0,IDrawV1,IDrawV2
	bbAddTriangle LDrawFace,IDrawV2,IDrawV3,IDrawV0
	If FDrawButton<>0 Then CheckQuad3D(FDrawX1,FDrawY1,FDrawX2,FDrawY2,FDrawX3,FDrawY3,FDrawX4,FDrawY4,FDrawButton,"image:"+String(FDrawHandle/DRAWBANKSTEP))
End Function




'DrawMouse3D( Handle, Angle, Scale )
Function DrawMouse3D(FDrawHandle:Int,FDrawAngle:Float=0,FDrawScale:Float=1)
	'DrawBank-Variablen-AUSweisung
	Local LDrawFace:Int=PeekInt(GDrawBank,FDrawHandle+DRAWBANKFACE)
	'Variablen-Vorberechnung
	Local IDrawXPos1:Float=Cos(25.5+FDrawAngle+90)*64*FDrawScale
	Local IDrawYPos1:Float=Sin(25.5+FDrawAngle+90)*64*FDrawScale
	Local IDrawXPos2:Float=Cos(25.5-FDrawAngle-90)*64*FDrawScale
	Local IDrawYPos2:Float=Sin(25.5-FDrawAngle-90)*64*FDrawScale
	'Vertex/Ploygon-Zuweisung/Berechnungen
	Local IDrawV0=bbAddVertex(LDrawFace,MouseX3D-IDrawXPos1-0.5,MouseY3D+IDrawYPos1+0.5,0 ,0.002,0.002)
	Local IDrawV1=bbAddVertex(LDrawFace,MouseX3D+IDrawXPos2-0.5,MouseY3D+IDrawYPos2+0.5,0 ,0.248,0.002)
	Local IDrawV2=bbAddVertex(LDrawFace,MouseX3D+IDrawXPos1-0.5,MouseY3D-IDrawYPos1+0.5,0 ,0.248,0.123)
	Local IDrawV3=bbAddVertex(LDrawFace,MouseX3D-IDrawXPos2-0.5,MouseY3D-IDrawYPos2+0.5,0 ,0.002,0.123)
	bbVertexColor LDrawFace,IDrawV0,GDrawTFR,GDrawTFG,GDrawTFB,GDrawTFA
	bbVertexColor LDrawFace,IDrawV1,GDrawTFR,GDrawTFG,GDrawTFB,GDrawTFA
	bbVertexColor LDrawFace,IDrawV2,GDrawTFR,GDrawTFG,GDrawTFB,GDrawTFA
	bbVertexColor LDrawFace,IDrawV3,GDrawTFR,GDrawTFG,GDrawTFB,GDrawTFA
	bbAddTriangle LDrawFace,IDrawV0,IDrawV1,IDrawV2
	bbAddTriangle LDrawFace,IDrawV2,IDrawV3,IDrawV0
End Function




'OnLockBuffer3D( Handle )
Function OnLockBuffer3D(FDrawHandle:Int)
	Local LDrawTexture:Int=PeekInt(GDrawBank,FDrawHandle+DRAWBANKTEXTURE)
	bbLockBuffer bbTextureBuffer(LDrawTexture)
End Function




'UnLockBuffer3D( Handle )
Function UnLockBuffer3D(FDrawHandle:Int)
	Local LDrawTexture:Int=PeekInt(GDrawBank,FDrawHandle+DRAWBANKTEXTURE)
	bbUnLockBuffer bbTextureBuffer(LDrawTexture)
End Function




'SetPixel3D( Handle, X-Position, Y-Position, ARGB-Color )
Function SetPixel3D(FDrawHandle:Int,FDrawX:Int,FDrawY:Int,FDrawARGB:Int=0)
	Local LDrawTexture:Int=PeekInt(GDrawBank,FDrawHandle+DRAWBANKTEXTURE)
	bbWritePixelFast FDrawX,FDrawY,FDrawARGB,bbTextureBuffer(LDrawTexture)
End Function




'GetPixel3D( Handle, X-Position, Y-Position, ARGB-Mask )
Function GetPixel3D(FDrawHandle:Int,FDrawX:Int,FDrawY:Int,FDrawMask:Int=$FFFFFFFF)
	Local LDrawTexture:Int=PeekInt(GDrawBank,FDrawHandle+DRAWBANKTEXTURE)
	Local IDrawARGB:Int=bbReadPixelFast(FDrawX,FDrawY,bbTextureBuffer(LDrawTexture))
	If FDrawMask<>$FFFFFFFF Then
		Local IDrawRPMXPos:Int=0
		Local IDrawRPMWert:Int=0
		Local IDrawRPMPlus:Int=1
		'Maske-Zusammenfassen
		For IDrawRPMXPos=0 To 31
			If FDrawMask And 2^IDrawRPMXPos Then
				If IDrawARGB And 2^IDrawRPMXPos Then
					IDrawRPMWert=IDrawRPMWert+IDrawRPMPlus
				End If
				IDrawRPMPlus=IDrawRPMPlus*2
			End If
		Next
		'Ausgabe-Mit-Maske
		Return IDrawRPMWert
	Else
		'Reine-Ausgabe
		Return IDrawARGB
	End If
End Function




'SetTexel3D( Handle, X-Bullet, Y-Bullet, X-Image, Y-Image, Image-Angle, Image-Scale, ARGB-Color )
Function SetTexel3D(FDrawHandle:Int,FDrawX1:Float,FDrawY1:Float,FDrawX2:Float,FDrawY2:Float,FDrawAngle:Float=0,FDrawScale:Float=1,FDrawARGB:Int=0)
	'DrawBank-Variablen-AUSweisung
	Local LDrawTexture:Int=PeekInt(GDrawBank,FDrawHandle+DRAWBANKTEXTURE)
	Local LDrawXMain:Int=PeekInt(GDrawBank,FDrawHandle+DRAWBANKXMAIN)
	Local LDrawYMain:Int=PeekInt(GDrawBank,FDrawHandle+DRAWBANKYMAIN)
	Local LDrawXSize:Int=PeekInt(GDrawBank,FDrawHandle+DRAWBANKXSIZE)*FDrawScale
	Local LDrawYSize:Int=PeekInt(GDrawBank,FDrawHandle+DRAWBANKYSIZE)*FDrawScale
	Local LDrawU1Map:Float=PeekFloat(GDrawBank,FDrawHandle+DRAWBANKU1MAP)
	Local LDrawV1Map:Float=PeekFloat(GDrawBank,FDrawHandle+DRAWBANKV1MAP)
	Local LDrawU2Map:Float=PeekFloat(GDrawBank,FDrawHandle+DRAWBANKU2MAP)
	Local LDrawV2Map:Float=PeekFloat(GDrawBank,FDrawHandle+DRAWBANKV2MAP)
	'Variablen-Vorberechnung
	FDrawX2=FDrawX2-0.5
	FDrawY2=FDrawY2+0.5
	Local IDrawXOffset:Float=LDrawXMain*2*LDrawU1Map-1
	Local IDrawYOffset:Float=LDrawYMain*2*LDrawV1Map-1
	Local IDrawXScale:Float=(LDrawXMain*2*LDrawU2Map)-IDrawXOffset
	Local IDrawYScale:Float=(LDrawYMain*2*LDrawV2Map)-IDrawYOffset
	Local IDrawXRelative:Float=FDrawX1-FDrawX2
	Local IDrawYRelative:Float=FDrawY1-FDrawY2
	Local IDrawURelative:Float=0
	Local IDrawVRelative:Float=0
	'Texel/Textur-Setzen
	If FDrawAngle=0 Then
		If IDrawXRelative>-LDrawXSize Then
			If IDrawXRelative<+LDrawXSize Then
				If IDrawYRelative>-LDrawYSize Then
					If IDrawYRelative<+LDrawYSize Then
						IDrawURelative:Float=0.5+(IDrawXRelative/LDrawXSize*0.5)
						IDrawVRelative:Float=0.5-(IDrawYRelative/LDrawYSize*0.5)
						bbWritePixelFast IDrawXOffset+IDrawXScale*IDrawURelative,IDrawYOffset+IDrawYScale*IDrawVRelative,FDrawARGB,bbTextureBuffer(LDrawTexture)
					End If
				End If
			End If
		End If
	Else
		Local IDrawAngle:Float=ATan2(IDrawYRelative,IDrawXRelative)
		Local IDrawRadius:Float=Sqr((Abs(IDrawXRelative*IDrawXRelative))+(Abs(IDrawYRelative*IDrawYRelative)))
		IDrawXRelative=Cos(-FDrawAngle-IDrawAngle)*IDrawRadius
		IDrawYRelative=Sin(-FDrawAngle-IDrawAngle)*IDrawRadius
		If IDrawXRelative>-LDrawXSize Then
			If IDrawXRelative<+LDrawXSize Then
				If IDrawYRelative>-LDrawYSize Then
					If IDrawYRelative<+LDrawYSize Then
						IDrawURelative:Float=0.5+(IDrawXRelative/LDrawXSize*0.5)
						IDrawVRelative:Float=0.5+(IDrawYRelative/LDrawYSize*0.5)
						bbWritePixelFast IDrawXOffset+IDrawXScale*IDrawURelative,IDrawYOffset+IDrawYScale*IDrawVRelative,FDrawARGB,bbTextureBuffer(LDrawTexture)
					End If
				End If
			End If
		End If
	End If
End Function




'GetTexel3D( Handle, X-Bullet, Y-Bullet, X-Image, Y-Image, Image-Angle, Image-Scale, ARGB-Mask )
Function GetTexel3D(FDrawHandle:Int,FDrawX1:Float,FDrawY1:Float,FDrawX2:Float,FDrawY2:Float,FDrawAngle:Float=0,FDrawScale:Float=1,FDrawMask:Int=$FFFFFFFF)
	'DrawBank-Variablen-AUSweisung
	Local LDrawTexture:Int=PeekInt(GDrawBank,FDrawHandle+DRAWBANKTEXTURE)
	Local LDrawXMain:Int=PeekInt(GDrawBank,FDrawHandle+DRAWBANKXMAIN)
	Local LDrawYMain:Int=PeekInt(GDrawBank,FDrawHandle+DRAWBANKYMAIN)
	Local LDrawXSize:Int=PeekInt(GDrawBank,FDrawHandle+DRAWBANKXSIZE)*FDrawScale
	Local LDrawYSize:Int=PeekInt(GDrawBank,FDrawHandle+DRAWBANKYSIZE)*FDrawScale
	Local LDrawU1Map:Float=PeekFloat(GDrawBank,FDrawHandle+DRAWBANKU1MAP)
	Local LDrawV1Map:Float=PeekFloat(GDrawBank,FDrawHandle+DRAWBANKV1MAP)
	Local LDrawU2Map:Float=PeekFloat(GDrawBank,FDrawHandle+DRAWBANKU2MAP)
	Local LDrawV2Map:Float=PeekFloat(GDrawBank,FDrawHandle+DRAWBANKV2MAP)
	'Variablen-Vorberechnung
	FDrawX2=FDrawX2-0.5
	FDrawY2=FDrawY2+0.5
	Local IDrawXOffset:Float=LDrawXMain*2*LDrawU1Map-1
	Local IDrawYOffset:Float=LDrawYMain*2*LDrawV1Map-1
	Local IDrawXScale:Float=(LDrawXMain*2*LDrawU2Map)-IDrawXOffset
	Local IDrawYScale:Float=(LDrawYMain*2*LDrawV2Map)-IDrawYOffset
	Local IDrawXRelative:Float=FDrawX1-FDrawX2
	Local IDrawYRelative:Float=FDrawY1-FDrawY2
	Local IDrawURelative:Float=0
	Local IDrawVRelative:Float=0
	Local IDrawARGB:Int=0
	'Texel/Textur-Lesen
	If FDrawAngle=0 Then
		If IDrawXRelative>-LDrawXSize Then
			If IDrawXRelative<+LDrawXSize Then
				If IDrawYRelative>-LDrawYSize Then
					If IDrawYRelative<+LDrawYSize Then
						IDrawURelative:Float=0.5+(IDrawXRelative/LDrawXSize*0.5)
						IDrawVRelative:Float=0.5-(IDrawYRelative/LDrawYSize*0.5)
						IDrawARGB=bbReadPixelFast(IDrawXOffset+IDrawXScale*IDrawURelative,IDrawYOffset+IDrawYScale*IDrawVRelative,bbTextureBuffer(LDrawTexture))
					End If
				End If
			End If
		End If
	Else
		Local IDrawAngle:Float=ATan2(IDrawYRelative,IDrawXRelative)
		Local IDrawRadius:Float=Sqr((Abs(IDrawXRelative*IDrawXRelative))+(Abs(IDrawYRelative*IDrawYRelative)))
		IDrawXRelative=Cos(-FDrawAngle-IDrawAngle)*IDrawRadius
		IDrawYRelative=Sin(-FDrawAngle-IDrawAngle)*IDrawRadius
		If IDrawXRelative>-LDrawXSize Then
			If IDrawXRelative<+LDrawXSize Then
				If IDrawYRelative>-LDrawYSize Then
					If IDrawYRelative<+LDrawYSize Then
						IDrawURelative:Float=0.5+(IDrawXRelative/LDrawXSize*0.5)
						IDrawVRelative:Float=0.5+(IDrawYRelative/LDrawYSize*0.5)
						IDrawARGB=bbReadPixelFast(IDrawXOffset+IDrawXScale*IDrawURelative,IDrawYOffset+IDrawYScale*IDrawVRelative,bbTextureBuffer(LDrawTexture))
					End If
				End If
			End If
		End If
	End If
	'Eingabe-Maske-Überprüfen
	If FDrawMask<>$FFFFFFFF Then
		Local IDrawRPMXPos:Int=0
		Local IDrawRPMWert:Int=0
		Local IDrawRPMPlus:Int=1
		'Maske-Zusammenfassen
		For IDrawRPMXPos=0 To 31
			If FDrawMask And 2^IDrawRPMXPos Then
				If IDrawARGB And 2^IDrawRPMXPos Then
					IDrawRPMWert=IDrawRPMWert+IDrawRPMPlus
				End If
				IDrawRPMPlus=IDrawRPMPlus*2
			End If
		Next
		'Ausgabe-Mit-Maske
		Return IDrawRPMWert
	Else
		'Reine-Ausgabe
		Return IDrawARGB
	End If
End Function




'FreeImage3D( Handle )
Function FreeImage3D(FDrawHandle:Int)
	Local IDrawLoop:Int
	'Master-Bild
	If PeekInt(GDrawBank,FDrawHandle+DRAWBANKKING)>0 Then
		'Textur-Und-Entity-Entfernen/Löschen
		bbFreeTexture PeekInt(GDrawBank,FDrawHandle+DRAWBANKTEXTURE)
		bbClearSurface PeekInt(GDrawBank,FDrawHandle+DRAWBANKFACE),True,True
		bbFreeEntity PeekInt(GDrawBank,FDrawHandle+DRAWBANKMESH)
		'Angegebene-Bank-Position-Freigeben
		PokeInt GDrawBank,FDrawHandle+DRAWBANKKING,0
		PokeInt GDrawBank,FDrawHandle+DRAWBANKMESH,0
		PokeInt GDrawBank,FDrawHandle+DRAWBANKFACE,0
		'Bank-Dependencies-GGF-Auch-Freigeben
		For IDrawLoop=DRAWBANKSTEP To GDrawBankUsed Step DRAWBANKSTEP
			If PeekInt(GDrawBank,IDrawLoop+DRAWBANKKING)=-FDrawHandle Then
				PokeInt GDrawBank,IDrawLoop+DRAWBANKKING,0
				PokeInt GDrawBank,IDrawLoop+DRAWBANKMESH,0
				PokeInt GDrawBank,IDrawLoop+DRAWBANKFACE,0
			End If
		Next
	End If
	'Teil-Bild
	If PeekInt(GDrawBank,FDrawHandle+DRAWBANKKING)<0 Then
		'Angegebene-Bank-Position-Freigeben
		PokeInt GDrawBank,FDrawHandle+DRAWBANKKING,0
		PokeInt GDrawBank,FDrawHandle+DRAWBANKMESH,0
		PokeInt GDrawBank,FDrawHandle+DRAWBANKFACE,0
	End If
End Function




'Plot3D( Handle, X-Center, Y-Center, IDrawing-Size )
Function Plot3D(FDrawHandle:Int,FDrawX:Float,FDrawY:Float,FDrawSize:Float=2)
	'Variablen-Vorberechnung
	If FDrawSize=0 Then FDrawSize=1
	
	'DrawBank-Variablen-AUSweisung
	Local LDrawFace:Int=PeekInt(GDrawBank,FDrawHandle+DRAWBANKFACE)
	
	'Vertex/Ploygon-Zuweisung/Berechnungen
	Local IDrawV0=bbAddVertex(LDrawFace,FDrawX-FDrawSize-0.5,FDrawY+FDrawSize+0.5,0, 0,0)
	Local IDrawV1=bbAddVertex(LDrawFace,FDrawX+FDrawSize-0.5,FDrawY+FDrawSize+0.5,0, 1,0)
	Local IDrawV2=bbAddVertex(LDrawFace,FDrawX+FDrawSize-0.5,FDrawY-FDrawSize+0.5,0, 1,1)
	Local IDrawV3=bbAddVertex(LDrawFace,FDrawX-FDrawSize-0.5,FDrawY-FDrawSize+0.5,0, 0,1)
	
	bbVertexColor LDrawFace,IDrawV0,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
	bbVertexColor LDrawFace,IDrawV1,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
	bbVertexColor LDrawFace,IDrawV2,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
	bbVertexColor LDrawFace,IDrawV3,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
	
	bbAddTriangle(LDrawFace,IDrawV0,IDrawV1,IDrawV2)
	bbAddTriangle(LDrawFace,IDrawV2,IDrawV3,IDrawV0)
End Function




'Line3D( Handle, X-Start, Y-Start, X-End, Y-End, IDrawing-Size )
Function Line3D(FDrawHandle:Int,FDrawX1:Float,FDrawY1:Float,FDrawX2:Float,FDrawY2:Float,FDrawSize:Float=2)
	'DrawBank-Variablen-AUSweisung
	Local LDrawFace:Int=PeekInt(GDrawBank,FDrawHandle+DRAWBANKFACE)

	' Filax Hack
	'FDrawX2=FDrawX2+FDrawX1
	'FDrawY2=FDrawY2+FDrawY1
	
	
	FDrawX1=FDrawX1-(bbGraphicsWidth()/2)
	FDrawY1=-FDrawY1+(bbGraphicsHeight()/2+1)


	FDrawX2=FDrawX2-(bbGraphicsWidth()/2)
	FDrawY2=-FDrawY2+(bbGraphicsHeight()/2)	
	
	'Fehlerkorrektur-Durch-Ausblendung
	If FDrawX1<>FDrawX2 Or FDrawY1<>FDrawY2 Then
		'Variablen-Vorberechnung
		If FDrawSize=0 Then FDrawSize=1
		
		bbTFormNormal FDrawX2-FDrawX1,FDrawY2-FDrawY1,0,0,0
		Local IDrawUTForm:Float=bbTFormedX()*0.5
		Local IDrawVTForm:Float=bbTFormedY()*0.5
		
		' Filax Hack
		'Local IDrawXTForm:Float=IDrawUTForm*2*FDrawSize
		'Local IDrawYTForm:Float=IDrawVTForm*2*FDrawSize
		Local IDrawXTForm:Float=IDrawUTForm*FDrawSize
		Local IDrawYTForm:Float=IDrawVTForm*FDrawSize

				
		'Vertex/Ploygon-Zuweisung/Berechnungen
		Local IDrawV0=bbAddVertex(LDrawFace,FDrawX1+IDrawYTForm-0.5,FDrawY1-IDrawXTForm+0.5,0, 0.5+IDrawVTForm,0.5+IDrawUTForm)
		Local IDrawV1=bbAddVertex(LDrawFace,FDrawX1-IDrawYTForm-0.5,FDrawY1+IDrawXTForm+0.5,0, 0.5-IDrawVTForm,0.5-IDrawUTForm)
		Local IDrawV2=bbAddVertex(LDrawFace,FDrawX2-IDrawYTForm-0.5,FDrawY2+IDrawXTForm+0.5,0, 0.5-IDrawVTForm,0.5-IDrawUTForm)
		Local IDrawV3=bbAddVertex(LDrawFace,FDrawX2+IDrawYTForm-0.5,FDrawY2-IDrawXTForm+0.5,0, 0.5+IDrawVTForm,0.5+IDrawUTForm)
		
		bbVertexColor LDrawFace,IDrawV0,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
		bbVertexColor LDrawFace,IDrawV1,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
		bbVertexColor LDrawFace,IDrawV2,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
		bbVertexColor LDrawFace,IDrawV3,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
		
		bbAddTriangle(LDrawFace,IDrawV0,IDrawV1,IDrawV2)
		bbAddTriangle(LDrawFace,IDrawV2,IDrawV3,IDrawV0)
	End If
End Function




'Rect3D( Handle, X-Center, Y-Center, X-Size, Y-Size, IDrawing-Mode, Border-Size )
Function Rect3D(FDrawHandle:Int,FDrawX:Float,FDrawY:Float,FDrawXS:Float,FDrawYS:Float,FDrawFill:Int=1,FDrawSize:Float=0)
	'DrawBank-Variablen-AUSweisung
	Local LDrawFace:Int=PeekInt(GDrawBank,FDrawHandle+DRAWBANKFACE)
	
	' Filax Hack
	FDrawX=FDrawX-(bbGraphicsWidth()/2)
	FDrawY=-FDrawY+(bbGraphicsHeight()/2)
	
	FDrawXS=FDrawXS/2
	FDrawYS=FDrawYS/2
	
	FDrawX=FDrawX+FDrawXS
	FDrawY=FDrawY-FDrawYS

		
	'Variablen-Vorberechnung
	FDrawX=FDrawX-0.5
	FDrawY=FDrawY+0.5
	
	FDrawXS=Abs(FDrawXS)
	FDrawYS=Abs(FDrawYS)
	
	'Rahmen-Allein-Modus
	If FDrawFill=0 Then
		If FDrawSize=0 Then FDrawSize=1
		
		'Vertex/Ploygon-Zuweisung/Berechnungen
		Local IDrawV0=bbAddVertex(LDrawFace,FDrawX-FDrawXS-FDrawSize,FDrawY+FDrawYS+FDrawSize,0, 0.5,0)
		Local IDrawV1=bbAddVertex(LDrawFace,FDrawX+FDrawXS+FDrawSize,FDrawY+FDrawYS+FDrawSize,0, 0.5,0)
		Local IDrawV2=bbAddVertex(LDrawFace,FDrawX+FDrawXS-FDrawSize,FDrawY+FDrawYS-FDrawSize,0, 0.5,1)
		Local IDrawV3=bbAddVertex(LDrawFace,FDrawX-FDrawXS+FDrawSize,FDrawY+FDrawYS-FDrawSize,0, 0.5,1)
		Local IDrawV4=bbAddVertex(LDrawFace,FDrawX+FDrawXS+FDrawSize,FDrawY+FDrawYS+FDrawSize,0, 1,0.5)
		Local IDrawV5=bbAddVertex(LDrawFace,FDrawX+FDrawXS+FDrawSize,FDrawY-FDrawYS-FDrawSize,0, 1,0.5)
		Local IDrawV6=bbAddVertex(LDrawFace,FDrawX+FDrawXS-FDrawSize,FDrawY-FDrawYS+FDrawSize,0, 0,0.5)
		Local IDrawV7=bbAddVertex(LDrawFace,FDrawX+FDrawXS-FDrawSize,FDrawY+FDrawYS-FDrawSize,0, 0,0.5)
		Local IDrawV8=bbAddVertex(LDrawFace,FDrawX+FDrawXS+FDrawSize,FDrawY-FDrawYS-FDrawSize,0, 0.5,1)
		Local IDrawV9=bbAddVertex(LDrawFace,FDrawX-FDrawXS-FDrawSize,FDrawY-FDrawYS-FDrawSize,0, 0.5,1)
		Local IDrawVA=bbAddVertex(LDrawFace,FDrawX-FDrawXS+FDrawSize,FDrawY-FDrawYS+FDrawSize,0, 0.5,0)
		Local IDrawVB=bbAddVertex(LDrawFace,FDrawX+FDrawXS-FDrawSize,FDrawY-FDrawYS+FDrawSize,0, 0.5,0)
		Local IDrawVC=bbAddVertex(LDrawFace,FDrawX-FDrawXS-FDrawSize,FDrawY-FDrawYS-FDrawSize,0, 0,0.5)
		Local IDrawVD=bbAddVertex(LDrawFace,FDrawX-FDrawXS-FDrawSize,FDrawY+FDrawYS+FDrawSize,0, 0,0.5)
		Local IDrawVE=bbAddVertex(LDrawFace,FDrawX-FDrawXS+FDrawSize,FDrawY+FDrawYS-FDrawSize,0, 1,0.5)
		Local IDrawVF=bbAddVertex(LDrawFace,FDrawX-FDrawXS+FDrawSize,FDrawY-FDrawYS+FDrawSize,0, 1,0.5)
		bbVertexColor LDrawFace,IDrawV0,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
		bbVertexColor LDrawFace,IDrawV1,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
		bbVertexColor LDrawFace,IDrawV2,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
		bbVertexColor LDrawFace,IDrawV3,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
		bbVertexColor LDrawFace,IDrawV4,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
		bbVertexColor LDrawFace,IDrawV5,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
		bbVertexColor LDrawFace,IDrawV6,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
		bbVertexColor LDrawFace,IDrawV7,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
		bbVertexColor LDrawFace,IDrawV8,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
		bbVertexColor LDrawFace,IDrawV9,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
		bbVertexColor LDrawFace,IDrawVA,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
		bbVertexColor LDrawFace,IDrawVB,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
		bbVertexColor LDrawFace,IDrawVC,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
		bbVertexColor LDrawFace,IDrawVD,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
		bbVertexColor LDrawFace,IDrawVE,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
		bbVertexColor LDrawFace,IDrawVF,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
		bbAddTriangle(LDrawFace,IDrawV0,IDrawV1,IDrawV2)
		bbAddTriangle(LDrawFace,IDrawV2,IDrawV3,IDrawV0)
		bbAddTriangle(LDrawFace,IDrawV4,IDrawV5,IDrawV6)
		bbAddTriangle(LDrawFace,IDrawV6,IDrawV7,IDrawV4)
		bbAddTriangle(LDrawFace,IDrawV8,IDrawV9,IDrawVA)
		bbAddTriangle(LDrawFace,IDrawVA,IDrawVB,IDrawV8)
		bbAddTriangle(LDrawFace,IDrawVC,IDrawVD,IDrawVE)
		bbAddTriangle(LDrawFace,IDrawVE,IDrawVF,IDrawVC)
	Else
		'Gefüllt-Allein-Modus | Vertex/Ploygon-Zuweisung/Berechnungen
		IDrawV0=bbAddVertex(LDrawFace,FDrawX-FDrawXS,FDrawY+FDrawYS,0, 0.5-DRAWRECTOFFSET,0.5-DRAWRECTOFFSET)
		IDrawV1=bbAddVertex(LDrawFace,FDrawX+FDrawXS,FDrawY+FDrawYS,0, 0.5+DRAWRECTOFFSET,0.5-DRAWRECTOFFSET)
		IDrawV2=bbAddVertex(LDrawFace,FDrawX+FDrawXS,FDrawY-FDrawYS,0, 0.5+DRAWRECTOFFSET,0.5+DRAWRECTOFFSET)
		IDrawV3=bbAddVertex(LDrawFace,FDrawX-FDrawXS,FDrawY-FDrawYS,0, 0.5-DRAWRECTOFFSET,0.5+DRAWRECTOFFSET)
		bbVertexColor LDrawFace,IDrawV0,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
		bbVertexColor LDrawFace,IDrawV1,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
		bbVertexColor LDrawFace,IDrawV2,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
		bbVertexColor LDrawFace,IDrawV3,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
		bbAddTriangle(LDrawFace,IDrawV0,IDrawV1,IDrawV2)
		bbAddTriangle(LDrawFace,IDrawV2,IDrawV3,IDrawV0)
		'Halbrahmen-Hinzufügen
		If FDrawSize>0 Then
			'Vertex/Ploygon-Zuweisung/Berechnungen
			IDrawV4=bbAddVertex(LDrawFace,FDrawX-FDrawXS-FDrawSize,FDrawY+FDrawYS+FDrawSize,0, 0.5,0)
			IDrawV5=bbAddVertex(LDrawFace,FDrawX+FDrawXS+FDrawSize,FDrawY+FDrawYS+FDrawSize,0, 0.5,0)
			IDrawV6=bbAddVertex(LDrawFace,FDrawX+FDrawXS+FDrawSize,FDrawY+FDrawYS+FDrawSize,0, 1,0.5)
			IDrawV7=bbAddVertex(LDrawFace,FDrawX+FDrawXS+FDrawSize,FDrawY-FDrawYS-FDrawSize,0, 1,0.5)
			IDrawV8=bbAddVertex(LDrawFace,FDrawX+FDrawXS+FDrawSize,FDrawY-FDrawYS-FDrawSize,0, 0.5,1)
			IDrawV9=bbAddVertex(LDrawFace,FDrawX-FDrawXS-FDrawSize,FDrawY-FDrawYS-FDrawSize,0, 0.5,1)
			IDrawVA=bbAddVertex(LDrawFace,FDrawX-FDrawXS-FDrawSize,FDrawY-FDrawYS-FDrawSize,0, 0,0.5)
			IDrawVB=bbAddVertex(LDrawFace,FDrawX-FDrawXS-FDrawSize,FDrawY+FDrawYS+FDrawSize,0, 0,0.5)
			bbVertexColor LDrawFace,IDrawV4,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
			bbVertexColor LDrawFace,IDrawV5,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
			bbVertexColor LDrawFace,IDrawV6,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
			bbVertexColor LDrawFace,IDrawV7,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
			bbVertexColor LDrawFace,IDrawV8,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
			bbVertexColor LDrawFace,IDrawV9,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
			bbVertexColor LDrawFace,IDrawVA,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
			bbVertexColor LDrawFace,IDrawVB,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
			bbAddTriangle(LDrawFace,IDrawV4,IDrawV5,IDrawV1)
			bbAddTriangle(LDrawFace,IDrawV1,IDrawV0,IDrawV4)
			bbAddTriangle(LDrawFace,IDrawV6,IDrawV7,IDrawV2)
			bbAddTriangle(LDrawFace,IDrawV2,IDrawV1,IDrawV6)
			bbAddTriangle(LDrawFace,IDrawV8,IDrawV9,IDrawV3)
			bbAddTriangle(LDrawFace,IDrawV3,IDrawV2,IDrawV8)
			bbAddTriangle(LDrawFace,IDrawVA,IDrawVB,IDrawV0)
			bbAddTriangle(LDrawFace,IDrawV0,IDrawV3,IDrawVA)
		End If
	End If
End Function




'Oval3D( Handle, X-Center, Y-Center, X-Size, Y-Size, IDrawing-Mode, Border-Size )
Function Oval3D(FDrawHandle:Int,FDrawX:Float,FDrawY:Float,FDrawXS:Float,FDrawYS:Float,FDrawFill:Int=1,FDrawSize:Float=0)
	'DrawBank-Variablen-AUSweisung
	Local LDrawFace:Int=PeekInt(GDrawBank,FDrawHandle+DRAWBANKFACE)

	' Filax Hack
	FDrawX=FDrawX-(bbGraphicsWidth()/2)
	FDrawY=-FDrawY+(bbGraphicsHeight()/2)
	
	
	'Variablen-Vorberechnung
	FDrawX=FDrawX-0.5
	FDrawY=FDrawY+0.5
	FDrawXS=Abs(FDrawXS)
	FDrawYS=Abs(FDrawYS)
	
	Local IDrawSequences:Float=8+Int((FDrawXS+FDrawYS)/20)
	If IDrawSequences>32 Then IDrawSequences=32
	Local IDrawAngle:Float=90.0/IDrawSequences
	Local IDrawLoop:Int
	'Rahmen-Allein-Modus
	If FDrawFill=0 Then
		If FDrawSize=0 Then FDrawSize=1
		
		Local IDrawXOutside:Float=FDrawXS+FDrawSize
		Local IDrawYOutside:Float=FDrawYS+FDrawSize
		Local IDrawXInside:Float=FDrawXS-FDrawSize
		Local IDrawYInside:Float=FDrawYS-FDrawSize
		For IDrawLoop=1 To IDrawSequences
			'Vertex/Ploygon-Zuweisung/Berechnungen
			Local IDrawXPos1:Float=Cos(IDrawLoop*IDrawAngle)
			Local IDrawYPos1:Float=Sin(IDrawLoop*IDrawAngle)
			Local IDrawXPos2:Float=Cos(IDrawLoop*IDrawAngle-IDrawAngle)
			Local IDrawYPos2:Float=Sin(IDrawLoop*IDrawAngle-IDrawAngle)
			Local IDrawUPos1:Float=IDrawXPos1*0.5
			Local IDrawVPos1:Float=IDrawYPos1*0.5
			Local IDrawUPos2:Float=IDrawXPos2*0.5
			Local IDrawVPos2:Float=IDrawYPos2*0.5
			'Oval3D-Quartal-1/4-Mirror
			Local IDrawV0=bbAddVertex(LDrawFace,FDrawX+IDrawXPos1*IDrawXOutside,FDrawY+IDrawYPos1*IDrawYOutside,0, 0.5+IDrawUPos1,0.5-IDrawVPos1)
			Local IDrawV1=bbAddVertex(LDrawFace,FDrawX+IDrawXPos2*IDrawXOutside,FDrawY+IDrawYPos2*IDrawYOutside,0, 0.5+IDrawUPos2,0.5-IDrawVPos2)
			Local IDrawV2=bbAddVertex(LDrawFace,FDrawX+IDrawXPos2*IDrawXInside,FDrawY+IDrawYPos2*IDrawYInside,0, 0.5-IDrawUPos2,0.5+IDrawVPos2)
			Local IDrawV3=bbAddVertex(LDrawFace,FDrawX+IDrawXPos1*IDrawXInside,FDrawY+IDrawYPos1*IDrawYInside,0, 0.5-IDrawUPos1,0.5+IDrawVPos1)
			bbVertexColor LDrawFace,IDrawV0,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
			bbVertexColor LDrawFace,IDrawV1,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
			bbVertexColor LDrawFace,IDrawV2,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
			bbVertexColor LDrawFace,IDrawV3,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
			bbAddTriangle(LDrawFace,IDrawV0,IDrawV1,IDrawV2)
			bbAddTriangle(LDrawFace,IDrawV2,IDrawV3,IDrawV0)
			'Oval3D-Quartal-2/4-Mirror
			IDrawV0=bbAddVertex(LDrawFace,FDrawX+IDrawXPos1*IDrawXOutside,FDrawY-IDrawYPos1*IDrawYOutside,0, 0.5+IDrawUPos1,0.5+IDrawVPos1)
			IDrawV1=bbAddVertex(LDrawFace,FDrawX+IDrawXPos2*IDrawXOutside,FDrawY-IDrawYPos2*IDrawYOutside,0, 0.5+IDrawUPos2,0.5+IDrawVPos2)
			IDrawV2=bbAddVertex(LDrawFace,FDrawX+IDrawXPos2*IDrawXInside,FDrawY-IDrawYPos2*IDrawYInside,0, 0.5-IDrawUPos2,0.5-IDrawVPos2)
			IDrawV3=bbAddVertex(LDrawFace,FDrawX+IDrawXPos1*IDrawXInside,FDrawY-IDrawYPos1*IDrawYInside,0, 0.5-IDrawUPos1,0.5-IDrawVPos1)
			bbVertexColor LDrawFace,IDrawV0,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
			bbVertexColor LDrawFace,IDrawV1,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
			bbVertexColor LDrawFace,IDrawV2,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
			bbVertexColor LDrawFace,IDrawV3,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
			bbAddTriangle(LDrawFace,IDrawV0,IDrawV1,IDrawV2)
			bbAddTriangle(LDrawFace,IDrawV2,IDrawV3,IDrawV0)
			'Oval3D-Quartal-3/4-Mirror
			IDrawV0=bbAddVertex(LDrawFace,FDrawX-IDrawXPos1*IDrawXOutside,FDrawY-IDrawYPos1*IDrawYOutside,0, 0.5-IDrawUPos1,0.5+IDrawVPos1)
			IDrawV1=bbAddVertex(LDrawFace,FDrawX-IDrawXPos2*IDrawXOutside,FDrawY-IDrawYPos2*IDrawYOutside,0, 0.5-IDrawUPos2,0.5+IDrawVPos2)
			IDrawV2=bbAddVertex(LDrawFace,FDrawX-IDrawXPos2*IDrawXInside,FDrawY-IDrawYPos2*IDrawYInside,0, 0.5+IDrawUPos2,0.5-IDrawVPos2)
			IDrawV3=bbAddVertex(LDrawFace,FDrawX-IDrawXPos1*IDrawXInside,FDrawY-IDrawYPos1*IDrawYInside,0, 0.5+IDrawUPos1,0.5-IDrawVPos1)
			bbVertexColor LDrawFace,IDrawV0,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
			bbVertexColor LDrawFace,IDrawV1,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
			bbVertexColor LDrawFace,IDrawV2,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
			bbVertexColor LDrawFace,IDrawV3,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
			bbAddTriangle(LDrawFace,IDrawV0,IDrawV1,IDrawV2)
			bbAddTriangle(LDrawFace,IDrawV2,IDrawV3,IDrawV0)
			'Oval3D-Quartal-4/4-Mirror
			IDrawV0=bbAddVertex(LDrawFace,FDrawX-IDrawXPos1*IDrawXOutside,FDrawY+IDrawYPos1*IDrawYOutside,0, 0.5-IDrawUPos1,0.5-IDrawVPos1)
			IDrawV1=bbAddVertex(LDrawFace,FDrawX-IDrawXPos2*IDrawXOutside,FDrawY+IDrawYPos2*IDrawYOutside,0, 0.5-IDrawUPos2,0.5-IDrawVPos2)
			IDrawV2=bbAddVertex(LDrawFace,FDrawX-IDrawXPos2*IDrawXInside,FDrawY+IDrawYPos2*IDrawYInside,0, 0.5+IDrawUPos2,0.5+IDrawVPos2)
			IDrawV3=bbAddVertex(LDrawFace,FDrawX-IDrawXPos1*IDrawXInside,FDrawY+IDrawYPos1*IDrawYInside,0, 0.5+IDrawUPos1,0.5+IDrawVPos1)
			bbVertexColor LDrawFace,IDrawV0,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
			bbVertexColor LDrawFace,IDrawV1,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
			bbVertexColor LDrawFace,IDrawV2,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
			bbVertexColor LDrawFace,IDrawV3,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
			bbAddTriangle(LDrawFace,IDrawV0,IDrawV1,IDrawV2)
			bbAddTriangle(LDrawFace,IDrawV2,IDrawV3,IDrawV0)
		Next
	Else
		'Mittelpunkt-Vertex-Zuweisung/Berechnungen
		Local IDrawVC=bbAddVertex(LDrawFace,FDrawX,FDrawY,0, 0.5,0.5)
		bbVertexColor LDrawFace,IDrawVC,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
		'Gefüllt+Halbrahmen-Modus
		If FDrawSize>0 Then
			IDrawXOutside:Float=FDrawXS+FDrawSize
			IDrawYOutside:Float=FDrawYS+FDrawSize
			For IDrawLoop=1 To IDrawSequences
				'Vertex/Ploygon-Zuweisung/Berechnungen
				IDrawXPos1:Float=Cos(IDrawLoop*IDrawAngle)
				IDrawYPos1:Float=Sin(IDrawLoop*IDrawAngle)
				IDrawXPos2:Float=Cos(IDrawLoop*IDrawAngle-IDrawAngle)
				IDrawYPos2:Float=Sin(IDrawLoop*IDrawAngle-IDrawAngle)
				IDrawUPos1:Float=IDrawXPos1*0.5
				IDrawVPos1:Float=IDrawYPos1*0.5
				IDrawUPos2:Float=IDrawXPos2*0.5
				IDrawVPos2:Float=IDrawYPos2*0.5
				'Oval3D-Quartal-1/4-Mirror
				IDrawV0=bbAddVertex(LDrawFace,FDrawX+IDrawXPos1*IDrawXOutside,FDrawY+IDrawYPos1*IDrawYOutside,0, 0.5+IDrawUPos1,0.5-IDrawVPos1)
				IDrawV1=bbAddVertex(LDrawFace,FDrawX+IDrawXPos2*IDrawXOutside,FDrawY+IDrawYPos2*IDrawYOutside,0, 0.5+IDrawUPos2,0.5-IDrawVPos2)
				IDrawV2=bbAddVertex(LDrawFace,FDrawX+IDrawXPos2*FDrawXS,FDrawY+IDrawYPos2*FDrawYS,0, 0.5,0.5)
				IDrawV3=bbAddVertex(LDrawFace,FDrawX+IDrawXPos1*FDrawXS,FDrawY+IDrawYPos1*FDrawYS,0, 0.5,0.5)
				bbVertexColor LDrawFace,IDrawV0,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
				bbVertexColor LDrawFace,IDrawV1,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
				bbVertexColor LDrawFace,IDrawV2,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
				bbVertexColor LDrawFace,IDrawV3,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
				bbAddTriangle(LDrawFace,IDrawV0,IDrawV1,IDrawV2)
				bbAddTriangle(LDrawFace,IDrawV2,IDrawV3,IDrawV0)
				bbAddTriangle(LDrawFace,IDrawVC,IDrawV3,IDrawV2)
				'Oval3D-Quartal-2/4-Mirror
				IDrawV0=bbAddVertex(LDrawFace,FDrawX+IDrawXPos1*IDrawXOutside,FDrawY-IDrawYPos1*IDrawYOutside,0, 0.5+IDrawUPos1,0.5+IDrawVPos1)
				IDrawV1=bbAddVertex(LDrawFace,FDrawX+IDrawXPos2*IDrawXOutside,FDrawY-IDrawYPos2*IDrawYOutside,0, 0.5+IDrawUPos2,0.5+IDrawVPos2)
				IDrawV2=bbAddVertex(LDrawFace,FDrawX+IDrawXPos2*FDrawXS,FDrawY-IDrawYPos2*FDrawYS,0, 0.5,0.5)
				IDrawV3=bbAddVertex(LDrawFace,FDrawX+IDrawXPos1*FDrawXS,FDrawY-IDrawYPos1*FDrawYS,0, 0.5,0.5)
				bbVertexColor LDrawFace,IDrawV0,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
				bbVertexColor LDrawFace,IDrawV1,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
				bbVertexColor LDrawFace,IDrawV2,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
				bbVertexColor LDrawFace,IDrawV3,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
				bbAddTriangle(LDrawFace,IDrawV0,IDrawV1,IDrawV2)
				bbAddTriangle(LDrawFace,IDrawV2,IDrawV3,IDrawV0)
				bbAddTriangle(LDrawFace,IDrawVC,IDrawV3,IDrawV2)
				'Oval3D-Quartal-3/4-Mirror
				IDrawV0=bbAddVertex(LDrawFace,FDrawX-IDrawXPos1*IDrawXOutside,FDrawY-IDrawYPos1*IDrawYOutside,0, 0.5-IDrawUPos1,0.5+IDrawVPos1)
				IDrawV1=bbAddVertex(LDrawFace,FDrawX-IDrawXPos2*IDrawXOutside,FDrawY-IDrawYPos2*IDrawYOutside,0, 0.5-IDrawUPos2,0.5+IDrawVPos2)
				IDrawV2=bbAddVertex(LDrawFace,FDrawX-IDrawXPos2*FDrawXS,FDrawY-IDrawYPos2*FDrawYS,0, 0.5,0.5)
				IDrawV3=bbAddVertex(LDrawFace,FDrawX-IDrawXPos1*FDrawXS,FDrawY-IDrawYPos1*FDrawYS,0, 0.5,0.5)
				bbVertexColor LDrawFace,IDrawV0,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
				bbVertexColor LDrawFace,IDrawV1,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
				bbVertexColor LDrawFace,IDrawV2,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
				bbVertexColor LDrawFace,IDrawV3,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
				bbAddTriangle(LDrawFace,IDrawV0,IDrawV1,IDrawV2)
				bbAddTriangle(LDrawFace,IDrawV2,IDrawV3,IDrawV0)
				bbAddTriangle(LDrawFace,IDrawVC,IDrawV3,IDrawV2)
				'Oval3D-Quartal-4/4-Mirror
				IDrawV0=bbAddVertex(LDrawFace,FDrawX-IDrawXPos1*IDrawXOutside,FDrawY+IDrawYPos1*IDrawYOutside,0, 0.5-IDrawUPos1,0.5-IDrawVPos1)
				IDrawV1=bbAddVertex(LDrawFace,FDrawX-IDrawXPos2*IDrawXOutside,FDrawY+IDrawYPos2*IDrawYOutside,0, 0.5-IDrawUPos2,0.5-IDrawVPos2)
				IDrawV2=bbAddVertex(LDrawFace,FDrawX-IDrawXPos2*FDrawXS,FDrawY+IDrawYPos2*FDrawYS,0, 0.5,0.5)
				IDrawV3=bbAddVertex(LDrawFace,FDrawX-IDrawXPos1*FDrawXS,FDrawY+IDrawYPos1*FDrawYS,0, 0.5,0.5)
				bbVertexColor LDrawFace,IDrawV0,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
				bbVertexColor LDrawFace,IDrawV1,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
				bbVertexColor LDrawFace,IDrawV2,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
				bbVertexColor LDrawFace,IDrawV3,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
				bbAddTriangle(LDrawFace,IDrawV0,IDrawV1,IDrawV2)
				bbAddTriangle(LDrawFace,IDrawV2,IDrawV3,IDrawV0)
				bbAddTriangle(LDrawFace,IDrawVC,IDrawV3,IDrawV2)
			Next
		Else
			'Gefüllt-Allein-Modus
			For IDrawLoop=1 To IDrawSequences
				'Vertex/Ploygon-Zuweisung/Berechnungen
				IDrawXPos1:Float=Cos(IDrawLoop*IDrawAngle)
				IDrawYPos1:Float=Sin(IDrawLoop*IDrawAngle)
				IDrawXPos2:Float=Cos(IDrawLoop*IDrawAngle-IDrawAngle)
				IDrawYPos2:Float=Sin(IDrawLoop*IDrawAngle-IDrawAngle)
				'Oval3D-Quartal-1/4-Mirror
				IDrawV0=bbAddVertex(LDrawFace,FDrawX+IDrawXPos1*FDrawXS,FDrawY+IDrawYPos1*FDrawYS,0, 0.5,0.5)
				IDrawV1=bbAddVertex(LDrawFace,FDrawX+IDrawXPos2*FDrawXS,FDrawY+IDrawYPos2*FDrawYS,0, 0.5,0.5)
				bbVertexColor LDrawFace,IDrawV0,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
				bbVertexColor LDrawFace,IDrawV1,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
				bbAddTriangle(LDrawFace,IDrawVC,IDrawV1,IDrawV0)
				'Oval3D-Quartal-2/4-Mirror
				IDrawV0=bbAddVertex(LDrawFace,FDrawX+IDrawXPos1*FDrawXS,FDrawY-IDrawYPos1*FDrawYS,0, 0.5,0.5)
				IDrawV1=bbAddVertex(LDrawFace,FDrawX+IDrawXPos2*FDrawXS,FDrawY-IDrawYPos2*FDrawYS,0, 0.5,0.5)
				bbVertexColor LDrawFace,IDrawV0,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
				bbVertexColor LDrawFace,IDrawV1,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
				bbAddTriangle(LDrawFace,IDrawVC,IDrawV1,IDrawV0)
				'Oval3D-Quartal-3/4-Mirror
				IDrawV0=bbAddVertex(LDrawFace,FDrawX-IDrawXPos1*FDrawXS,FDrawY-IDrawYPos1*FDrawYS,0, 0.5,0.5)
				IDrawV1=bbAddVertex(LDrawFace,FDrawX-IDrawXPos2*FDrawXS,FDrawY-IDrawYPos2*FDrawYS,0, 0.5,0.5)
				bbVertexColor LDrawFace,IDrawV0,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
				bbVertexColor LDrawFace,IDrawV1,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
				bbAddTriangle(LDrawFace,IDrawVC,IDrawV1,IDrawV0)
				'Oval3D-Quartal-4/4-Mirror
				IDrawV0=bbAddVertex(LDrawFace,FDrawX-IDrawXPos1*FDrawXS,FDrawY+IDrawYPos1*FDrawYS,0, 0.5,0.5)
				IDrawV1=bbAddVertex(LDrawFace,FDrawX-IDrawXPos2*FDrawXS,FDrawY+IDrawYPos2*FDrawYS,0, 0.5,0.5)
				bbVertexColor LDrawFace,IDrawV0,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
				bbVertexColor LDrawFace,IDrawV1,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
				bbAddTriangle(LDrawFace,IDrawVC,IDrawV1,IDrawV0)
			Next
		End If
	End If
End Function




'Poly3D( Handle, X1-Pos, Y1-Pos, X2-Pos, Y2-Pos, X3-Pos, Y3-Pos )
Function Poly3D(FDrawHandle:Int,FDrawX1:Float,FDrawY1:Float,FDrawX2:Float,FDrawY2:Float,FDrawX3:Float,FDrawY3:Float)
	'DrawBank-Variablen-AUSweisung
	Local LDrawFace:Int=PeekInt(GDrawBank,FDrawHandle+DRAWBANKFACE)
	'Vertex/Ploygon-Zuweisung/Berechnungen
	Local IDrawV0=bbAddVertex(LDrawFace,FDrawX1-0.5,FDrawY1+0.5,0, 0.5,0.5)
	Local IDrawV1=bbAddVertex(LDrawFace,FDrawX2-0.5,FDrawY2+0.5,0, 0.5,0.5)
	Local IDrawV2=bbAddVertex(LDrawFace,FDrawX3-0.5,FDrawY3+0.5,0, 0.5,0.5)
	bbVertexColor LDrawFace,IDrawV0,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
	bbVertexColor LDrawFace,IDrawV1,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
	bbVertexColor LDrawFace,IDrawV2,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
	bbAddTriangle(LDrawFace,IDrawV0,IDrawV1,IDrawV2)
End Function





'Text3D( Handle, X-Center-Position, Y-Center-Position, Text-String, Text-Align, Button, Rotation )
Function Text3D(FDrawHandle:Int,FDrawX:Float,FDrawY:Float,FDrawString:String,FDrawAlign:Float=0,FDrawButton:Int=0,FDrawAngle:Float=0)
	If FDrawHandle=0 Then RuntimeError "Handle not set"
	'DrawBank-Variablen-AUSweisung
	Local LDrawFace:Int=PeekInt(GDrawBank,FDrawHandle+DRAWBANKFACE)
	Local LDrawBank:Int=PeekInt(GDrawBank,FDrawHandle+DRAWFONTBANK)
	Local LDrawSize:Int=PeekInt(GDrawBank,FDrawHandle+DRAWFONTSIZE)
	

	' Filax Hack
	FDrawX=FDrawX-(bbGraphicsWidth()/2)
	FDrawY=-FDrawY+(bbGraphicsHeight()/2)
	
	
	'Variablen-Vorberechnung
	FDrawX=FDrawX-0.5
	FDrawY=FDrawY+0.5
	Local IDrawLen:Int=Len(FDrawString)
	Local IDrawXVector:Float=Cos(-FDrawAngle)*GDrawSFont
	Local IDrawYVector:Float=Sin(-FDrawAngle)*GDrawSFont
	Local IDrawXI:Float=IDrawXVector*GDrawIFont*GDrawHFont
	Local IDrawYI:Float=IDrawYVector*GDrawIFont*GDrawHFont
	Local IDrawX1Pos:Float=FDrawX-IDrawYVector*GDrawHFont*0.5*LDrawSize+IDrawXI
	Local IDrawY1Pos:Float=FDrawY+IDrawXVector*GDrawHFont*0.5*LDrawSize+IDrawYI
	Local IDrawX4Pos:Float=FDrawX+IDrawYVector*GDrawHFont*0.5*LDrawSize-IDrawXI
	Local IDrawY4Pos:Float=FDrawY-IDrawXVector*GDrawHFont*0.5*LDrawSize-IDrawYI
	Local IDrawLoop:Int
	'String-GGF-Ausrichten
	If FDrawAlign<>0 Then
		For IDrawLoop=1 To IDrawLen
			Local IDrawAsc=Asc(Mid:String(FDrawString,IDrawLoop,1))
			Local LDrawWidth:Int=PeekByte(GDrawFontBank,LDrawBank+IDrawAsc)
			IDrawX1Pos=IDrawX1Pos-(LDrawWidth*IDrawXVector+GDrawPFont*IDrawXVector)*FDrawAlign*0.5
			IDrawY1Pos=IDrawY1Pos-(LDrawWidth*IDrawYVector+GDrawPFont*IDrawYVector)*FDrawAlign*0.5
			IDrawX4Pos=IDrawX4Pos-(LDrawWidth*IDrawXVector+GDrawPFont*IDrawXVector)*FDrawAlign*0.5
			IDrawY4Pos=IDrawY4Pos-(LDrawWidth*IDrawYVector+GDrawPFont*IDrawYVector)*FDrawAlign*0.5
		Next
	End If
	Local IDrawX1Temp:Float=IDrawX1Pos
	Local IDrawY1Temp:Float=IDrawY1Pos
	Local IDrawX4Temp:Float=IDrawX4Pos
	Local IDrawY4Temp:Float=IDrawY4Pos
	'String-Durchgehend-Zeichnen
	For IDrawLoop=1 To IDrawLen
		IDrawAsc=Asc(Mid:String(FDrawString,IDrawLoop,1))
		LDrawWidth:Int=PeekByte(GDrawFontBank,LDrawBank+IDrawAsc)
		Local IDrawX2Pos:Float=IDrawX1Pos+IDrawXVector*LDrawWidth
		Local IDrawY2Pos:Float=IDrawY1Pos+IDrawYVector*LDrawWidth
		Local IDrawX3Pos:Float=IDrawX4Pos+IDrawXVector*LDrawWidth
		Local IDrawY3Pos:Float=IDrawY4Pos+IDrawYVector*LDrawWidth
		Local IDrawU1Map:Float=(IDrawAsc Mod 16)*DRAWFONTUVSTEP
		Local IDrawV1Map:Float=Floor(IDrawAsc/16)*DRAWFONTUVSTEP
		Local IDrawU2Map:Float=IDrawU1Map+DRAWFONTUVSTEP*LDrawWidth/LDrawSize
		Local IDrawV2Map:Float=IDrawV1Map+DRAWFONTUVSTEP
		'Vertex/Ploygon-Zuweisung/Berechnungen
		Local IDrawV0=bbAddVertex(LDrawFace,IDrawX1Pos,IDrawY1Pos,0, IDrawU1Map,IDrawV1Map)
		Local IDrawV1=bbAddVertex(LDrawFace,IDrawX2Pos,IDrawY2Pos,0, IDrawU2Map,IDrawV1Map)
		Local IDrawV2=bbAddVertex(LDrawFace,IDrawX3Pos,IDrawY3Pos,0, IDrawU2Map,IDrawV2Map)
		Local IDrawV3=bbAddVertex(LDrawFace,IDrawX4Pos,IDrawY4Pos,0, IDrawU1Map,IDrawV2Map)
		bbVertexColor LDrawFace,IDrawV0,GDrawTFR,GDrawTFG,GDrawTFB,GDrawTFA
		bbVertexColor LDrawFace,IDrawV1,GDrawTFR,GDrawTFG,GDrawTFB,GDrawTFA
		bbVertexColor LDrawFace,IDrawV2,GDrawTFR,GDrawTFG,GDrawTFB,GDrawTFA
		bbVertexColor LDrawFace,IDrawV3,GDrawTFR,GDrawTFG,GDrawTFB,GDrawTFA
		bbAddTriangle LDrawFace,IDrawV0,IDrawV1,IDrawV2
		bbAddTriangle LDrawFace,IDrawV2,IDrawV3,IDrawV0
		IDrawX1Pos=IDrawX1Pos+LDrawWidth*IDrawXVector+GDrawPFont*IDrawXVector
		IDrawY1Pos=IDrawY1Pos+LDrawWidth*IDrawYVector+GDrawPFont*IDrawYVector
		IDrawX4Pos=IDrawX4Pos+LDrawWidth*IDrawXVector+GDrawPFont*IDrawXVector
		IDrawY4Pos=IDrawY4Pos+LDrawWidth*IDrawYVector+GDrawPFont*IDrawYVector
	Next
	If FDrawButton<>0 Then CheckQuad3D(IDrawX1Temp,IDrawY1Temp,IDrawX2Pos,IDrawY2Pos,IDrawX3Pos,IDrawY3Pos,IDrawX4Temp,IDrawY4Temp,FDrawButton,FDrawString)
End Function




'StringWidth3D( Handle, Text-String )
Function StringWidth3D(FDrawHandle:Int,FDrawString:String)
	If FDrawHandle=0 Then RuntimeError "Handle not set"
	'DrawBank-Variablen-AUSweisung
	Local LDrawBank:Int=PeekInt(GDrawBank,FDrawHandle+DRAWFONTBANK)
	'Variablen-Vorberechnung
	Local IDrawLen:Int=Len(FDrawString)
	Local IDrawWidth:Float=0
	Local IDrawLoop:Int
	'Stringlänge-Berechnen
	For IDrawLoop=1 To IDrawLen
		Local IDrawAsc=Asc(Mid:String(FDrawString,IDrawLoop,1))
		Local LDrawWidth:Int=PeekByte(GDrawFontBank,LDrawBank+IDrawAsc)
		IDrawWidth=IDrawWidth+LDrawWidth+GDrawPFont
	Next
	'Variablen-Ausstiegsvorbereitung
	Return IDrawWidth*GDrawSFont-GDrawPFont
End Function




'USwap3D( Handle, Image-Frame )
Function USwap3D(FDrawHandle:Int,FDrawFrame:Int)
	FDrawFrame=FDrawFrame*DRAWBANKSTEP
	'DrawBank-Variablen-AUSweisung
	Local LDrawU1Map:Float=PeekFloat(GDrawBank,FDrawHandle+DRAWBANKU1MAP+FDrawFrame)
	Local LDrawU2Map:Float=PeekFloat(GDrawBank,FDrawHandle+DRAWBANKU2MAP+FDrawFrame)
	'DrawBank-Variablen-EINweisung
	PokeFloat GDrawBank,FDrawHandle+DRAWBANKU1MAP+FDrawFrame,LDrawU2Map
	PokeFloat GDrawBank,FDrawHandle+DRAWBANKU2MAP+FDrawFrame,LDrawU1Map
End Function




'VSwap3D( Handle, Image-Frame )
Function VSwap3D(FDrawHandle:Int,FDrawFrame:Int)
	FDrawFrame=FDrawFrame*DRAWBANKSTEP
	'DrawBank-Variablen-AUSweisung
	Local LDrawV1Map:Float=PeekFloat(GDrawBank,FDrawHandle+DRAWBANKV1MAP+FDrawFrame)
	Local LDrawV2Map:Float=PeekFloat(GDrawBank,FDrawHandle+DRAWBANKV2MAP+FDrawFrame)
	'DrawBank-Variablen-EINweisung
	PokeFloat GDrawBank,FDrawHandle+DRAWBANKV1MAP+FDrawFrame,LDrawV2Map
	PokeFloat GDrawBank,FDrawHandle+DRAWBANKV2MAP+FDrawFrame,LDrawV1Map
End Function




'CheckQuad3D( X1-Pos, Y1-Pos, X2-Pos, Y2-Pos, X3-Pos, Y3-Pos, X4-Pos, Y4-Pos, Button-Handle, Image-Text )
Function CheckQuad3D(FDrawX1:Float,FDrawY1:Float,FDrawX2:Float,FDrawY2:Float,FDrawX3:Float,FDrawY3:Float,FDrawX4:Float,FDrawY4:Float,FDrawButton:Int=1,FDrawOver:String="not set")
	'Variablen-Vorberechnung
	MouseOver3D=0
	MouseDown3D=0
	MouseHit3D=0
	MousePit3D=0
	
	'Quadkollision-Berechnen/CheckQuad3D-Anwenden
	If (FDrawY2-FDrawY1)*(MouseX3D-FDrawX2)-(FDrawX2-FDrawX1)*(MouseY3D-FDrawY2)>0 Then
		If (FDrawY3-FDrawY2)*(MouseX3D-FDrawX3)-(FDrawX3-FDrawX2)*(MouseY3D-FDrawY3)>0 Then
			If (FDrawY4-FDrawY3)*(MouseX3D-FDrawX4)-(FDrawX4-FDrawX3)*(MouseY3D-FDrawY4)>0 Then
				If (FDrawY1-FDrawY4)*(MouseX3D-FDrawX1)-(FDrawX1-FDrawX4)*(MouseY3D-FDrawY1)>0 Then
					'Globale-Maus-Variablen-Berechnung
					MouseDown3D=bbMouseDown(1)+(bbMouseDown(2)*2)+(bbMouseDown(3)*4)
					If GDrawMouseHit=0 Then MouseHit3D=MouseDown3D
					If GDrawMousePit<>FDrawOver Then MousePit3D=1
					GDrawMouseHit=MouseDown3D
					GDrawMousePit=FDrawOver
					MouseText3D=FDrawOver
					MouseOver3D=1
					'Nur-Wenn-Imagehandle-Gegeben
					If FDrawButton Mod DRAWBANKSTEP=0 Then
						'DrawBank-Variablen-AUSweisung
						Local LDrawFace:Int=PeekInt(GDrawBank,FDrawButton+DRAWBANKFACE+(MouseDown3D>0)*DRAWBANKSTEP)
						Local LDrawU1Map:Float=PeekFloat(GDrawBank,FDrawButton+DRAWBANKU1MAP+(MouseDown3D>0)*DRAWBANKSTEP)
						Local LDrawV1Map:Float=PeekFloat(GDrawBank,FDrawButton+DRAWBANKV1MAP+(MouseDown3D>0)*DRAWBANKSTEP)
						Local LDrawU2Map:Float=PeekFloat(GDrawBank,FDrawButton+DRAWBANKU2MAP+(MouseDown3D>0)*DRAWBANKSTEP)
						Local LDrawV2Map:Float=PeekFloat(GDrawBank,FDrawButton+DRAWBANKV2MAP+(MouseDown3D>0)*DRAWBANKSTEP)
						'Vertex/Ploygon-Zuweisung/Berechnungen
						Local IDrawV0=bbAddVertex(LDrawFace,FDrawX1,FDrawY1,0 ,LDrawU1Map,LDrawV1Map)
						Local IDrawV1=bbAddVertex(LDrawFace,FDrawX2,FDrawY2,0 ,LDrawU2Map,LDrawV1Map)
						Local IDrawV2=bbAddVertex(LDrawFace,FDrawX3,FDrawY3,0 ,LDrawU2Map,LDrawV2Map)
						Local IDrawV3=bbAddVertex(LDrawFace,FDrawX4,FDrawY4,0 ,LDrawU1Map,LDrawV2Map)
						bbVertexColor LDrawFace,IDrawV0,GDrawGFR,GDrawGFG,GDrawGFB,GDrawGFA
						bbVertexColor LDrawFace,IDrawV1,GDrawGFR,GDrawGFG,GDrawGFB,GDrawGFA
						bbVertexColor LDrawFace,IDrawV2,GDrawGFR,GDrawGFG,GDrawGFB,GDrawGFA
						bbVertexColor LDrawFace,IDrawV3,GDrawGFR,GDrawGFG,GDrawGFB,GDrawGFA
						bbAddTriangle LDrawFace,IDrawV0,IDrawV1,IDrawV2
						bbAddTriangle LDrawFace,IDrawV2,IDrawV3,IDrawV0
					End If
					'Ausstiegsvorbereitung
					Return True
				End If
			End If
		End If
	End If
End Function




'XDrawMP3D( Handle, Mask-Alpha )
Function XDrawMP3D(FDrawHandle:Int,FDrawAlpha:Int=0)
	'DrawBank-Variablen-AUSweisung
	Local LDrawTexture:Int=PeekInt(GDrawBank,FDrawHandle+DRAWBANKTEXTURE)
	Local LDrawXMain:Int=PeekInt(GDrawBank,FDrawHandle+DRAWBANKXMAIN)*2
	Local LDrawYMain:Int=PeekInt(GDrawBank,FDrawHandle+DRAWBANKYMAIN)*2
	'Variablen-Vorberechnung
	Local IDrawXLoop:Int=0
	Local IDrawYLoop:Int=0
	Local IDrawColor:Int=0
	'Maske-Auf-Textur-Anwendung
	bbLockBuffer bbTextureBuffer(LDrawTexture)
	If FDrawAlpha=3 Then
		'Alphamaske-Hinzufügen
		For IDrawYLoop=0 To LDrawYMain-1
			For IDrawXLoop=0 To LDrawXMain-1
				IDrawColor=bbReadPixelFast(IDrawXLoop,IDrawYLoop,bbTextureBuffer(LDrawTexture))
				bbWritePixelFast IDrawXLoop,IDrawYLoop,$FF000000+(IDrawColor And $FFFFFF),bbTextureBuffer(LDrawTexture)
			Next
		Next
	Else
		'MAV-Workaround-Für-FAST
		For IDrawYLoop=0 To LDrawYMain-1
			For IDrawXLoop=0 To LDrawXMain-1
				IDrawColor=bbReadPixelFast(IDrawXLoop,IDrawYLoop,bbTextureBuffer(LDrawTexture))
				bbWritePixelFast IDrawXLoop,IDrawYLoop,IDrawColor,bbTextureBuffer(LDrawTexture)
			Next
		Next
	End If
	bbUnLockBuffer bbTextureBuffer(LDrawTexture)
End Function




'XDrawBP3D( )
Function XDrawBP3D()
	'Start-Draw-Bank-Vorgabe
	Local IDrawBP:Int=DRAWBANKSTEP
	'Nächst-Freie-Bank-Suchen
	Repeat
		If PeekInt(GDrawBank,IDrawBP+DRAWBANKKING)=0 Then Exit
		IDrawBP=IDrawBP+DRAWBANKSTEP
		If IDrawBP>(DRAWBANKSIZE*DRAWBANKSTEP) Then
			RuntimeError "GDrawBank is to small"
		End If
	Forever
	'Bank-Benutzungseingrenzung-Festlegen
	If IDrawBP>GDrawBankUsed Then GDrawBankUsed=IDrawBP
	'Variablen-Ausstiegsvorbereitung
	Return IDrawBP
End Function




'XDrawFP3D( )
Function XDrawFP3D()
	'Start-Font-Bank-Vorgabe
	Local IDrawFP:Int=0
	'Nächst-Freie-Bank-Suchen
	Repeat
		If PeekByte(GDrawFontBank,IDrawFP+DRAWBANKKING)=0 Then Exit
		IDrawFP=IDrawFP+DRAWFONTBANKSTEP
		If IDrawFP>(DRAWFONTBANKSIZE*DRAWFONTBANKSTEP) Then
			RuntimeError "GDrawFontBank is to small"
		End If
	Forever
	'Variablen-Ausstiegsvorbereitung
	Return IDrawFP
End Function




'XDrawTT3D( Handle, X-Main, Y-Main, X-Tile-Pos, Y-Tile-Pos )
Function XDrawTT3D(FDrawHandle:Int,FDrawXT:Int,FDrawYT:Int,FDrawXP:Int,FDrawYP:Int)
	'Variablen-Vorberechnung
	Local IDrawXSize:Int=FDrawXT/16
	Local IDrawYSize:Int=FDrawYT/16
	Local IDrawField:Int=CreateBank(IDrawXSize*IDrawYSize*4)
	Local IDrawXTile:Int=IDrawXSize*FDrawXP
	Local IDrawYTile:Int=IDrawYSize*FDrawYP
	Local IDrawXLoop:Int=0
	Local IDrawYLoop:Int=0
	Local IDrawValue:Int=0
	Local IDrawLSet:Int=0
	Local IDrawRSet:Int=0
	Local IDrawXPos:Int=0
	'Textursymbol-Zwischenspeichern
	For IDrawXLoop=0 To IDrawXSize-1 Step+1
		For IDrawYLoop=0 To IDrawYSize-1 Step+1
			IDrawValue=bbReadPixelFast(IDrawXTile+IDrawXLoop,IDrawYTile+IDrawYLoop,bbTextureBuffer(FDrawHandle))
			bbWritePixelFast IDrawXTile+IDrawXLoop,IDrawYTile+IDrawYLoop,$00000000,bbTextureBuffer(FDrawHandle)
			PokeInt IDrawField,(IDrawXLoop*IDrawYSize+IDrawYLoop)*4,IDrawValue
		Next
	Next
	'Linke-Grenze-Des-Symbols-Suchen
	For IDrawXLoop=IDrawXSize-1 To 0 Step-1
		For IDrawYLoop=0 To IDrawYSize-1 Step+1
			If PeekInt(IDrawField,(IDrawXLoop*IDrawYSize+IDrawYLoop)*4) Shr 24 <> 0 Then IDrawLSet=IDrawXLoop
		Next
	Next
	'Rechte-Grenze-Des-Symbols-Suchen
	For IDrawXLoop=0 To IDrawXSize-1 Step+1
		For IDrawYLoop=0 To IDrawYSize-1 Step+1
			If PeekInt(IDrawField,(IDrawXLoop*IDrawYSize+IDrawYLoop)*4) Shr 24 <> 0 Then IDrawRSet=IDrawXLoop
		Next
	Next
	'Symbol-Nach-Links-Verschieben
	For IDrawXLoop=0 To IDrawXSize-1 Step+1
		For IDrawYLoop=0 To IDrawYSize-1 Step+1
			IDrawXPos=IDrawXLoop+IDrawLSet
			If IDrawXPos=>0 And IDrawXPos<IDrawXSize Then
				IDrawValue=PeekInt(IDrawField,(IDrawXPos*IDrawYSize+IDrawYLoop)*4)
				bbWritePixelFast IDrawXTile+IDrawXLoop,IDrawYTile+IDrawYLoop,IDrawValue,bbTextureBuffer(FDrawHandle)
			End If
		Next
	Next
	'Variablen-Ausstiegsvorbereitung
	Return IDrawRSet-IDrawLSet+1+FDrawXT/512
End Function


Edit : Up version updated.

Question : It is possible to define text order ? because when
i try to paste a text draw in front a rectangle the text is
behind ?

Filax, first thanks for the wrapping of Blitz3D SDK... :)

Your question:

the order of LoadImage3D and LoadFont3D are the first pass of 'entityorder'. Later loaded have a higher priority! (Within a Surface is the priority of drawing order. Later drawing have a higher priority.) An Surface is LoadImage3D or LoadFont3D!

ok ok !!! :) Many thanks for the quick reply! keep up good job Hectic.

Filax, you can do as I did and insert an "entityorder" command in the loadfont3d() function.

Filax, you can do as I did and insert an "entityorder" command in the loadfont3d() function.


WOOPS
I just checked and it seems to be broken in the 3.1 version, setting entityorder() in the loadimage3d() function doesn't seem to display the mesh with the correct drawing order anymore.
And the changes in scale are now to difficult to manage for my current engine.
I guess that means I'll stick to a customized version 3.0 :'(