Could you tell me if you see the character running?
On my desktop computer, everything is fine, but on my laptop, the character is distorted: http://xmas.free.fr/AE_bug.bmp
Code: Select all
;-CONSTANTS
Enumeration
#MainWindow
#OpenGLGadget
EndEnumeration
;These two GL constants are used for texture creation. Don't change their values.
#GL_BGR = $80E0
#GL_BGRA = $80E1
If ExamineDesktops()
ddw=DesktopWidth(0)
ddh=DesktopHeight(0)
Else
ddw=1024
ddh=768
EndIf
;********************* DPI *********************
dpix.f=DesktopResolutionX()
dpiy.f=DesktopResolutionY()
xf.f=(1920/ddw)*dpix
yf.f=(1080/ddh)*dpiy
;**********************************************
;-STRUCTURES
Structure Integer2
X.i
Y.i
EndStructure
Global.Integer2 WindowDim
WindowDim\X = ddw
WindowDim\Y = ddh
;-DEFINES
Define.i Event
Define.i WindowFlags = #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget
;-DECLARES
Declare Render()
Declare Render2DQuad(OGLTexture.i, StartX.d, StartY.d, Width.i, Height.i, Z.d)
Declare SetupOpenGL()
Declare SetupGLTexture(ImageHandle.i)
;-MAIN WINDOW
win=OpenWindow(#MainWindow, 0, 0,ddw,ddh, "Polygons_Run_2",#PB_Window_Maximize|#PB_Window_BorderLess)
If win=0
Beep_(500,250) : Delay(150) : Beep_(500,250)
MessageRequester("Erreur","OpenWindow() impossible")
End
EndIf
screenGL=OpenGLGadget(#OpenGLGadget,0,0,ddw,ddh)
If screenGL=0
Beep_(500,250) : Delay(150) : Beep_(500,250)
MessageRequester("Erreur","OpenGLGadget() impossible")
End
EndIf
SetupOpenGL()
AddKeyboardShortcut(0, #PB_Shortcut_Escape, 666) ; quitter
glOrtho_(0,ddw,ddh,0,-1,1)
glMatrixMode_(#GL_MODELVIEW)
glLoadIdentity_()
glClear_(0)
;*********************************************************************************************************************************
;*********************************************************************************************************************************
;*********************************************************************************************************************************
dw2=ddw/2
dh2=ddh/2
dep=6
;;;;;;;;;;;
;;;;;;;;;;;
; xx=ddw/2
; yy=ddh/2
;
; origin_x=160
; origin_y=460
;;;;;;;;;;
;;;;;;;;;;;
long=180
Dim poly_mx2(long)
Dim poly_my2(long)
For i=1 To long
Read.w poly_mx2(i-1)
Read.w poly_my2(i-1)
Next
; xx=origin_x
; yy=origin_y
;*********************************************************************************************************************************
Dim couleur.f(3,15)
Dim partiex.f(15,12)
Dim partiey.f(15,12)
Dim saut(15)
timer=ElapsedMilliseconds()
Dim angle.f(15)
an1.f=0.1
sens=1
depx=150
depy=ddh/5
glClearColor_(0,0,0, 1.0)
;-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#################**********************************************
;-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#################**********************************************
;-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#################**********************************************
;-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#################**********************************************
;-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#################**********************************************
;-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#################**********************************************
;-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#################**********************************************
Repeat
glClear_(#GL_COLOR_BUFFER_BIT | #GL_DEPTH_BUFFER_BIT)
;;;;;;;;;;;;;;;
Dim xx(15)
Dim yy(15)
Dim xxx(15)
Dim yyy(15)
xx(13)=160:yy(13)=460
; bras devant
xx(14)=150:yy(14)=260
xx(15)=151:yy(15)=447
; bras fond
xx(1)=150:yy(1)=260
xx(2)=151:yy(2)=447
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; jambe fond
xx(3)=160:yy(3)=460
xx(4)=188:yy(4)=700
; chaussure fond
xx(5)=189:yy(5)=987
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; jambe visible
xx(6)=160:yy(6)=460
xx(7)=188:yy(7)=700
; chaussure visible
xx(8)=189:yy(8)=987
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; cou
xx(9)=169:yy(9)=198
; tete
xx(10)=173:yy(10)=169
xx(11)=173:yy(11)=169
xx(12)=173:yy(12)=169
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;- ================== angle
;
angle(1)=Cos(an1)*1.2
angle(2)=-0.5+Cos(an1)*1.2
;an1+0.1
angle(14)=Cos(an1+3)*1.2
angle(15)=-0.5+Cos(an1+3)*1.2
an1+0.1
angle(3)=Cos(an1)
angle(4)=0.5+Cos(an1)
angle(5)=0.5+Cos(an1)
angle(6)=Cos(an1+3)
angle(7)=0.5+Cos(an1+3)
angle(8)=0.5+Cos(an1+3)
;an1+0.1
;an1+0.08
angle(13)=0.3+Cos(an1)*0.1
angle(9)=Cos(an1)*0.1
angle(10)=0.3+Cos(an1)*0.1
angle(11)=angle(10)
angle(12)=angle(10)
depx+dep
; partiex(nb0,i)=xxx(nb0)+(poly_mx2(nb2+4+i)/xf.f - xx(nb0)) * Cos(angle(nb0)) - (poly_my2(nb2+4+i)/yf.f - yy(nb0)) * Sin(angle(nb0)) +xx(nb0)
nb0=13
xxx(14)=(xx(14)/xf.f - xx(nb0)) * Cos(angle(nb0)) - (yy(14)/yf.f - yy(nb0)) * Sin(angle(nb0)) +xx(nb0)-xx(14)
yyy(14)=(xx(14)/xf.f - xx(nb0)) * Sin(angle(nb0)) + (yy(14)/yf.f - yy(nb0)) * Cos(angle(nb0)) +yy(nb0)-yy(14)
nb0=14
xxx(15)=xxx(14)+(xx(15)/xf.f - xx(nb0)) * Cos(angle(nb0)) - (yy(15)/yf.f - yy(nb0)) * Sin(angle(nb0)) +xx(nb0)-xx(15)
yyy(15)=yyy(14)+(xx(15)/xf.f - xx(nb0)) * Sin(angle(nb0)) + (yy(15)/yf.f - yy(nb0)) * Cos(angle(nb0)) +yy(nb0)-yy(15)
nb0=13
xxx(1)=(xx(1)/xf.f - xx(nb0)) * Cos(angle(nb0)) - (yy(1)/yf.f - yy(nb0)) * Sin(angle(nb0)) +xx(nb0)-xx(1)
yyy(1)=(xx(1)/xf.f - xx(nb0)) * Sin(angle(nb0)) + (yy(1)/yf.f - yy(nb0)) * Cos(angle(nb0)) +yy(nb0)-yy(1)
nb0=1
xxx(2)=xxx(1)+(xx(2)/xf.f - xx(nb0)) * Cos(angle(nb0)) - (yy(2)/yf.f - yy(nb0)) * Sin(angle(nb0)) +xx(nb0)-xx(2)
yyy(2)=yyy(1)+(xx(2)/xf.f - xx(nb0)) * Sin(angle(nb0)) + (yy(2)/yf.f - yy(nb0)) * Cos(angle(nb0)) +yy(nb0)-yy(2)
;le cou
nb0=13
xxx(9)=(xx(9)/xf.f - xx(nb0)) * Cos(angle(nb0)) - (yy(9)/yf.f - yy(nb0)) * Sin(angle(nb0)) +xx(nb0)-xx(9)
yyy(9)=(xx(9)/xf.f - xx(nb0)) * Sin(angle(nb0)) + (yy(9)/yf.f - yy(nb0)) * Cos(angle(nb0)) +yy(nb0)-yy(9)
;la tete
nb0=9
xxx(10)=xxx(9)+(xx(10)/xf.f - xx(nb0)) * Cos(angle(nb0)) - (yy(10)/yf.f - yy(nb0)) * Sin(angle(nb0)) +xx(nb0)-xx(10)
yyy(10)=yyy(9)+(xx(10)/xf.f - xx(nb0)) * Sin(angle(nb0)) + (yy(10)/yf.f - yy(nb0)) * Cos(angle(nb0)) +yy(nb0)-yy(10)
xxx(11)=xxx(9)+(xx(11)/xf.f - xx(nb0)) * Cos(angle(nb0)) - (yy(11)/yf.f - yy(nb0)) * Sin(angle(nb0)) +xx(nb0)-xx(11)
yyy(11)=yyy(9)+(xx(11)/xf.f - xx(nb0)) * Sin(angle(nb0)) + (yy(11)/yf.f - yy(nb0)) * Cos(angle(nb0)) +yy(nb0)-yy(11)
xxx(12)=xxx(9)+(xx(12)/xf.f - xx(nb0)) * Cos(angle(nb0)) - (yy(12)/yf.f - yy(nb0)) * Sin(angle(nb0)) +xx(nb0)-xx(12)
yyy(12)=yyy(9)+(xx(12)/xf.f - xx(nb0)) * Sin(angle(nb0)) + (yy(12)/yf.f - yy(nb0)) * Cos(angle(nb0)) +yy(nb0)-yy(12)
;la jambe du fond
nb0=13
xxx(3)=xxx(13)+(xx(3)/xf.f - xx(nb0)) * Cos(angle(nb0)) - (yy(3)/yf.f - yy(nb0)) * Sin(angle(nb0)) +xx(nb0)-xx(3)
yyy(3)=yyy(13)+(xx(3)/xf.f - xx(nb0)) * Sin(angle(nb0)) + (yy(3)/yf.f - yy(nb0)) * Cos(angle(nb0)) +yy(nb0)-yy(3)
nb0=3
xxx(4)=xxx(3)+(xx(4)/xf.f - xx(nb0)) * Cos(angle(nb0)) - (yy(4)/yf.f - yy(nb0)) * Sin(angle(nb0)) +xx(nb0)-xx(4)
yyy(4)=yyy(3)+(xx(4)/xf.f - xx(nb0)) * Sin(angle(nb0)) + (yy(4)/yf.f - yy(nb0)) * Cos(angle(nb0)) +yy(nb0)-yy(4)
nb0=4
xxx(5)=xxx(4)+(xx(5)/xf.f - xx(nb0)) * Cos(angle(nb0)) - (yy(5)/yf.f - yy(nb0)) * Sin(angle(nb0)) +xx(nb0)-xx(5)
yyy(5)=yyy(4)+(xx(5)/xf.f - xx(nb0)) * Sin(angle(nb0)) + (yy(5)/yf.f - yy(nb0)) * Cos(angle(nb0)) +yy(nb0)-yy(5)
;la jambe de devant
nb0=13
xxx(6)=xxx(13)+(xx(6)/xf.f - xx(nb0)) * Cos(angle(nb0)) - (yy(6)/yf.f - yy(nb0)) * Sin(angle(nb0)) +xx(nb0)-xx(6)
yyy(6)=yyy(13)+(xx(6)/xf.f - xx(nb0)) * Sin(angle(nb0)) + (yy(6)/yf.f - yy(nb0)) * Cos(angle(nb0)) +yy(nb0)-yy(6)
nb0=6
xxx(7)=xxx(6)+(xx(7)/xf.f - xx(nb0)) * Cos(angle(nb0)) - (yy(7)/yf.f - yy(nb0)) * Sin(angle(nb0)) +xx(nb0)-xx(7)
yyy(7)=yyy(6)+(xx(7)/xf.f - xx(nb0)) * Sin(angle(nb0)) + (yy(7)/yf.f - yy(nb0)) * Cos(angle(nb0)) +yy(nb0)-yy(7)
nb0=7
xxx(8)=xxx(7)+(xx(8)/xf.f - xx(nb0)) * Cos(angle(nb0)) - (yy(8)/yf.f - yy(nb0)) * Sin(angle(nb0)) +xx(nb0)-xx(8)
yyy(8)=yyy(7)+(xx(8)/xf.f - xx(nb0)) * Sin(angle(nb0)) + (yy(8)/yf.f - yy(nb0)) * Cos(angle(nb0)) +yy(nb0)-yy(8)
;=============================
nb0=1
nb2=0
ii=0
While poly_my2(nb2)>0
ii=poly_my2(nb2)
alpha2.f=poly_mx2(nb2+4)/32767
; glBegin_(#GL_POLYGON)
If alpha2=1
; glBlendFunc_(#GL_SRC_ALPHA,0)
; glColor4f_(poly_mx2(nb2+1)/32767,poly_mx2(nb2+2)/32767,poly_mx2(nb2+3)/32767,1)
Else
; glBlendFunc_(#GL_SRC_ALPHA,#GL_ONE_MINUS_SRC_ALPHA)
; glColor4f_(poly_mx2(nb2+1)/32767,poly_mx2(nb2+2)/32767,poly_mx2(nb2+3)/32767,alpha2)
EndIf
For i=1 To 4
couleur(i-1,nb0)=poly_mx2(nb2+i)/32767
; Debug couleur(i-1,nb0)
Next
; Debug ("=")
partiey(nb0,0)=poly_my2(nb2)-5
;Debug partiey(nb0,13)
For i=1 To partiey(nb0,0)
partiex(nb0,i)=(xxx(nb0)+(poly_mx2(nb2+4+i)/xf.f - xx(nb0)) * Cos(angle(nb0)) - (poly_my2(nb2+4+i)/yf.f - yy(nb0)) * Sin(angle(nb0)) +xx(nb0))/5
partiey(nb0,i)=(yyy(nb0)+(poly_mx2(nb2+4+i)/xf.f - xx(nb0)) * Sin(angle(nb0)) + (poly_my2(nb2+4+i)/yf.f - yy(nb0)) * Cos(angle(nb0)) +yy(nb0))/5
Next
nb2+ii
saut(nb0)=nb2
nb0+1
Wend;;;;;;;;;;;;;;;;;;;;;
;#######################################################################
;#######################################################################
;#######################################################################
;#######################################################################
;#######################################################################
;#######################################################################
;#######################################################################
;#######################################################################
;#######################################################################
;#######################################################################
;Repeat ; Until xmouse<>xmouse2 Or ymouse<>ymouse2 Or KeyboardPushed(#PB_Key_All)
;*****
Repeat
Event = WindowEvent()
Select Event
Case #PB_Event_Gadget
Select EventGadget()
Case 1
Resx = GetGadgetAttribute(1, #PB_OpenGL_MouseX)
Resy = GetGadgetAttribute(1, #PB_OpenGL_MouseY)
;;;;;;;
Select EventType()
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
EndSelect
EndSelect
Case #PB_Event_Menu
Select EventMenu()
Case 666
timer=ElapsedMilliseconds()-timer
;MessageRequester("Timer", Str(timer)+" ms - "+Str(scene)+" frames",2)
; Debug scene
; Debug timer
End
EndSelect
EndSelect
Until Event = 0
;##############################################
;##############################################
;############Le professeur en polygones :################
For u=1 To 15
glBegin_(#GL_POLYGON)
If couleur(3,u)=1
glBlendFunc_(#GL_SRC_ALPHA,0)
glColor4f_(couleur(0,u),couleur(1,u),couleur(2,u),1)
Else
glBlendFunc_(#GL_SRC_ALPHA,#GL_ONE_MINUS_SRC_ALPHA)
glColor4f_(couleur(0,u),couleur(1,u),couleur(2,u),couleur(3,u))
EndIf
For i=1 To partiey(u,0)
glVertex2f_(depx+partiex(u,i)*sens,depy+partiey(u,i))
Next
glEnd_()
Next
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
SetGadgetAttribute(#OpenGLGadget, #PB_OpenGL_FlipBuffers, #True)
scene+1
If depx>ddw+140
dep*-1
depx+dep
sens=-1
EndIf
If depx<-150
dep*-1
depx+dep
sens=1
EndIf
ForEver
Procedure Render()
;Clearing buffers and resetting clear color to remove old graphics from the last frame.
glClear_(#GL_COLOR_BUFFER_BIT | #GL_DEPTH_BUFFER_BIT)
; glClearColor_(0.2, 0.2, 0.2, 1.0)
glClearColor_(0,0,0,1)
;## DRAWING TEXTURES/IMAGES
;First enable the Texture system.
glEnable_(#GL_TEXTURE_2D)
;This procedure will create a quad and apply a texture to it.
;The Texture variable contains the texture created earlier using SetupGLTexture().
Render2DQuad(Texture1, 0, 0, ImageWidth(Image1), ImageHeight(Image1), -2)
; Render2DQuad(Texture2, 0, 0, ImageWidth(Image2), ImageHeight(Image2), -1)
;After all the textures have been displayed disable the texture system.
;Otherwise it will conflict with the non texture graphics.
glDisable_(#GL_TEXTURE_2D)
EndProcedure
Procedure Render2DQuad(OGLTexture.i, StartX.d, StartY.d, Width.i, Height.i, Z.d)
;The texture is first bound which tells OpenGL to use this texture for any future rendering.
glBindTexture_(#GL_TEXTURE_2D, OGLTexture)
glBegin_(#GL_QUADS)
glColor4f_ (1,1,1,1)
glNormal3f_ (0,0,1.0)
glTexCoord2f_(1.0,1.0)
glVertex3f_ (StartX+Width,StartY,Z)
glTexCoord2f_(0.0,1.0)
glVertex3f_ (StartX,StartY,Z)
glTexCoord2f_(0.0,0.0)
glVertex3f_ (StartX,StartY+Height,Z)
glTexCoord2f_(1.0,0.0)
glVertex3f_ (StartX+Width,StartY+Height,Z)
glEnd_()
EndProcedure
Procedure SetupOpenGL()
glMatrixMode_(#GL_PROJECTION)
glOrtho_(0.0, WindowDim\X, WindowDim\Y, 0.0, -1000.0, 1000.0)
glMatrixMode_(#GL_MODELVIEW)
; glEnable_(#GL_DEPTH_TEST)
glEnable_(#GL_BLEND)
glBlendFunc_(#GL_SRC_ALPHA, #GL_ONE_MINUS_SRC_ALPHA)
EndProcedure
DataSection
Data.w 15, 10, 24158, 0, 15934, 0, 14392, 0, 32767, 0, 127, 281, 178, 280, 187, 357, 179, 469, 133, 469, 0, 13, 24158, 0, 15934, 0, 14392, 0, 32767, 0, 132, 468, 145, 588, 151, 603, 190, 602, 198, 570, 181, 540, 178, 454, 149, 445, 0, 10, 12978, 0, 10794, 0, 11565, 0, 32767, 0, 98, 451, 127, 679, 141, 720
Data.w 230, 716, 223, 446, 0, 10, 12978, 0, 10794, 0, 11565, 0, 32767, 0, 147, 700, 125, 760, 144, 1002, 228, 999, 229, 699, 0, 11, 22230, 0, 18632, 0, 17604, 0, 32767, 0, 140, 986, 123, 1033, 122, 1054, 308, 1054, 303, 1044, 225, 987, 0, 10, 9509, 0, 9509, 0, 9509, 0, 32767, 0, 98, 451, 127, 679, 141, 720
Data.w 230, 716, 223, 446, 0, 10, 9509, 0, 9509, 0, 9509, 0, 32767, 0, 147, 700, 125, 760, 144, 1002, 228, 999, 229, 699, 0, 11, 22230, 0, 18632, 0, 17604, 0, 32767, 0, 140, 986, 123, 1033, 122, 1054, 308, 1054, 303, 1044, 225, 987, 0, 9, 14392, 0, 12079, 0, 12978, 0, 32767, 0, 147, 142, 142, 212, 197, 210
Data.w 200, 148, 0, 17, 21331, 0, 8352, 0, 257, 0, 32767, 0, 208, 52, 254, 90, 245, 56, 211, 36, 158, 37, 125, 66, 119, 100, 145, 166, 182, 151, 201, 107, 215, 97, 238, 75, 0, 12, 14777, 0, 4240, 0, 0, 0, 32767, 0, 167, 120, 165, 94, 133, 58, 121, 79, 117, 103, 147, 166, 183, 159, 0, 17, 25314, 0, 17219, 0
Data.w 15034, 0, 32767, 0, 211, 112, 212, 84, 228, 73, 243, 74, 248, 93, 252, 119, 239, 141, 221, 170, 194, 180, 174, 171, 195, 114, 217, 91, 0, 13, 4112, 0, 4369, 0, 8224, 0, 32767, 0, 229, 480, 78, 482, 97, 332, 95, 242, 122, 208, 147, 191, 207, 194, 235, 256, 13, 10, 24158, 0, 15934, 0, 14392, 0, 32767, 0
Data.w 127, 281, 178, 280, 187, 357, 179, 469, 133, 469, 0, 13, 24158, 0, 15934, 0, 14392, 0, 32767, 0, 132, 468, 145, 588, 151, 603, 190, 602, 198, 570, 181, 540, 178, 454, 149, 445, 0, 0
Data.w 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
EndDataSection