quelqu'un aurait il une experience sur la gestion openGl sous autoit et plus particuliètrement sur la fonction "glulookat".
J'ai trouvé un exemple sur le forum anglais mais ce dernier plante autoit.
Meme apres le passage de float en double comme préconisé sur ce forum.
voici le code:
► Afficher le texte
Code : Tout sélectionner
Global Const $GL_VERSION_1_1 = 1
Global Const $PFD_TYPE_RGBA = 0
Global Const $PFD_MAIN_PLANE = 0
Global Const $PFD_DOUBLEBUFFER = 1
Global Const $PFD_DRAW_TO_WINDOW = 4
Global Const $PFD_SUPPORT_OPENGL = 32
Global Const $GL_PROJECTION = 0x1701
Global Const $GL_COLOR_BUFFER_BIT = 0x00004000
Global Const $GL_TRIANGLES = 0x0004
Global $gui = GUICreate("OpenGL", 250, 250)
GUISetBkColor(0x000000)
Global $dc
EnableOpenGL($gui, $dc)
;glMatrixMode($GL_PROJECTION)
;glViewport(0, 0, 250, 250)
GUISetState(@SW_SHOW)
While GUIGetMsg() <> -3
glClear($GL_COLOR_BUFFER_BIT)
glBegin($GL_TRIANGLES)
glColor3f(0, 1, 0)
glVertex3f(-.75, -.5, 0)
glColor3f(1, 0, 0)
glVertex3f(0, .75, 0)
glColor3f(0, 0, 1)
glVertex3f( .75, -.5, 0)
glEnd()
SwapBuffers($dc)
glMatrixMode("GL_PROJECTION" )
glLoadIdentity()
gluPerspective(10.0, 1.0, 0.0, 60.0)
glMatrixMode( "GL_MODELVIEW" )
glLoadIdentity()
gluLookAt( 1.0, 1.0,1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0 )
WEnd
Func EnableOpenGL($hwnd, ByRef $hDC)
Local $pfd = DllStructCreate("short nSize;" & _
"short nVersion;" & _
"dword dwFlags;" & _
"byte iPixelType;" & _
"byte cColorBits;" & _
"byte cRedBits;" & _
"byte cRedShift;" & _
"byte cGreenBits;" & _
"byte cGreenShift;" & _
"byte cBlueBits;" & _
"byte cBlueShift;" & _
"byte cAlphaBits;" & _
"byte cAlphaShift;" & _
"byte cAccumBits;" & _
"byte cAccumRedBits;" & _
"byte cAccumGreenBits;" & _
"byte cAccumBlueBits;" & _
"byte cAccumAlphaBits;" & _
"byte cDepthBits;" & _
"byte cStencilBits;" & _
"byte cAuxBuffers;" & _
"byte iLayerType;" & _
"byte bReserved;" & _
"dword dwLayerMask;" & _
"dword dwVisibleMask;" & _
"dword dwDamageMask;")
Local $h_dc = DllCall("user32.dll", "hwnd", "GetDC", "hwnd", $hwnd)
DllStructSetData($pfd, "nSize", DllStructGetSize($pfd))
DllStructSetData($pfd, "nVersion", $GL_VERSION_1_1)
DllStructSetData($pfd, "dwFlags", BitOR($PFD_DRAW_TO_WINDOW, $PFD_SUPPORT_OPENGL, $PFD_DOUBLEBUFFER))
DllStructSetData($pfd, "iPixelType", $PFD_TYPE_RGBA)
DllStructSetData($pfd, "cColorBits", 24)
DllStructSetData($pfd, "cDepthBits", 16)
DllStructSetData($pfd, "iLayerType", $PFD_MAIN_PLANE)
DllOpen("gdi32.dll")
DllOpen("opengl32.dll")
DllOpen( "Glu32.dll" )
Local $iFormat = DllCall("gdi32.dll", "int", "ChoosePixelFormat", "hwnd", $h_dc[0], "ptr", DllStructGetPtr($pfd))
Local $iSetFormat = DllCall("gdi32.dll", "int", "SetPixelFormat", "hwnd", $h_dc[0], "int", $iFormat[0], "ptr", DllStructGetPtr($pfd))
Local $h_cont = DllCall("opengl32.dll", "hwnd", "wglCreateContext", "hwnd", $h_dc[0])
Local $iRet = DllCall("opengl32.dll", "int", "wglMakeCurrent", "int", $h_dc[0], "int", $h_cont[0])
$hDC = $h_dc[0]
Return 1 ; absolutley no error checking at this moment
EndFunc ;==>EnableOpenGL
Func glBegin($mode)
DllCall("opengl32.dll", "none", "glBegin", "uint", $mode)
EndFunc ;==>glBegin
Func glClear($mask)
DllCall("opengl32.dll", "none", "glClear", "uint", $mask)
EndFunc ;==>glClear
Func glColor3f($red, $green, $blue)
DllCall("opengl32.dll", "none", "glColor3f", "float", $red, "float", $green, "float", $blue)
EndFunc ;==>glColor3f
Func glEnd()
DllCall("opengl32.dll", "none", "glEnd")
EndFunc ;==>glEnd
Func glLoadIdentity()
DllCall("opengl32.dll", "none", "glLoadIdentity")
EndFunc ;==>_glLoadIdentity
Func gluLookAt($x1, $y1, $z1,$x2, $y2, $z2, $0, $1, $00)
DllCall( "Glu32.dll", "none", "gluLookAt", "float", $x1,"float", $y1,"float", $z1,"float", $x2,"float", $y2,"float", $z2, "float" , $0, "float", $1, "float", $00 )
Endfunc
Func gluPerspective($n1, $n2, $f1,$f2)
DllCall( "Glu32.dll", "none", "gluPerspective", "float", $n1,"float", $n2,"float", $f1,"float", $f2)
Endfunc
Func glMatrixMode($mode)
DllCall("opengl32.dll", "none", "glMatrixMode", "uint", $mode)
EndFunc ;==>glMatrixMode
Func glVertex3f($x, $y, $z)
DllCall("opengl32.dll", "none", "glVertex3f", "float", $x, "float", $y, "float", $z)
EndFunc ;==>glVertex3f
Func glViewport($x, $y, $width, $height)
DllCall("opengl32.dll", "none", "glViewport", "int", $x, "int", $y, "int", $width, "int", $height)
EndFunc ;==>glViewport
Func SwapBuffers($hDC)
DllCall("gdi32.dll", "int", "SwapBuffers", "hwnd", $hDC)
EndFunc ;==>SwapBuffersje trouve pas mal de chose sur OpenGL mais vraiment rien de probant sur cette fonction.Quelqu'un l'a t'il déja implémentée sous AutoIt ?
Merci à tous par avance.
Cédric




