Ich fange mit mit Opengl an auf Purebasic.
Habe schon einiges mit Google unternommen und viel über Opengl gelesen.
Nun die Praxis. Ich möchte mit dem unteren Openglprogramm(aus diesem Forum) ein Bild(Texture )einladen, BMP oder TGA mit Alphakanal.
Die Farbe schwarz soll tranparent werden.
Ich weiss nicht, wie ich dieses Loadprogramm in das Openglfenster intregiere.
Wer kann mir mal mit einem einfachen Beispiel unter die Arme greifen,um ein Bild darzustellen, wo die schwarzen Pixel durchsichtig sind.
Bin für die Hilfe sehr dankbar.
MFG
Code: Alles auswählen
; OpenGL Fenster
;
IncludeFile "OpenGL.pbi"
Structure GLscreen
container.l
hWnd.l
hDC.l
EndStructure
Procedure OpenGLScreen(*p.GLscreen,x,y,w,h)
If *p
container = ContainerGadget(#PB_Any,x,y,w,h)
If container
hwnd = GadgetID(container)
pfd.PIXELFORMATDESCRIPTOR
hdc = GetDC_(hwnd)
pfd\nSize = SizeOf(PIXELFORMATDESCRIPTOR)
pfd\nVersion = 1
pfd\dwFlags = #PFD_SUPPORT_OPENGL | #PFD_DOUBLEBUFFER | #PFD_DRAW_TO_WINDOW
pfd\iLayerType = #PFD_MAIN_PLANE
pfd\iPixelType = #PFD_TYPE_RGBA
pfd\cColorBits = 24
pfd\cDepthBits = 16
pixformat = ChoosePixelFormat_(hdc, pfd)
SetPixelFormat_(hdc, pixformat, pfd)
hrc = wglCreateContext_(hdc)
wglMakeCurrent_(hdc, hrc)
SwapBuffers_(hdc)
glClearColor_(0.0, 1.0, 0.0, 1.0)
*p\container = container
*p\hWnd = GadgetID(container)
*p\hDC = hdc
ProcedureReturn 1
EndIf
EndIf
EndProcedure
If OpenWindow(0, 0, 0, 800,600, "TEST",#PB_Window_SystemMenu | #PB_Window_ScreenCentered)
CreateGadgetList(WindowID(0))
If OpenGLScreen(screen.GLscreen,10,10,400,400)
HideWindow(0,0)
Repeat
glClear_(#GL_COLOR_BUFFER_BIT | #GL_DEPTH_BUFFER_BIT)
glClearColor_(1.0,0.0,0.0,0.0)
SwapBuffers_(screen\hdc)
Event = WaitWindowEvent()
Until Event = #PB_Event_CloseWindow
ReleaseDC_(screen\hWnd,screen\hDC)
EndIf
EndIf
Code: Alles auswählen
Procedure LoadAlphaTexture(ID, Filename.s, TransparentColor)
img = LoadImage(#PB_Any, Filename.s)
Width.l=ImageWidth()
Height.l=ImageHeight()
Size.l=Width * Height
Dim ImageData.b(Size*4)
StartDrawing(ImageOutput())
i = 0
For Y=0 To Height-1
For X=0 To Width-1
Color = Point(X,Y)
ImageData(i)=Red(Color)
i+1
ImageData(i)=Green(Color)
i+1
ImageData(i)=Blue(Color)
i+1
If Color = TransparentColor
ImageData(i)=0
Else
ImageData(i)=$FF
EndIf
i+1
Next
Next
StopDrawing()
glGenTextures_(1, @Tex)
glBindTexture_(#GL_TEXTURE_2D, Tex)
glTexParameteri_(#GL_TEXTURE_2D, #GL_TEXTURE_MAG_FILTER, #GL_NEAREST)
glTexParameteri_(#GL_TEXTURE_2D, #GL_TEXTURE_MIN_FILTER, #GL_NEAREST)
glTexImage2D_(#GL_TEXTURE_2D, 0, #GL_RGBA, Width, Height, 0, #GL_RGBA, #GL_UNSIGNED_BYTE, @ImageData())
ProcedureReturn Tex
EndProcedure