Publié : mer. 05/juil./2006 21:54
Oui l'include Opengl fonctionne, mais ne sert pas dans mon exempleCpl.Bator a écrit :Merci , tonton , c'est bien ce qu'il me semblait !
je cherchais dans ton code la formule de projection, j'ai vu que tu traite l'info directement sur la matrice, je vais en faire de meme, je vais en chier pour comprendre d'ou sorte toutes tes variables![]()
je vais faire des tests, si cela est concluant, je met le code pour qu'il soit compréhensible de tous, puis je diffuse sur le forum.
@Djes, j'ai vu l'include OpenGL, Fonctionne t'il ? car je ne vois que les objet en wireframe.
En tout cas merci encore

Code : Tout sélectionner
;- Program Includes
XIncludeFile "include\OpenGL.pb"
;- Program Constants
#Clear_Red=0.0
#Clear_Green=0.0
#Clear_Blue=0.0
#Clear_Alpha=1.0
#NearClip=-1
#FarClip=1
; Some Window's Constants that were not defined
#DM_BITSPERPEL=$40000
#DM_PELSWIDTH=$80000
#DM_PELSHEIGHT=$100000
#CDS_FULLSCREEN=4
#DISP_CHANGE_SUCCESSFUL=0
#SC_MONITORPOWER=$F170
;- Program Globals
Global hwnd.l
Global hdc.l
Global hrc.l
Global hInstance.l
Global Dim Keys.b(256)
Global Active.b
Global Fullscreen.b
;defaults
Active=#True
Fullscreen=#True
;- Program Procedures
Procedure ResizeScreen(Width, Height) ;returns nothing
glViewport_(0, 0, Width, Height)
glMatrixMode_(#GL_PROJECTION)
glLoadIdentity_()
glOrtho_(0, Width, Height, 0, #NearClip, #FarClip)
glMatrixMode_(#GL_MODELVIEW)
glLoadIdentity_()
EndProcedure
Procedure RendererInit() ;returns a nothing
glShadeModel_(#GL_SMOOTH)
glClearColor_(#Clear_Red, #Clear_Green, #Clear_Blue, #Clear_Alpha)
glClearDepth_(1.0)
glDepthFunc_(#GL_LEQUAL)
glHint_(#GL_POINT_SMOOTH_HINT, #GL_NICEST)
ProcedureReturn #True
EndProcedure
Procedure.b DrawScene() ;returns a bool
SwapBuffers_(hdc)
glClear_(#GL_COLOR_BUFFER_BIT|#GL_DEPTH_BUFFER_BIT)
EndProcedure
Procedure.b DestroyScreen() ;returns a nothing
If Fullscreen
ChangeDisplaySettings_(#Null,0)
ShowCursor_(#True)
EndIf
If hrc
If wglMakeCurrent_(#Null,#Null)
Else
MessageRequester("Error","The Release of DC and RC Failed!",#MB_OK|#MB_ICONINFORMATION)
EndIf
If wglDeleteContext_(hrc)
Else
MessageRequester("Error","The Release of the Rendering Context Failed!",#MB_OK|#MB_ICONINFORMATION)
EndIf
hrc=#Null
EndIf
If hdc And ReleaseDC_(hwnd,hdc)
Else
MessageRequester("Error","The Release of the Device Context Failed!",#MB_OK|#MB_ICONINFORMATION)
hdc=#Null
EndIf
If hwnd And DestroyWindow_(hwnd)
Else
MessageRequester("Error","Could Not Release hwnd",#MB_OK|#MB_ICONINFORMATION)
hwnd=#Null
EndIf
If UnregisterClass_("OpenGL",hInstance)
Else
MessageRequester("Error","Could Not Unregister Class!",#MB_OK|#MB_ICONINFORMATION)
hInstance=#Null
EndIf
EndProcedure
Procedure.l WindowCallback(phwnd.l,uMsg.l,wParam.l,lParam.l) ;returns a Long
Select uMsg
Case #WM_ACTIVATE
If ~wParam>>8
Active=#True
Else
Active=#False
EndIf
ProcedureReturn 0
Case #WM_SYSCOMMAND
Select wParam
Case #SC_SCREENSAVE
ProcedureReturn 0
Case #SC_MONITORPOWER
ProcedureReturn 0
EndSelect
Case #WM_CLOSE
PostQuitMessage_(0)
ProcedureReturn 0
Case #WM_KEYDOWN
Keys(wParam)=#True
ProcedureReturn 0
Case #WM_KEYUP
Keys(wParam)=#False
ProcedureReturn 0
Case #WM_SIZE
ResizeScreen(wParam&$00FF,Value>>8)
ProcedureReturn 0
Default
ProcedureReturn DefWindowProc_(phwnd,uMsg,wParam,lParam)
EndSelect
EndProcedure
Procedure.b CreateScreen(Title.s,Width.l,Height.l,Bits.l,FullscreenFlag.b) ;returns a Bool
PixelFormat.l
WC.WNDCLASS
ExStyle.l
style.l
WindowRect.RECT
WindowRect\left=0
WindowRect\right=Width
WindowRect\top=0
WindowRect\bottom=Height
Fullscreen=FullscreenFlag
hInstance=GetModuleHandle_(#Null)
WC\style=#CS_HREDRAW|#CS_VREDRAW|#CS_OWNDC
WC\lpfnWndProc=@WindowCallback()
WC\cbClsExtra=0
WC\cbWndExtra=0
WC\hInstance=hInstance
WC\hIcon=LoadIcon_(#Null, #IDI_WINLOGO)
WC\hCursor=LoadCursor_(#Null, #IDC_ARROW)
WC\hbrBackground=#Null
WC\lpszMenuName=#Null
WC\lpszClassName=@"OpenGL"
If RegisterClass_(WC)
Else
MessageRequester("Error", "Failed To Register The Window Class!",#MB_OK|#MB_ICONEXCLAMATION)
ProcedureReturn #False
EndIf
If Fullscreen
DMScreenSettings.DEVMODE
DMScreenSettings\dmSize=SizeOf(DEVMODE)
DMScreenSettings\dmPelsWidth=Width
DMScreenSettings\dmPelsHeight=Height
DMScreenSettings\dmBitsPerPel=Bits
DMScreenSettings\dmFields=#DM_BITSPERPEL|#DM_PELSWIDTH|#DM_PELSHEIGHT
If ChangeDisplaySettings_(DMScreenSettings,#CDS_FULLSCREEN)<>#DISP_CHANGE_SUCCESSFUL
If MessageRequester("Error","The Requested Fullscreen Mode Is Not Supported By "+Chr(10)+"Your Video Card. Use Windowed Mode Instead?",#MB_YESNO|#MB_ICONEXCLAMATION)=#IDYES
Fullscreen=#False
Else
MessageRequester("Error","Could Not Open Full Screen!",#MB_OK|#MB_ICONSTOP)
EndIf
ProcedureReturn #False
EndIf
EndIf
If Fullscreen
ExStyle=#WS_EX_APPWINDOW|#WS_EX_WINDOWEDGE
style=#WS_POPUP
ShowCursor_(#False)
Else
ExStyle=#WS_EX_APPWINDOW|#WS_EX_WINDOWEDGE
style=#WS_OVERLAPPEDWINDOW
EndIf
AdjustWindowRectEx_(WindowRect,style,#False,ExStyle)
hwnd=CreateWindowEx_(ExStyle,"OpenGL",Title,Style|WS_CLIPSIBLINGS|WS_CLIPCHILDREN,0,0,WindowRect\right-WindowRect\left,WindowRect\bottom-WindowRect\top,#Null,#Null,hInstance,#Null)
If hwnd
Else
DestroyScreen()
MessageRequester("Error","Cannot Create Window!",#MB_OK|#MB_ICONEXCLAMATION)
ProcedureReturn #False
EndIf
pfd.PIXELFORMATDESCRIPTOR
pfd\nSize=SizeOf(PIXELFORMATDESCRIPTOR)
pfd\nVersion=1
pfd\dwFlags=#PFD_DRAW_TO_WINDOW|#PFD_SUPPORT_OPENGL|#PFD_DOUBLEBUFFER
pfd\iPixelType=#PFD_TYPE_RGBA
pfd\cColorBits=Bits
pfd\cRedBits=0
pfd\cRedShift=0
pfd\cGreenBits=0
pfd\cGreenShift=0
pfd\cBlueBits=0
pfd\cBlueShift=0
pfd\cAlphaBits=0
pfd\cAlphaShift=0
pfd\cAccumBits=0
pfd\cAccumRedBits=0
pfd\cAccumGreenBits=0
pfd\cAccumBlueBits=0
pfd\cAccumAlphaBits=0
pfd\cDepthBits=16
pfd\cStencilBits=0
pfd\cAuxBuffers=0
pfd\iLayerType=#PFD_MAIN_PLANE
pfd\bReserved=0
pfd\dwLayerMask=0
pfd\dwVisibleMask=0
pfd\dwDamageMask=0
hdc=GetDC_(hwnd)
If hdc
Else
DestroyScreen()
MessageRequester("Error","Can't Create a GL Device Context!",#MB_OK|#MB_ICONEXCLAMATION)
ProcedureReturn #False
EndIf
PixelFormat=ChoosePixelFormat_(hdc,pfd)
If PixelFormat
Else
DestroyScreen()
MessageRequester("Error","Cannot Find a Suitable PixelFormat!",#MB_OK|#MB_ICONEXCLAMATION)
ProcedureReturn #False
EndIf
If SetPixelFormat_(hdc,PixelFormat,pfd)
Else
DestroyScreen()
MessageRequester("Error","Cannot Set The PixelFormat!",#MB_OK|#MB_ICONEXCLAMATION)
ProcedureReturn #False
EndIf
hrc=wglCreateContext_(hdc)
If hrc
Else
DestroyScreen()
MessageRequester("Error","Cannot Create a GL Rendering Context!",#MB_OK|#MB_ICONEXCLAMATION)
ProcedureReturn #False
EndIf
If wglMakeCurrent_(hdc,hrc)
Else
DestroyScreen()
MessageRequester("Error","Cannot Activate The GL Rendering Context!",#MB_OK|#MB_ICONEXCLAMATION)
ProcedureReturn #False
EndIf
ShowWindow_(hwnd,#SW_SHOW)
SetForegroundWindow_(hwnd)
SetFocus_(hwnd)
ResizeScreen(Width,Height)
If RendererInit()
Else
DestroyScreen()
MessageRequester("Error","Cannot Initialize OpenGL!",#MB_OK|#MB_ICONEXCLAMATION)
ProcedureReturn #False
EndIf
ProcedureReturn #True
EndProcedure
Procedure ScreenEvent()
msg.MSG
PeekMessage_(msg,#Null,0,0,#PM_REMOVE)
WindowCallback(hwnd,msg\message,msg\wParam,msg\lParam)
If msg
If msg\message=#WM_QUIT
DestroyScreen()
End
EndIf
Else
TranslateMessage_(msg)
DispatchMessage_(msg)
EndIf
ProcedureReturn msg\message
EndProcedure
Procedure StartRendering()
glBegin_(#GL_POINTS)
EndProcedure
Procedure StopRendering()
glEnd_()
EndProcedure
Procedure FlipAndClear()
SwapBuffers_(hdc)
glClear_(#GL_COLOR_BUFFER_BIT|#GL_DEPTH_BUFFER_BIT)
EndProcedure
;- Program Entry Point
;********************************
;*Name: Fire *
;*By: Dreglor *
;*last updated: 8-31-05 6:11pm *
;********************************
y.w=0
x.w=0
screen_width.w=1024
screen_height.w=768
Dim cool.w(screen_width,screen_height)
Dim buf.w(screen_width,screen_height)
yy.w=0
xx.w=0
For y=1 To screen_height-1
For x=1 To screen_width-1
cool(x,y)=Random(3)
buf(x,y)=0
Next x
Next y
Dim color(255)
For i=0 To 84
color(i)=Int(255/84*i)+0<<8+0<<16
color(i+85)=255+Int(255/84*i)<<8+0<<16
color(i+85+85)=255+255<<8+Int(255/84*i)<<16
Next i
If MessageRequester("Start FullScreen?","Would You Like To Run In Fullscreen Mode?",#MB_YESNO|#MB_ICONQUESTION)=#IDNO
Fullscreen=#False
EndIf
If CreateScreen("PB With OpenGL!",screen_width,screen_height,32,Fullscreen)
Else
End
EndIf
While done<>#True
msg=ScreenEvent()
If Active
If Keys(#VK_ESCAPE)
done=#True
Else
glBegin_(#GL_POINTS)
For y=1 To screen_height-1
For x=1 To screen_width-1
If buf(x,y) > 0
If buf(x,y) < 0
buf(x,y)=0
Else
buf(x,y)=((buf(x+1,y)+buf(x-1,y)+buf(x,y+1)+buf(x,y-1))/4-cool(x,y))
EndIf
buf(x,y-1)=buf(x,y)
cool(x,y-1)=cool(x,y)
cool(x,y)=Random(3)
If buf(x,y) > 0
;Plot(x,y,color(buf(x,y)))
muiltplier.f=1
red.f=Red(color(buf(x,y)))/255
green.f=Green(color(buf(x,y)))/255
blue.f=Blue(color(buf(x,y)))/255
glColor4f_(red,green,blue,1.0)
glVertex2i_(x,y)
EndIf
EndIf
buf(x,screen_height-2)=255
Next x
Next y
glEnd_()
FlipAndClear()
EndIf
If Keys(#VK_F1)
Keys(#VK_F1)=#False
DestroyScreen()
Fullscreen=~Fullscreen
If CreateScreen("PB With OpenGL!",screen_width,screen_height,32,Fullscreen)
Else
End
EndIf
EndIf
EndIf
Wend
DestroyScreen()
End