hier mal mein aktueller Versuch das Tut umzusetzen....
Code: Alles auswählen
XIncludeFile "glu.pbi"
Structure GLscreen
container.l
hWnd.l
hDC.l
EndStructure
InitSprite()
InitMouse()
InitKeyboard()
Procedure createdraw()
Circle(100,100,50,RGB(200,0,0))
DrawingMode(#PB_2DDrawing_Outlined)
Box(150,20,20,20, RGB(255,0,0))
FrontColor(RGB(255,255,0))
For k=0 To 20
LineXY(10,10+k*8,200, 0)
Next
;DrawingMode(#PB_2DDrawing_Transparent)
BackColor(RGB(100,255,0))
FrontColor(RGB(0,0,255))
DrawText(15,50,"pebisoft")
DrawingMode(#PB_2DDrawing_Outlined)
Box(0,0,255,255,RGB(192,192,192))
EndProcedure
Procedure FindNextExp(Val)
While a < Val
a = 1 << b
b + 1
Wend
ProcedureReturn a
EndProcedure
Procedure GLLoadAlphaTexture(image_nr,img_file.s,Filename.s,Texfilter,TransparentColor.l)
If img_file="file"
img = LoadImage(#PB_Any, Filename.s)
Width.l = FindNextExp(ImageWidth(img))
Height.l = FindNextExp(ImageHeight(img))
ResizeImage(img, Width, Height)
Size.l = Width * Height * 4
EndIf
If img_file="image"
img.l = CreateImage(#PB_Any,256,256,24)
Width.l = FindNextExp(ImageWidth(img))
Height.l = FindNextExp(ImageHeight(img))
ResizeImage(img, Width, Height)
Size.l = Width * Height * 4
EndIf
Dim ImageData.b(Size)
bmi.BITMAPINFO
bmi\bmiHeader\biSize = SizeOf(BITMAPINFOHEADER)
bmi\bmiHeader\biWidth = Width
bmi\bmiHeader\biHeight = Height
bmi\bmiHeader\biPlanes = 1
bmi\bmiHeader\biBitCount = 32
bmi\bmiHeader\biCompression = #BI_RGB
bmi\bmiHeader\biSizeImage = (bmi\bmiHeader\biWidth * bmi\bmiHeader\biHeight * bmi\bmiHeader\biBitCount / 8)-1
hdc = StartDrawing(ImageOutput(img))
If img_file="image"
createdraw()
EndIf
GetDIBits_(hdc, ImageID(img), 0, bmi\bmiHeader\biHeight, @ImageData(0), bmi, #DIB_RGB_COLORS)
StopDrawing()
red = Red (TransparentColor)
green = Green(TransparentColor)
blue = Blue (TransparentColor)
For k=0 To Size-1 Step 4
b = ImageData(k ) & $FF
g = ImageData(k+1) & $FF
r = ImageData(k+2) & $FF
If r = red And g = green And b = blue
ImageData(k+3) = 0
Else
ImageData(k+3) = $ff
EndIf
ImageData(k+2) = b
ImageData(k ) = r
Next
glGenTextures_(image_nr, @Tex)
glBindTexture_(#GL_TEXTURE_2D, Tex)
glTexImage2D_(#GL_TEXTURE_2D, 0, #GL_RGBA, Width, Height, 0, #GL_RGBA, #GL_UNSIGNED_BYTE, @ImageData(0))
If TexFilter = 0
glTexParameteri_(#GL_TEXTURE_2D, #GL_TEXTURE_MAG_FILTER, #GL_NEAREST)
glTexParameteri_(#GL_TEXTURE_2D, #GL_TEXTURE_MIN_FILTER, #GL_NEAREST)
ElseIf TexFilter = 1
glTexParameteri_(#GL_TEXTURE_2D, #GL_TEXTURE_MAG_FILTER, #GL_LINEAR)
glTexParameteri_(#GL_TEXTURE_2D, #GL_TEXTURE_MIN_FILTER, #GL_LINEAR)
EndIf
FreeImage(img)
ProcedureReturn Tex
EndProcedure
Procedure OpenGLScreen(*p.GLscreen,hwnd)
If *p
If hwnd
hdc = GetDC_(hwnd)
pfd.PIXELFORMATDESCRIPTOR
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 = 32
pfd\cDepthBits = 32
pixformat = ChoosePixelFormat_(hdc, pfd)
SetPixelFormat_(hdc, pixformat, pfd)
hrc = wglCreateContext_(hdc)
wglMakeCurrent_(hdc, hrc)
SwapBuffers_(hdc)
*p\container = container
*p\hWnd = hwnd
*p\hDC = hdc
glMatrixMode_(#GL_PROJECTION)
gluPerspective_(45, 1, 0.1,1000)
glMatrixMode_(#GL_MODELVIEW)
glEnable_(#GL_ALPHA_TEST)
glAlphaFunc_(#GL_GREATER, 0)
glShadeModel_(#gl_smooth)
glClearColor_( 0, 0.5, 1, 0)
glClearDepth_(1)
glEnable_(#GL_DEPTH_TEST)
glDepthFunc_(#gl_lequal)
glHint_(#gl_perspective_correction_hint,#gl_nicest)
glEnable_ (#GL_COLOR_MATERIAL)
glEnable_(#GL_TEXTURE_2D)
ProcedureReturn 1
EndIf
EndIf
EndProcedure
Procedure FPS(timer.l)
Static FPSCount.l, FPS.l
Static delay.l
Protected t.l
If timer = 0
ProcedureReturn -1
EndIf
t = ElapsedMilliseconds()
If t-delay > timer
FPS = FPSCount*1000/timer
FPSCount = 0
delay = t
Else
FPSCount+1
EndIf
ProcedureReturn FPS
EndProcedure
Global SkyBoxList
Global Texture_1
Procedure GenerateSkyBox(pWidth.f, pHeight.f, pLength.f)
Protected px.f, py.f, pz.f
SkyBoxList = glGenLists_(1)
glNewList_(SkyBoxList, #GL_COMPILE)
px = - pWidth / 2
py = - pHeight / 2
pz = - pLength / 2
glBindTexture_(#GL_TEXTURE_2D, Texture_1)
glBegin_(#GL_QUADS)
glTexCoord2f_(0, 0); glVertex3f(px, py, pz);
glTexCoord2f_(0, 1); glVertex3f(px, py + pHeight, pz);
glTexCoord2f_(1, 1); glVertex3f(px + pWidth, py + pHeight, pz);
glTexCoord2f_(1, 0); glVertex3f(px + pWidth, py, pz);
glEnd_()
glBindTexture_(#GL_TEXTURE_2D, Texture_1)
glBegin_(#GL_QUADS);
glTexCoord2f_(1, 0); glVertex3f(px, py, pz + pLength);
glTexCoord2f_(1, 1); glVertex3f(px, py + pHeight, pz + pLength);
glTexCoord2f_(0, 1); glVertex3f(px + pWidth, py + pHeight, pz + pLength);
glTexCoord2f_(0, 0); glVertex3f(px + pWidth, py, pz + pLength);
glEnd_()
glBindTexture_(#GL_TEXTURE_2D, Texture_1)
glBegin_(#GL_QUADS);
glTexCoord2f_(1, 1); glVertex3f(px + pWidth, py, pz);
glTexCoord2f_(1, 0); glVertex3f(px + pWidth, py, pz + pLength);
glTexCoord2f_(0, 0); glVertex3f(px, py, pz + pLength);
glTexCoord2f_(0, 1); glVertex3f(px, py, pz);
glEnd_()
glBindTexture_(#GL_TEXTURE_2D, Texture_1)
glBegin_(#GL_QUADS);
glTexCoord2f_(0, 0); glVertex3f(px, py + pHeight, pz);
glTexCoord2f_(0, 1); glVertex3f(px, py + pHeight, pz + pLength);
glTexCoord2f_(1, 1); glVertex3f(px + pWidth, py + pHeight, pz + pLength);
glTexCoord2f_(1, 0); glVertex3f(px + pWidth, py + pHeight, pz);
glEnd_()
glBindTexture_(#GL_TEXTURE_2D, Texture_1)
glBegin_(#GL_QUADS);
glTexCoord2f_(1, 0); glVertex3f(px, py, pz);
glTexCoord2f_(0, 0); glVertex3f(px, py, pz + pLength);
glTexCoord2f_(0, 1); glVertex3f(px, py + pHeight, pz + pLength);
glTexCoord2f_(1, 1); glVertex3f(px, py + pHeight, pz);
glEnd_()
glBindTexture_(#GL_TEXTURE_2D, Texture_1)
glBegin_(#GL_QUADS);
glTexCoord2f_(0, 0); glVertex3f(px + pWidth, py, pz);
glTexCoord2f_(1, 0); glVertex3f(px + pWidth, py, pz + pLength);
glTexCoord2f_(1, 1); glVertex3f(px + pWidth, py + pHeight, pz + pLength);
glTexCoord2f_(0, 1); glVertex3f(px + pWidth, py + pHeight, pz);
glEnd_()
glEndList_()
EndProcedure
OpenWindow(0, 0, 0, 800,600, "test1", #PB_Window_ScreenCentered|#PB_Window_SystemMenu)
OpenWindowedScreen(WindowID(0), 10, 10, 500, 500, 0, 0, 0)
hwnd = ScreenID()
OpenGLScreen(screen.GLscreen,hwnd)
UseTGAImageDecoder()
UseJPEGImageDecoder()
UsePNGImageDecoder()
Global Texture_1 = GLLoadAlphaTexture(1,"image","",0,0)
GenerateSkyBox(256,256,256)
Repeat
Event = WaitWindowEvent(0)
WindowID = EventWindow()
GadgetID = EventGadget()
EventType = EventType()
ExamineKeyboard()
ExamineMouse()
AngleY + MouseDeltaX()*0.2
AngleX + MouseDeltaY()*0.2
glDepthMask_(#False)
glMatrixMode_(#GL_MODELVIEW)
glLoadIdentity_()
glClear_(#GL_DEPTH_BUFFER_BIT)
glRotatef_(AngleX, 1, 0, 0)
glRotatef_(AngleY, 0, 1, 0)
glCallList_(SkyBoxList)
SwapBuffers_(screen\hdc)
glDepthMask_(#True)
Until Event = #PB_Event_CloseWindow Or GetAsyncKeyState_(#VK_ESCAPE)
ReleaseDC_(screen\hWnd,screen\hDC)