Page 1 of 1

OpenGl and cube

Posted: Sun Nov 27, 2005 10:26 pm
by Progi1984
Is it me or i have a problem with my cube ?

Code: Select all

; 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)


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 CreateCube(rot.f)
  glLoadIdentity_() ;create a new Object
  glTranslatef_(0.0, 0.25, 0.0) ; move 0.25 up
  glRotatef_(rot-1,1.0, 1.0, 1.0) ;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

Posted: Mon Nov 28, 2005 5:21 pm
by xperience2003
hi

plz add this line "glEnable_(#GL_DEPTH_TEST)" after glclearcolor

Posted: Mon Nov 28, 2005 6:23 pm
by Progi1984
Thank you for your help !