Code : Tout sélectionner
; Triangle
;
;
; This is the second tutorial of pbgl.
; Here we learn how you can create, rotate, move and scale a triangle.
; ---
; First we create a window:
XIncludeFile "OpenGL1.pb" ;Includefile(see http://www.panicblue\xdn.de/pbgl/ link Links)
;Windowsettings
#WindowWidth = 500
#WindowHeight = 400
#WindowFlags = #PB_Window_TitleBar | #PB_Window_MaximizeGadget | #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_ScreenCentered
Version = 2
Global hWnd.l,hDc
Declare CreateCube2()
Declare CreateCube(rot.f)
Procedure GL_Callback(WindowID, Message, wParam, lParam)
Result = #PB_ProcessPureBasicEvents
If Message = #WM_SIZE
glViewport_(0, 0, WindowWidth(), WindowHeight()) ;Resize the OpenGLscene
Result = 1
EndIf
ProcedureReturn Result
EndProcedure
;-Constantes
#Nb_vertex=2000
#Nb_polygones=2000
;-Structures
Structure TVertex
x.f
y.f
z.f
EndStructure
Structure TPolygone
ida.w
idb.w
idc.w
EndStructure
Structure TObjet
Vertex.TVertex[#Nb_vertex]
Polygone.TPolygone[#Nb_polygones]
EndStructure
Dim Objet.Tobjet(1000)
;-Tableaux
CreateCube2()
If OpenWindow(0, 0, 0, #WindowWidth, #WindowHeight, #WindowFlags, "PBGL - Tutorial "+Str(Version)) ;Fenster öffnen
SetWindowCallback(@GL_Callback())
hWnd = WindowID(0) ;create a handle to the window
pfd.PIXELFORMATDESCRIPTOR ;start opengl
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\idcColorBits = 24 ;colorbuffer(24bit)
;pfd\idcDepthBits = 32 ;depthbuffer
pixformat = ChoosePixelFormat_(hDC, pfd)
SetPixelFormat_(hDC, pixformat, pfd)
hrc = wglCreateContext_(hDC)
wglMakeCurrent_(hDC, hrc)
SwapBuffers_(hDC) ;in purebasic you have to call this command once at the start.
glClearColor_(0.0, 0.0, 1.0, 1.0) ;Backgroundcolor (Parameters: (1/255)*Red, (1/255)*Green, (1/255)*Blue, Alpha)
Repeat
glClear_(#GL_COLOR_BUFFER_BIT | #GL_DEPTH_BUFFER_BIT) ; Delete
;Here we can draw
CreateCube(rot)
SwapBuffers_(hDC) ;draw
rot + 1
Event = WindowEvent() ;We should use WindowEvent, because the Animation shouldn't stop
Delay(5)
Until Event = #PB_Event_CloseWindow
End
EndIf
Procedure CreateGLWindow()
EndProcedure
Procedure CreateCube(rot.f)
glLoadIdentity_() ;create a new Object
glTranslatef_(0.0, -0.25, 0.0) ; move 0.25 up
glRotatef_(rot,0.5, 0.5, 0.5) ;rotate around x, y and z
glScalef_(0.75, 0.75, 0.75) ;scale with the scalefaktor 0.75
glBegin_(#GL_TRIANGLES) ;start with the drawing(you can also create quadratics or polygons with #GL_QUADS, ...)
For i=0 To 11
glColor3f_(1.0,0.0,0.0)
glVertex3f_(objet(0)\vertex[objet(0)\polygone[i]\ida]\x, objet(0)\vertex[objet(0)\polygone[i]\ida]\y, objet(0)\vertex[objet(0)\polygone[i]\ida]\z)
glColor3f_(0.0,1.0,0.0);
glVertex3f_( objet(0)\vertex[objet(0)\polygone[i]\idb]\x, objet(0)\vertex[objet(0)\polygone[i]\idb]\y, objet(0)\vertex[objet(0)\polygone[i]\idb]\z)
glColor3f_(0.0,0.0,1.0);
glVertex3f_( objet(0)\vertex[objet(0)\polygone[i]\idc]\x, objet(0)\vertex[objet(0)\polygone[i]\idc]\y, objet(0)\vertex[objet(0)\polygone[i]\idc]\z)
Next
glEnd_()
EndProcedure
Procedure CreateCube2()
Objet(0)\vertex[0]\x=0;
Objet(0)\vertex[0]\y=0;
Objet(0)\vertex[0]\z=0; //vertex v0
Objet(0)\vertex[1]\x=1;
Objet(0)\vertex[1]\y=0;
Objet(0)\vertex[1]\z=0; //vertex v1
Objet(0)\vertex[2]\x=1;
Objet(0)\vertex[2]\y=0;
Objet(0)\vertex[2]\z=1; //vertex v2
Objet(0)\vertex[3]\x=0;
Objet(0)\vertex[3]\y=0;
Objet(0)\vertex[3]\z=1; //vertex v3
Objet(0)\vertex[4]\x=0;
Objet(0)\vertex[4]\y=1;
Objet(0)\vertex[4]\z=0; //vertex v4
Objet(0)\vertex[5]\x=1;
Objet(0)\vertex[5]\y=1;
Objet(0)\vertex[5]\z=0; //vertex v5
Objet(0)\vertex[6]\x=1;
Objet(0)\vertex[6]\y=1;
Objet(0)\vertex[6]\z=1; //vertex v6
Objet(0)\vertex[7]\x=0;
Objet(0)\vertex[7]\y=1;
Objet(0)\vertex[7]\z=1; //vertex v7
Objet(0)\polygone[0]\ida=0
Objet(0)\polygone[0]\idb=1
Objet(0)\polygone[0]\idc=4
Objet(0)\polygone[1]\ida=1
Objet(0)\polygone[1]\idb=5
Objet(0)\polygone[1]\idc=4
Objet(0)\polygone[2]\ida=1
Objet(0)\polygone[2]\idb=2
Objet(0)\polygone[2]\idc=5
Objet(0)\polygone[3]\ida=2
Objet(0)\polygone[3]\idb=6
Objet(0)\polygone[3]\idc=5
Objet(0)\polygone[4]\ida=2
Objet(0)\polygone[4]\idb=3
Objet(0)\polygone[4]\idc=6
Objet(0)\polygone[5]\ida=3
Objet(0)\polygone[5]\idb=7
Objet(0)\polygone[5]\idc=6
Objet(0)\polygone[6]\ida=3
Objet(0)\polygone[6]\idb=0
Objet(0)\polygone[6]\idc=7
Objet(0)\polygone[7]\ida=0
Objet(0)\polygone[7]\idb=4
Objet(0)\polygone[7]\idc=7
Objet(0)\polygone[8]\ida=4
Objet(0)\polygone[8]\idb=5
Objet(0)\polygone[8]\idc=7
Objet(0)\polygone[9]\ida=5
Objet(0)\polygone[9]\idb=6
Objet(0)\polygone[9]\idc=7
Objet(0)\polygone[10]\ida=3
Objet(0)\polygone[10]\idb=2
Objet(0)\polygone[10]\idc=0
Objet(0)\polygone[11]\ida=2
Objet(0)\polygone[11]\idb=1
Objet(0)\polygone[11]\idc=0
EndProcedure