Alpahbelnding

BlitzMax Forums/OpenGL Module/Alpahbelnding

Vertex(Posted 2005) [#1]
Hi!

Strict

Type TQuad
	Global oList : TList

	Field fPosition : Float[3]
	Field fAlpha    : Float
	
	Method Render()
		glTranslatef Self.fPosition[0], Self.fPosition[1], Self.fPosition[2]
		glBegin GL_QUADS
			glColor4f 1.0, 1.0, 1.0, Self.fAlpha
			
			glNormal3f 0.0, 0.0, 1.0 ; glVertex3f -1.0, -1.0, 0.0
			glNormal3f 0.0, 0.0, 1.0 ; glVertex3f  1.0, -1.0, 0.0
			glNormal3f 0.0, 0.0, 1.0 ; glVertex3f  1.0,  1.0, 0.0			
			glNormal3f 0.0, 0.0, 1.0 ; glVertex3f -1.0,  1.0, 0.0
		glEnd
	End Method
	
	Method Compare:Int(oObject:Object)
		If TQuad(oObject) Then
			If TQuad(oObject).fPosition[2] < Self.fPosition[2] Then
				Return 1
			ElseIf TQuad(oObject).fPosition[2] = Self.fPosition[2] Then
				Return 0
			Else
				Return -1
			EndIf
		Else
			Return 1
		EndIf
	End Method
	
	Function Create:TQuad(fX:Float, fY:Float, fZ:Float, fAlpha:Float)
		Local oQuad:TQuad = New TQuad
		
		oQuad.fPosition[0] = fX
		oQuad.fPosition[1] = fY
		oQuad.fPosition[2] = fZ
		oQuad.fAlpha = fAlpha
		
		TQuad.oList.AddLast oQuad
		Return oQuad
	End Function
End Type

Local iIndex : Int
Local oQuad  : TQuad
Local fX     : Float
Local fZ     : Float

bglCreateContext 640, 480, 0, 0, BGL_BACKBUFFER | BGL_DEPTHBUFFER

TQuad.oList = CreateList()

glMatrixMode GL_PROJECTION
glLoadIdentity()
gluPerspective 45.0, 640.0/480.0, 0.1, 1000.0

glDepthFunc GL_LEQUAL
glEnable GL_DEPTH
glBlendFunc GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA
glEnable GL_BLEND

For iIndex = 1 To 1000
	oQuad = TQuad.Create(Rand(-5.0, 5.0), Rand(-5.0, 5.0), Rand(-1.0, -1000.0), 0.3)
Next

glMatrixMode GL_MODELVIEW
glClearColor 0.4, 0.6, 0.8, 1.0


glEnable GL_CULL_FACE
'glEnable GL_LIGHTING
'glEnable GL_LIGHT0

While Not KeyDown(KEY_ESCAPE)
	glClear GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT

	If KeyDown(KEY_LEFT) Then fX :- 0.1
	If KeyDown(KEY_RIGHT) Then fX :+ 0.1
	If KeyDown(KEY_UP) Then fZ :- 0.1
	If KeyDown(KEY_DOWN) Then fZ :+ 0.1
	
	TQuad.oList.Sort()
	glLoadIdentity()
	glTranslatef -fX, 0.0, -fZ
	
	For oQuad = EachIn TQuad.oList
		glPushMatrix
		oQuad.Render()
		glPopMatrix
	Next

	bglSwapBuffers()
Wend

bglDeleteContext()

End


'glEnable GL_LIGHTING
'glEnable GL_LIGHT0

->

glEnable GL_LIGHTING
glEnable GL_LIGHT0

so alphabelnding does not work! :(

any ideas?

cu olli


Edit: Sorrrryyyyy, 2 days later I know the problem! Just using alphavalues with glMaterialfv!!!