OpenGL Kugel

Anwendungen, Tools, Userlibs und anderes nützliches.
Benutzeravatar
nicolaus
Moderator
Beiträge: 1175
Registriert: 11.09.2004 13:09
Kontaktdaten:

OpenGL Kugel

Beitrag von nicolaus »

So hier mal noch ein kleines beispiel für OpenGL.
Ihr könnt den zustand der Kugel mit den Tasten F1, F2, F3 andern und mit Up und Down könnt ihr die Anzahl der Unterteilungen um die Z-Achse vergrößern oder verkleinern (beim Globus ist das der längengrad) und mit links und rechts könnt ihr die Anzahl der Unterteilungen entlang der Z-Achse an (beim Globus ist das der breitengrad).

Werd auch die nächsten tage dafür ein kleines tut schreiben sodas man auch sehen kann wie sowas gemacht wird.

OpenGL Kugel

Gruß Nico
Benutzeravatar
Hroudtwolf
Beiträge: 1416
Registriert: 30.10.2004 23:33
Kontaktdaten:

Beitrag von Hroudtwolf »

Schön, daß du uns damit erfreust.
Erfreulicher wäre jedoch die Source davon.


PS: Sieht gut aus. ;-)
Benutzeravatar
AndyX
Beiträge: 1272
Registriert: 17.12.2004 20:10
Wohnort: Niederösterreich
Kontaktdaten:

Beitrag von AndyX »

Stark :allright:
Benutzeravatar
nicolaus
Moderator
Beiträge: 1175
Registriert: 11.09.2004 13:09
Kontaktdaten:

Beitrag von nicolaus »

ok nachfolgend mal der code zu der OpenGL Kugel. Ihr braucht dazu aber die glWrapper-lib von traumatic.

Code: Alles auswählen

#WindowWidth = 600
#WindowHeight = 600
#glu_outside = 100020
#glu_fill = 100012
#glu_flat = 100001
#glu_error = 100103
#glu_line = 100011
#glu_point = 100010
#GL_DEPTH_TEST = $0B71
#GL_FOG = $0B60
#GL_COLOR_BUFFER_BIT = $00004000
#GL_DEPTH_BUFFER_BIT = $00000100
#GL_TRUE  = 1
#gl_false = 0
#gl_front = $0404
#gl_fill  = $1B02
#GL_flat  = $1D00
#WindowFlags = #PB_Window_TitleBar | #PB_Window_MaximizeGadget | #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_ScreenCentered

Global hwnd.l

Procedure MyWindowCallback(WindowID, message, wParam, lParam)
  Result = #PB_ProcessPureBasicEvents
  If message = #WM_SIZE
    glViewport_(0, 0, WindowWidth(), WindowHeight())
    Result = 1
  EndIf
  ProcedureReturn Result
EndProcedure
Global rot_x.f
Global rot_y.f
Global Flag
Global slices
Global stacks
Flag = #glu_fill
rot_x = 1.0
rot_y = 1.0
slices = 50
stacks = 20
If OpenWindow(0, 0, 0, #WindowWidth, #WindowHeight, #WindowFlags, "OpenGL Kugel Test ")
  
  SetWindowCallback(@MyWindowCallback()) 
  
  hwnd = WindowID(0)
  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   = 32  
  pixformat = ChoosePixelFormat_(hdc, pfd)
  SetPixelFormat_(hdc, pixformat, pfd)
  hrc = wglCreateContext_(hdc)
  wglMakeCurrent_(hdc, hrc)
  SwapBuffers_(hdc)
  glClearColor_(0.0, 0.0, 0.0, 1.0) 
  glEnable_(#GL_DEPTH_TEST) 
  glEnable_(#GL_FOG)
  Repeat
    Event = WindowEvent()
    Select Event 
      Case #WM_KEYDOWN 
        Select EventwParam()
          Case #vk_f1
          Debug "drin"
            Flag = #glu_point
          Case #vk_f2
            Flag = #glu_line
          Case #vk_f3
            Flag = #glu_fill
          Case #VK_UP
            slices +1
          Case #VK_DOWN
            slices -1
          Case #VK_LEFT
            stacks -1
          Case #VK_RIGHT
            stacks +1
        EndSelect
    EndSelect
    
    glClear_(#GL_COLOR_BUFFER_BIT | #GL_DEPTH_BUFFER_BIT)
    m_Kugel =   gluNewQuadric_()
    GluQuadricTexture_(m_Kugel,#gl_false)
    GluQuadricOrientation_(m_Kugel,#glu_outside)
    GluQuadricDrawStyle_(m_Kugel,Flag)
    GluQuadricNormals_(m_Kugel,#glu_flat)
    GluQuadricCallback_(m_Kugel,#glu_error,0)
    glLoadIdentity_()
    glpolygonmode_(#gl_front,#gl_fill)
    glshademodel_(#GL_flat)
    If rot_x <= 360.0 Or rot_y <= 360.0
      rot_x +0.5
      rot_y +0.5
    Else
      rot_x = 0.5
      rot_y = 0.5
    EndIf
    glRotatef_(rot_x, rot_y, rot_x, 0.0)
    glColor4f_(0.0, 1.0, 0.5,0.5)
    gluSphere__(m_Kugel,0.8,slices,stacks)
    glEnd_()
    SwapBuffers_(hdc)
  Until Event = #PB_Event_CloseWindow
  End
EndIf
Antworten