Try making a crescent moon for example!
(example : http://xmas.free.fr/lune.bmp )
What instruction should I add to correct this bug?
Thanks
Code: Select all
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
win=OpenWindow(0, 0, 0,1920,1080, "Polygons_Maker",#PB_Window_Maximize|#PB_Window_BorderLess)
If win=0
Beep_(500,250) : Delay(150) : Beep_(500,250)
Debug ("OpenWindow() impossible")
End
EndIf
screenGL=OpenGLGadget(1,0,0,1920,1080)
If screenGL=0
Beep_(500,250) : Delay(150) : Beep_(500,250)
Debug ("OpenGLGadget() impossible")
End
EndIf
screenW=GadgetWidth(1)
screenH=GadgetHeight(1)
;SetupGL(screenW, screenH)
;;;;;;;;;;;;;;;;;;
glOrtho_(0,1920,1080,0,-1,1)
glMatrixMode_(#GL_MODELVIEW)
glLoadIdentity_()
glClear_(0)
; timer=ElapsedMilliseconds()
; timer=ElapsedMilliseconds()-timer
AddKeyboardShortcut(0, #PB_Shortcut_Escape, 666)
AddKeyboardShortcut(0, #PB_Shortcut_H, 8) ; hide/show
AddKeyboardShortcut(0, #PB_Shortcut_Add, 100) ; alpha+0.01
AddKeyboardShortcut(0, #PB_Shortcut_Subtract, 101) ; alpha-0.01
AddKeyboardShortcut(0, #PB_Shortcut_Multiply, 102) ; alpha=0.5
AddKeyboardShortcut(0, #PB_Shortcut_Divide, 103) ; NO alpha
AddKeyboardShortcut(0, #PB_Shortcut_Pad1, 110) ; rouge-0.02
AddKeyboardShortcut(0, #PB_Shortcut_Pad2, 111) ; rouge+0.02
AddKeyboardShortcut(0, #PB_Shortcut_Pad4, 112) ; vert-0.02
AddKeyboardShortcut(0, #PB_Shortcut_Pad5, 113) ; vert+0.02
AddKeyboardShortcut(0, #PB_Shortcut_Pad7, 114) ; bleu-0.02
AddKeyboardShortcut(0, #PB_Shortcut_Pad8, 115) ; bleu+0.02
AddKeyboardShortcut(0, #PB_Shortcut_Pad3, 116) ; rouge=0.5
AddKeyboardShortcut(0, #PB_Shortcut_Pad6, 117) ; vert=0.5
AddKeyboardShortcut(0, #PB_Shortcut_Pad9, 118) ; bleu=0.5
hide=0
alpha.f=0.5
rouge.f=0.5
vert.f=0.5
bleu.f=0.5
no_alpha=0
Dim poly_x(1000)
Dim poly_y(1000)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Repeat
glClear_ (#GL_COLOR_BUFFER_BIT | #GL_DEPTH_BUFFER_BIT)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;- polygone non alpha
glBegin_(#GL_POLYGON)
glColor4f_(1,1,1,1)
glVertex2f_(22,11)
glVertex2f_(500,66)
glVertex2f_(33,755)
glEnd_()
;- polygone alpha
glEnable_(#GL_BLEND)
glBlendFunc_(#GL_SRC_ALPHA,#GL_ONE_MINUS_SRC_ALPHA)
glBegin_(#GL_POLYGON)
glColor4f_(0,1,1,0.5)
;glColor4f_(1,1,1,1)
glVertex2f_(400,600)
glVertex2f_(200,600)
glVertex2f_(300,100)
glEnd_()
;;;;;;;;;;;;;;;;;;;
Event = WaitWindowEvent()
Select Event
Case #PB_Event_Gadget
Select EventGadget()
Case 1
Resx = GetGadgetAttribute(1, #PB_OpenGL_MouseX)
Resy = GetGadgetAttribute(1, #PB_OpenGL_MouseY)
;;;;;;;
Select EventType()
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Case #PB_EventType_LeftClick
Beep_(1500,55) ;Debug "Clic avec le bouton gauche de la souris"
poly_x(0)+1
poly_x(poly_x(0))=Resx
poly_y(poly_x(0))=Resy
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Case #PB_EventType_RightDoubleClick
If poly_x(0)>0
Beep_(500,400) ;: Debug "Double-clic avec le bouton droit de la souris"
Dim poly_x(1000)
Dim poly_y(1000)
EndIf
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Case #PB_EventType_RightClick
If poly_x(0)>0
Beep_(500,55) ;Debug "Clic avec le bouton droit de la souris"
poly_x(0)-1
EndIf
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Case #PB_EventType_MiddleButtonDown
If poly_x(0)>2
Beep_(3000,55) : Delay(150) : Beep_(3000,55) ;Debug "Clic avec le bouton centre de la souris"
EndIf
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
EndSelect
EndSelect
Case #PB_Event_Menu
Select EventMenu()
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Case 666
End
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Case 8
hide+1 : hide%2
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Case 100
alpha+0.01
If alpha>1
alpha=1
EndIf
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Case 101
alpha-0.01
If alpha<0
alpha=0
EndIf
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Case 102
alpha=0.5
no_alpha=0
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Case 103
no_alpha+1 : no_alpha%2
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Case 110
rouge-0.02
If rouge<0
rouge=0
EndIf
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Case 111
rouge+0.02
If rouge>1
rouge=1
EndIf
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Case 112
vert-0.02
If vert<0
vert=0
EndIf
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Case 113
vert+0.02
If vert>1
vert=1
EndIf
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Case 114
bleu-0.02
If bleu<0
bleu=0
EndIf
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Case 115
bleu+0.02
If bleu>1
bleu=1
EndIf
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Case 116
rouge=0.5
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Case 117
vert=0.5
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Case 118
bleu=0.5
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
EndSelect
EndSelect
;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;
If poly_x(0)>1; And 0=1
glBegin_(#GL_POLYGON)
If no_alpha=1
glColor4f_(rouge,vert,bleu,1)
Else
glColor4f_(rouge,vert,bleu,alpha)
EndIf
For i=1 To poly_x(0)
glVertex2f_(poly_x(i),poly_y(i))
Next
If hide=0
glVertex2f_(Resx,Resy) ;: Debug Resx : Debug Resy : Debug "----------"
EndIf
glEnd_()
EndIf
SetGadgetAttribute(1,#PB_OpenGL_FlipBuffers,#True)
ForEver
;SPH : 38ms
;Falsam : 695ms
Example concave polygons :
Code: Select all
InitSprite()
InitMouse()
InitKeyboard()
ExamineDesktops()
ddw=DesktopWidth(0)
ddh=DesktopHeight(0)
OpenScreen(ddw,ddh,32,"Test polygones")
;Global Dim pp.w(8290,2500)
;Global dw.w,dh.w,SPH_Z,SPH_NOMBRE
Dim points.Point(5)
points(0)\x=550
points(0)\y=200
points(1)\x=0
points(1)\y=820
points(2)\x=1000
points(2)\y=500
points(3)\x=1900
points(3)\y=850
points(4)\x=100
points(4)\y=1000
points(5)\x=1500
points(5)\y=400
hdc=StartDrawing(ScreenOutput())
DrawingMode(#PB_2DDrawing_Default)
If hdc
Box(0,0,0,0,RGB(255,255,2))
Polygon_(hdc,points(),5)
EndIf
StopDrawing()
FlipBuffers()
Delay(2000)