рдкрд░рд┐рдЪрдп
рдПрдХ рд░рд╛рдп рд╣реИ рдХрд┐ рд╣рд╛рд╕реНрдХреЗрд▓ рдирд░реНрдбреНрд╕-рдЧрдгрд┐рддрдЬреНрдЮреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рднрд╛рд╖рд╛ рд╣реИред рдмреЗрд╢рдХ, рдпреЗ рд╕рднреА рд╕реНрдЯреАрд░рд┐рдпреЛрдЯрд╛рдЗрдк рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕ рдкрд░ рдмрд╣реБрдд рдХрдо рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рд╣реИрдВ, рдЬреЛ рдЕрдзреНрдпрдпрди рдореЗрдВ рдХреБрдЫ рд╣рдж рддрдХ рдмрд╛рдзрд╛ рдбрд╛рд▓рддреЗ рд╣реИрдВред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдХреБрдЫ рдРрд╕реЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд▓рд┐рдЦреЗ рдЧрдП рд╣реИрдВ (рдЙрд▓реНрд▓реЗрдЦрдиреАрдп
рд░рд┐рдпрд▓ рд╡рд░реНрд▓реНрдб рд╣рд╛рд╕реНрдХреЗрд▓ рдпрд╣рд╛рдВ рдЦрдбрд╝рд╛ рд╣реИ, рдЬреЛ рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХреБрдЫ рдЧрдбрд╝рдмрдбрд╝ рд╣реИ)ред рдЗрд╕рд▓рд┐рдП, рд╣рд╛рд╕реНрдХреЗрд▓ - рдбреНрд░рд╛рдЗрдВрдЧ рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдореЗрдВ рдХрдо рд╕реЗ рдХрдо рдкреНрд░рдмреБрджреНрдз рдХреНрд╖реЗрддреНрд░реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЗрд╕ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рдЪрд╛рд░ рдЖрдпрд╛ред рдореИрдВ рдЗрд╕реЗ рд╡рд┐рд╕реНрддреГрдд рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдкрд╛рдардХ рд╣рд╛рд╕реНрдХреЗрд▓ рдХреА рдореВрд▓ рдмрд╛рддреЗрдВ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реИ, рд╡рд┐рд╢реЗрд╖рдХрд░ рднрд┐рдХреНрд╖реБрдУрдВ рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЗ рд╕рд╛рдеред рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рдореИрдВ
рдЗрд╕ рд╡рд┐рд╖рдп рдХреЛ рдкрдврд╝рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛
рд╣реВрдВ , рд╕рд╛рде рд╣реА рдЙрди рдкреБрд╕реНрддрдХреЛрдВ рдХреЛ
рднреА рджреЗрддрд╛
рд╣реВрдВ рдЬреЛ
рд╕реНрдХрд┐рдорд┐рдиреЛрдХ рдЗрд╕ рдкрд░ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реИред
рдбрд┐рд╕реНрдХреНрд▓реЗрдорд░: рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕рд▓рд┐рдП рд╣рд░ рддрд░рд╣ рдХреА рдЧрдбрд╝рдмрдбрд╝рд┐рдпреЛрдВ рдкрд░ рдЖрд╢реНрдЪрд░реНрдп рди рдХрд░реЗрдВ, рддрд╛рдХрд┐ рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░реЗред
рдХреНрдпрд╛ рд╣рдо?
рд╕реНрдерд╛рдкрдирд╛
рдореЗрд░реА рд╡рд┐рдирдореНрд░ рд░рд╛рдп рдореЗрдВ, рдпрд╣ рдмрд╣реБрдд рд╣реА рдирд┐рд░рд░реНрдердХ рд╣реИред рдЦрд╛рд╕рдХрд░ рдореЗрд░реЗ рдЬреИрд╕реЗ рдиреЙрди-рд╕рд┐рд╕реНрдЯрдо рдЗрдВрдЬреАрдирд┐рдпрд░реЛрдВ рдХреЗ рд▓рд┐рдПред
рд▓рд┐рдирдХреНрд╕ (рдЙрдмрдВрдЯреВ 10.10)
рдореБрдЭреЗ рдкрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдУрдкрдирдЬреАрдПрд▓ рдХреЗ рдХреМрди рд╕реЗ рд╕рдВрд╕реНрдХрд░рдг рдореВрд▓ рд░реВрдк рд╕реЗ рд╢рд┐рдк рдХрд┐рдП рдЧрдП рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ
рдпрд╣рд╛рдВ рд╕реЗ рдЬреАрдПрдЪрд╕реА рдФрд░ рд╣рд╛рд╕реНрдХреЗрд▓ рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдо
рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдФрд░ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛
рд╣реИ ред рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, рдореБрдЭреЗ рдХреБрдЫ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдирд╛ рдкрдбрд╝рд╛ (рдореБрдЭреЗ рдареАрдХ-рдареАрдХ рдпрд╛рдж рд╣реИ, рдореБрдЭреЗ freeglut3-dev рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА)ред рд╣рдо рдПрдХ рдкрд░реАрдХреНрд╖рдг рдХреЗ рдорд╛рдорд▓реЗ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ - рдПрдХ рдмрдорд░ред рд╡рд┐рдВрдбреЛ рдХреЛ рджреВрд╕рд░реЗ рд╡рд┐рднрд╛рдЬрди рдХреЗ рд▓рд┐рдП рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЫреЛрдЯрд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдореИрдВ рдиреЙрдЯрд┐рд▓рд╕ рд╕реЗ рд▓реЙрдиреНрдЪ рдХрд░рддрд╛ рд╣реВрдВ - рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред Irc- рдЪреИрдирд▓ рдкрд░, рдХреЛрдИ рднреА рдЗрд╕ рд╕рд╡рд╛рд▓ рдХрд╛ рдЬрд╡рд╛рдм рдирд╣реАрдВ рджреЗрдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ :) рдЕрдЧрд░ рдХреЛрдИ рднреА рдХрд╛рд░рдг рдмрддрд╛ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рдХреГрдкрдпрд╛ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рдкреВрдЫреЗрдВред
рд╡рд┐рдВрдбреЛрдЬ 7 (x86_64)
рдкрд░рдВрдкрд░рд╛рдЧрдд рд░реВрдк рд╕реЗ рдЕрдзрд┐рдХ рдЙрдкрджреНрд░рд╡ред
рдЗрд╕ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдиреЗ рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рдореЗрдВ рдмрд╣реБрдд рдорджрдж рдХреАред
1. рд╣рдо
рдорд┐рдирдЧреНрд╡ рдбрд╛рд▓рддреЗ рд╣реИрдВред рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рддреЗ рд╕рдордп, рдиреНрдпреВрдирддрдо рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рдХрд╛ рдЪрдпрди рдХрд░реЗрдВред рдореБрдЦреНрдп рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ MinGW рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рд╣реИред
2. рд╣рдо
MSys рдбрд╛рд▓рддреЗ рд╣реИрдВ ред рд╣рдо рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╣рдордд рд╣реИрдВ, рдЬрд╡рд╛рдм рджреЗрдВ рдХрд┐ рдорд┐рдирдЧреЙрд╡ рд╕реНрдерд╛рдкрд┐рдд рд╣реИ, рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдкрде рдЗрдВрдЧрд┐рдд рдХрд░реЗрдВред рд╣рдо msys рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рд╣рдо рдХрдВрд╕реЛрд▓ рдореЗрдВ рд▓рд┐рдЦрддреЗ рд╣реИрдВ "gcc --version" рдФрд░ рд╣рдо рдЖрд╢реНрд╡рд╕реНрдд рд╣реИрдВ рдХрд┐ рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
3.
рдпрд╣рд╛рдВ рд╕реЗ рдлреНрд░реАрдЧреНрд▓реВрдЯ рдбрд╛рдЙрдирд▓реЛрдб
рдХрд░реЗрдВ , рдЗрд╕реЗ
__MinGW/1.0/home/_
(
__MinGW/1.0/home/_
-
__MinGW/1.0/home/_
рдореЗрдВ рдЕрдирдкреИрдХ
рдХрд░реЗрдВ ред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рдЖрдкрдХреЗ рд╡рд┐рдВрдбреЛрдЬ рдЦрд╛рддреЗ рдХрд╛ рдирд╛рдо рд╣реИред Msys рдХреЛ рдЪрд▓рд╛рдиреЗ рдФрд░ рд▓рд┐рдЦрдиреЗ рдХреЗ рдмрд╛рдж:
cd freeglut-2.4.0/src/ gcc -O2 -c -DFREEGLUT_EXPORTS *.c -I../include gcc -shared -o glut32.dll *.o -Wl,--enable-stdcall-fixup,--out-implib,libglut32.a -lopengl32 -lglu32 -lgdi32 -lwinm
рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ, рдпрджрд┐ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХрд╛ рдирд╛рдо рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╣реИ, рддреЛ рдЙрд╕реЗ рдХрдорд╛рдВрдб рдореЗрдВ рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛ :)
рдЖрдЙрдЯрдкреБрдЯ рджреЛ рдлрд╛рдЗрд▓реЗрдВ рд╣реИрдВ - glut32.dll рдФрд░ libglut32.aред Dll рдХреЛ
_/Windows/System
рдХреЙрдкреА рдХрд░реЗрдВред рдпрджрд┐ рдЖрдкрдиреЗ рдорд╛рдирдХ рд╣рд╛рд╕реНрдХреЗрд▓-рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рд╡рд╣ рд╕рдм рд╣реИ (рдФрд░ libglut32.a рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрдЧреА)ред рдпрджрд┐ рдЖрдкрдХреЗ рд▓рд┐рдП рд╕рдм рдХреБрдЫ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЬреАрдПрдЪрд╕реА рдХреЛ рдЕрд▓рдЧ рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛), рддреЛ рдореИрдВ рдЙрд╕реА
рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХрд╛ рд╕рдВрджрд░реНрдн рджреЗрддрд╛ рд╣реВрдВ рддрд╛рдХрд┐ рд╡рд┐рд╖рдп рдХреЛ рди рдмрдврд╝рд╛рдпрд╛ рдЬрд╛рдПред
рдорд╣рддреНрд╡рдкреВрд░реНрдг: рдпрд╛ рдЖрдк рдмрд╕ рдХрд╛рдмрд╛рд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд╕рддреНрдпрд╛рдкрди рдХреЗ рд▓рд┐рдП рдЖрдк
рдЗрд╕ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЖрдк рдПрдХ рдЫрд╛рдпрд╛рдВрдХрд┐рдд рдХреНрд╖реЗрддреНрд░ рджреЗрдЦреЗрдВрдЧреЗред
рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдХрд╛рдо
рд╣рд╛рд╕реНрдХреЗрд▓ рдФрд░ рдУрдкрдирдЬреАрдПрд▓ рдмрд╣реБрдд рд╕рд╛рдордВрдЬрд╕реНрдпрдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд▓рдЧрднрдЧ рд╕рднреА рдХреНрд░рд┐рдпрд╛рдПрдВ рдореЛрдирд╛рдбреНрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХреА рдЬрд╛рддреА рд╣реИрдВред рдЪрд░ рдХреЗ рдПрдирд╛рд▓реЙрдЧреНрд╕ рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдСрдкрд░реЗрдЯрд░
$ = рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рдореВрд▓реНрдп рд╕реМрдВрдкрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЖрдЗрдП рдПрдХ рдЖрджрд┐рдо рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рд▓рд┐рдЦрдиреЗ рдФрд░ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ рдЬреЛ рдПрдХ рд▓рд╛рд▓ рдкреГрд╖реНрдарднреВрдорд┐ рдХреЗ рд╕рд╛рде рдПрдХ рдЦрд┐рдбрд╝рдХреА рдмрдирд╛рддрд╛ рд╣реИред
рдиреЛрдЯ: рд▓рд┐рдирдХреНрд╕ рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рд░рди рдХреЗ рддрд╣рдд рд╕рдВрдХрд▓рди, рд▓рд┐рдирдХреНрд╕ рдХреЗ рддрд╣рдд рдХрдорд╛рдВрдб
ghc -package GLUT -lglut Program.hs -o Program
import Graphics.UI.GLUT import Graphics.Rendering.OpenGL main = do getArgsAndInitialize createAWindow "Red Window" mainLoop createAWindow windowName = do createWindow windowName displayCallback $= display display = do clearColor $= Color4 1 0 0 1 clear [ColorBuffer] flush
рдЗрд╕рд▓рд┐рдП, рд╣рдо рдПрдХ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд░рдВрдЧ рдХреЗ рд╕рд╛рде рд╕реНрдХреНрд░реАрди рдХреЛ рд╕рд╛рдл рдХрд░рддреЗ рд╣реИрдВред рдпрджрд┐ рдЦрд┐рдбрд╝рдХреА рд╕рд╛рдл рдирд╣реАрдВ рдХреА рдЬрд╛рддреА рд╣реИ, рддреЛ рдХрд╛рдо рдХреЗ рдорд╛рд╣реМрд▓ рдХрд╛ рдПрдХ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдЗрд╕рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛ред рдпрд╣ Color4 рдкреНрд░рдХрд╛рд░ рдХреЛ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ - рдпрд╣ рдЖрд░рдЬреАрдмреАрдП рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд░рдВрдЧ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ, 0 рд╕реЗ 1 рддрдХ GLFloat (рдЬреЛ рдХрд┐ рд╕рдмрд╕реЗ рд╕рд╛рдзрд╛рд░рдг 32-рдмрд┐рдЯ рдлреНрд▓реЛрдЯ рд╣реИ) рдкреНрд░рддреНрдпреЗрдХ рд░рдВрдЧ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред рдореМрди рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╣рдореЗрд╢рд╛
рдлреНрд▓рд╢ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛрддреА рд╣реИред рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреА рдкреВрд░реА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдХрд╛рд░реНрдб рдкрд░ рднреЗрдЬреА рдЬрд╛рдПред рдкрд░рд┐рдгрд╛рдо:
рдпрд╣ рдЦрд┐рдбрд╝рдХреА рдореЗрдВ рдХреБрдЫ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИред рдпрд╣
рд░реЗрдВрдбрд░рдкреНрд░рд┐рдореЗрдЯрд┐рдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ 2 рддрд░реНрдХ рд╣реЛрддреЗ рд╣реИрдВ: рдЖрджрд┐рдо рдХрд╛ рдкреНрд░рдХрд╛рд░ рдФрд░ рдХреЛрдиреЗ рдХрд╛ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХред 3 рдбреА рдЕрдВрддрд░рд┐рдХреНрд╖ рдореЗрдВ рдХрд╛рд░реНрдпрдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ
vertex (Vertex3 xyz)
рдпрд╛
vertex$Vertex3 xyz
OpenGL рдПрдХ рдХрд╛рд░реНрдЯреЗрд╢рд┐рдпрди рд╕рдордиреНрд╡рдп рдкреНрд░рдгрд╛рд▓реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ:
рдЖрдЗрдП рдПрдХ рдХрд╛рд▓реЗ рд░рдВрдЧ рдХреА рдкреГрд╖реНрдарднреВрдорд┐ рдкрд░ 3 рдиреАрд▓реЗ рдмрд┐рдВрджреБрдУрдВ рдХреЛ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ:
import Graphics.UI.GLUT import Graphics.Rendering.OpenGL main = do getArgsAndInitialize createAWindow "Points Window" mainLoop createAWindow windowName = do createWindow windowName displayCallback $= display display = do clear [ColorBuffer] currentColor $= Color4 0 0.3 1 1 renderPrimitive Points( do vertex (Vertex3 (0.1::GLfloat) 0.5 0) vertex (Vertex3 (0.1::GLfloat) 0.2 0) vertex (Vertex3 (0.2::GLfloat) 0.1 0)) flush
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд░реЗрдВрдбрд░рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рд╡рд░реНрдзрдорд╛рди рдХреЛ рдореЛрдирд╛рдб рдореЗрдВ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИ - рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рд╢реАрд░реНрд╖ рдЦреАрдВрдЪрдиреЗ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рддрд░реАрдХрд╛ред рдкрд░рд┐рдгрд╛рдо:
рдЪреВрдБрдХрд┐ рд╣рдо рд▓рдВрдмреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рди рдХрд┐ рдмрд┐рдВрджреБрдУрдВ рдХреЗ рд╕рд╛рде, рддреЛ рдпрд╣ рдмрд┐рдВрджреБрдУрдВ рдХреЗ рд╕рднреА рддреНрд░рд┐рднреБрдЬреЛрдВ рдХреЛ рдХреЛрдиреЗ рдореЗрдВ рдмрджрд▓рдирд╛ рддрд╛рд░реНрдХрд┐рдХ рд╣реИ:
map (\(x,y,z)->vertex$Vertex3 xyz)
рдФрд░ рдкрд░рд┐рдгрд╛рдореА рд╕рд╛рдзреБрдУрдВ рдХреЛ
рдЕрдиреБрдХреНрд░рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░реЗрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдПрдХ рдЕрдзрд┐рдХ рд╕реНрд╡рд╛рджрд┐рд╖реНрдЯ рд╕рд┐рдиреНрд╕реЗрдЯрд┐рдХ рдЪреАрдиреА рд╣реИ - mapM_, рдЬрд┐рд╕рдореЗрдВ рдпреЗ рджреЛрдиреЛрдВ рдХрд╛рд░реНрдп рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:
mapM_ (\(x,y,z)->vertex$Vertex3 xyz)
рдореБрдЯреНрдареА рднрд░ рдЪреАрдиреА рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд╣рд╛рдпрдХ рдореЙрдбреНрдпреВрд▓ рдмрдирд╛рдПрдВ:
module PointsRendering where import Graphics.UI.GLUT import Graphics.Rendering.OpenGL import Random renderInWindow displayFunction = do (progName,_) <- getArgsAndInitialize createWindow "Primitive shapes" displayCallback $= displayFunction mainLoop getRand::IO Float getRand = getStdRandom( randomR (0,1)) displayPoints points primitiveShape = do renderAs primitiveShape points flush renderAs figure ps = renderPrimitive figure(makeVertx ps) makeVertx = mapM_ (\(x,y,z)->vertex$Vertex3 xyz) exampleFor primitiveShape = renderInWindow (displayExmplPoints primitiveShape) displayExmplPoints primitiveShape = do clear [ColorBuffer] r <- getRand currentColor $= Color4 0 0.3 r 1 displayPoints myPoints primitiveShape myPoints = [(0.2,-0.4,0::GLfloat) ,(0.46,-0.26,0) ,(0.6,0,0) ,(0.6,0.2,0) ,(0.46,0.46,0) ,(0.2,0.6,0) ,(0.0,0.6,0) ,(-0.26,0.46,0) ,(-0.4,0.2,0) ,(-0.4,0,0) ,(-0.26,-0.26,0) ,(0,-0.4,0) ]
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдкрдиреЗ рджреЗрдЦрд╛, рд╣рдордиреЗ рдЕрдВрдХреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдПрдХ рдлрд╝рдВрдХреНрд╢рди рднреА рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рд╣реИ рдЬреЛ рдЗрди рдмрд┐рдВрджреБрдУрдВ рдкрд░ рджрд┐рдП рдЧрдП рдЖрджрд┐рдо рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред рдЕрдм рдЖрдк рдПрдХ рдкрдВрдХреНрддрд┐ рд╕реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ:
import PointsRendering import Graphics.UI.GLUT import Graphics.Rendering.OpenGL main = exampleFor Polygon
рдкрд░рд┐рдгрд╛рдо:
рдмрд╣реБрднреБрдЬ рдХреЗ рдмрдЬрд╛рдп, рдЖрдк ADT PrimitiveMode рд╕реЗ рдХрд┐рд╕реА рдЕрдиреНрдп рдорд╛рди рдХреЛ рд╕реНрдерд╛рдирд╛рдкрдиреНрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
data PrimitiveMode = Points | Lines | LineLoop | LineStrip | Triangles | TriangleStrip | TriangleFan | Quads | QuadStrip | Polygon deriving ( Eq, Ord, Show )
рдПрдХ рдирд┐рд╖реНрдХрд░реНрд╖ рдХреЗ рдмрдЬрд╛рдп
рдпрд╣ рд▓реЗрдЦ HOpenGL рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдорд╛рдирдЪрд┐рддреНрд░рдг рдХреА рдореВрд▓ рдмрд╛рддреЗрдВ рдкрд░ рдореБрд╢реНрдХрд┐рд▓ рд╕реЗ рдЫреБрдЖ рд╣реИред рдкрд░реНрджреЗ рдХреЗ рдкреАрдЫреЗ рдЕрдиреНрдп рдЖрджрд┐рдо (рдЬреИрд╕реЗ рдПрдХ рд╕рд░реНрдХрд▓), рдкрд░рд┐рд╡рд░реНрддрди, 3 рдбреА, рдФрд░ рдмрд╣реБрдд рдХреБрдЫ рдереЗред рдпрджрд┐ рд╕рдореБрджрд╛рдп рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реИ, рддреЛ рдореИрдВ рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдХреБрдЫ рдФрд░ рд▓реЗрдЦ рд▓рд┐рдЦ рд╕рдХрддрд╛ рд╣реВрдВред
рд╕реВрддреНрд░реЛрдВ рдХрд╛ рдХрд╣рдирд╛ рд╣реИ