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
OpenGL Kugel
- Hroudtwolf
- Beiträge: 1416
- Registriert: 30.10.2004 23:33
- Kontaktdaten:
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