ΠΠ°ΠΊ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΡ opengl ΠΊ ΠΏΡΠΎΠ΅ΠΊΡΡ
ΠΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ OpenGL Π² Visual Studio 2010
ΠΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ OpenGL Π½Π° Visual Studio 2010

ΠΠ΅ΡΠ²ΡΠΌ Π΄Π΅Π»ΠΎΠΌ ΡΠΊΠ°ΡΠΈΠ²Π°Π΅ΠΌ GLUT(The OpenGL Utility Toolkit) c ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠ°ΠΉΡΠ°:
http://www.opengl.org/resources/libraries/glut/
ΠΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΡΠΈΡΠ°ΡΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ ΠΏΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ΅ Π½Π° Π°Π½Π³Π»ΠΈΠΉΡΠΊΠΎΠΌ:
http://www.cs.csustan.edu/
rsc/SDSU/GLUTinstall.html
ΠΠ΅ΠΌΠ½ΠΎΠ³ΠΎ Π½ΠΈΠΆΠ΅ Π½Π° ΡΡΠΎΠΉ ΡΡΡΠ°Π½ΠΈΡΠ΅ Π² Other GLUT Information/Downloads Π²ΡΠ±Π΅ΡΠΈΡΠ΅:
Pre-compiled Win32 for Intel GLUT 3.7 DLLs for Windows 95 & NT
ΠΈΠ»ΠΈ ΡΠΊΠ°ΡΠ°ΠΉΡΠ΅ ΡΡΠ°Π·Ρ:
http://www.opengl.org/resources/libraries/glut/glutdlls37beta.zip
ΠΠΎΡΠ»Π΅ ΡΠΊΠ°ΡΠΈΠ²Π°Π½ΠΈΡ ΠΎΡΠΊΡΠΎΠΉΡΠ΅ Π°ΡΡ ΠΈΠ² ΠΈ ΠΈΠ·Π²Π»Π΅ΠΊΠΈΡΠ΅ ΡΠ°ΠΉΠ»Ρ.Π ΠΏΠ°ΠΏΠΊΠ΅ Π±ΡΠ΄Π΅Ρ 5 ΡΠ°ΠΉΠ»ΠΎΠ²:
Π€Π°ΠΉΠ»Ρ glut.dll ΠΈ glut32.dll Π½ΡΠΆΠ½ΠΎ ΡΠΊΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ Π² Π²Π°ΡΡ WINDOWS Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ Π² ΠΏΠ°ΠΏΠΊΡ System32,Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ Ρ ΠΌΠ΅Π½Ρ ΡΠ°ΠΊΠΎΠΉ ΠΏΡΡΡ:C:\Windows\System32
ΠΈΠ»ΠΈ Π² C:\Windows\SysWOW64 Π΅ΡΠ»ΠΈ 64-Π±ΠΈΡΠ½Π°Ρ Windows!
ΠΠ°Π»Π΅Π΅ ΡΠΊΠΎΠΏΠΈΡΡΠΉΡΠ΅ Π²Π°Ρ glut.h Π² ΠΏΠ°ΠΏΠΊΡ Ρ Π²Π°ΡΠ΅ΠΉ Visual Studio ΠΏΠΎ ΠΏΡΡΠΈ:
\Visual_Studio\VC\include
ΠΠ°ΡΠ΅ΠΌ ΠΎΡΡΠ°Π²ΡΠΈΠ΅ΡΡ ΡΠ°ΠΉΠ»Ρ glut.lib ΠΈ glut32.lib ΡΠΊΠΎΠΏΠΈΡΡΠΉΡΠ΅ Π² ΠΏΠ°ΠΏΠΊΡ \Visual_Studio\VC\lib
ΠΠ°Π»Π΅Π΅ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΠΌ ΡΠ°ΠΌ Visual Studio 2010 ΡΠΎΠ·Π΄Π°Π΅ΠΌ ΠΊΠΎΠ½ΡΠΎΠ»ΡΠ½ΡΠΉ ΠΏΡΠΎΠ΅ΠΊΡ ΠΈΠ»ΠΈ ΠΎΡΠΊΡΡΠ²Π°Π΅ΠΌ Π³ΠΎΡΠΎΠ²ΡΠΉ.ΠΠ°ΠΆΠΈΠΌΠ°Π΅ΠΌ ΠΏΡΠ°Π²ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ ΠΌΡΡΠΈ Π½Π° ΠΏΡΠΎΠ΅ΠΊΡ,Π²ΠΊΠ»Π°Π΄ΠΊΠ° Properties. 
ΠΠ°Π»Π΅Π΅ Π² Π²ΠΊΠ»Π°Π΄ΠΊΠ΅ Configuration Properties ΠΎΡΠΊΡΡΠ²Π°Π΅ΠΌ Π²ΠΊΠ»Π°Π΄ΠΊΡ Linker Π° Π² Π½Π΅ΠΉ Π²ΠΊΠ»Π°Π΄ΠΊΡ Input. 
Π‘ΠΏΡΠ°Π²Π° Π² ΠΎΠΊΠ½Π΅ Π²ΠΈΠ΄ΠΈΠΌ ΡΡΡΠΎΠΊΡ Additional dependencies.
ΠΠ°ΠΆΠΈΠΌΠ°Π΅ΠΌ Edit. 
ΠΡΡΠ°Π²Π»ΡΠ΅ΠΌ Π² Π²ΡΡΠ΅Π΄ΡΠ΅Π΅ ΠΎΠΊΠ½ΠΎ ΡΡΡΠΎΠΊΡ(ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΠΌ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ):
opengl32.lib glut32.lib glu32.lib 
ΠΠ°ΠΆΠΈΠΌΠ°Π΅ΠΌ «ΠΠ» ΠΈ «ΠΡΠΈΠΌΠ΅Π½ΠΈΡΡ» ΠΈΠ»ΠΈ «Apply» Π² ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΌ ΠΎΠΊΠ½Π΅.
Π’Π΅ΠΏΠ΅ΡΡ Π½Π°ΠΏΠΈΡΠ΅ΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π΄Π»Ρ ΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ ΡΠΈΠ³ΡΡΡ(Π±Π΅Π»ΠΎΠ³ΠΎ ΠΊΠ²Π°Π΄ΡΠ°ΡΠ°)Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ΅Π΄ΡΡΠ² ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ OpenGL. 
ΠΠΎΡ ΠΊΠ°ΠΊ ΠΌΡ ΡΡΠΎ ΡΠ΄Π΅Π»Π°Π΅ΠΌ (ΠΊΠΎΠ΄):
ΠΠ°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌ Windows Π΄Π»Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ OpenGL
ΠΠΎΡΡ ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½ Π½Π° Π½ΠΎΠ²ΠΈΡΠΊΠΎΠ². Π Π½Π΅ΠΌ Π½Π΅ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅ΡΡΡ Π½Π°ΡΡΡΠΎΠΉΠΊΠ° Visual Studio. ΠΠ½ Π½Π°ΡΡΠΈΡ Π²Π°Ρ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°ΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ΅ΠΊΡΡΠΎΠ²ΡΠ΅ ΡΠ΅Π΄Π°ΠΊΡΠΎΡΡ Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ OpenGL ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, Π»ΠΈΠ±ΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΡΡΠΎ ΠΈΠ· ΠΊΠΎΠ½ΡΠΎΠ»ΠΈ Π²ΡΡΡΠ½ΡΡ.
ΠΠ΅Π΄Π°Π²Π½ΠΎ, Π½Π°ΠΊΠΎΠ½Π΅Ρ, Π²ΡΡΠ»ΠΎ 8-Π΅ ΠΈΠ·Π΄Π°Π½ΠΈΠ΅ ΠΊΠ½ΠΈΠ³ΠΈ OpenGL programming guide, ΠΊΠΎΡΠΎΡΡΡ Ρ ΠΆΠ΄Π°Π» ΡΠΆΠ΅ Π±ΠΎΠ»Π΅Π΅ ΡΠ΅ΠΌ 2 Π³ΠΎΠ΄Π°. Π§ΡΡΡ ΡΠ°Π½ΡΡΠ΅ Ρ ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΠ»ΡΡ Ρ Π·Π°ΠΌΠ΅ΡΠ°ΡΠ΅Π»ΡΠ½ΡΠΌ ΡΠ΅ΠΊΡΡΠΎΠ²ΡΠΌ ΡΠ΅Π΄Π°ΠΊΡΠΎΡΠΎΠΌ Sublime Text 2 ΠΈ ΡΠ΅ΡΠΈΠ» Π½Π°ΡΡΡΠΎΠΈΡΡ Π΅Π³ΠΎ Π²ΠΌΠ΅ΡΡΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΡΡΠΆΠ΅Π»ΠΎΠΉ Visual Studio.
ΠΡΠ°ΠΊ, Π΄Π»Ρ Π½Π°ΡΠ°Π»Π° Π½Π°ΠΌ Π½ΡΠΆΠ΅Π½ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ β Ρ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΠ»ΡΡ Π½Π° G++. ΠΠ½ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ°ΡΡΡΡ GCC, Π° Π΅Π³ΠΎ ΠΏΠΎΡΡ ΠΏΠΎΠ΄ Windows Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ MinGW. Π‘ Π½Π΅Π³ΠΎ ΠΈ Π½Π°ΡΠ½Π΅ΠΌ:
MinGW
ΠΠ°ΡΠ°Π΅ΠΌ Ρ ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠ°ΠΉΡΠ° ΠΈΠ½ΡΡΠ°Π»Π»ΡΡΠΎΡ ΠΈ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΠΌ Π΅Π³ΠΎ. ΠΠΎΠΆΠ½ΠΎ Π²ΡΠ±ΡΠ°ΡΡ Π²ΡΠΊΠ°ΡΠΈΠ²Π°Π½ΠΈΠ΅ ΡΠ²Π΅ΠΆΠΈΡ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² ΡΡΠ°Π·Ρ ΠΏΡΠΈ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ΅, Π»ΠΈΠ±ΠΎ ΠΎΠ±Π½ΠΎΠ²ΠΈΡΡ ΠΈΡ Π²ΡΡΡΠ½ΡΡ ΠΏΠΎΠ·ΠΆΠ΅. ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΡ Fortran, Ada ΠΈ ObjC Π½Π°ΠΌ Π½Π΅ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΡΡΡΡ, ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅ ΡΡΠ°Π²ΠΈΡΡ. MSYS Basic System ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ³ΠΎΠ΄ΠΈΡΡΡ, Π΅Π³ΠΎ ΡΡΠ°Π²ΠΈΠΌ. Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°Π΄ΡΠ΅ΡΠ° Ρ ΡΠΊΠ°Π·Π°Π» » C:\MinGW «, Π½ΠΎ Π΅ΡΠ»ΠΈ Π²Π°Ρ ΡΡΠΎ ΡΠΌΡΡΠ°Π΅Ρ β ΠΌΠΎΠΆΠ΅ΡΠ΅ Π²ΡΠ±ΡΠ°ΡΡ Π΄ΡΡΠ³ΠΎΠΉ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, » C:\Program Files\Common Files\MinGW «.
Π’Π΅ΠΏΠ΅ΡΡ, ΠΊΠΎΠ³Π΄Π° Ρ Π½Π°Ρ Π΅ΡΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ, ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡΠΈΡΡΡΠΏΠΈΡΡ ΠΊ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΡ OpenGL Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ.
Freeglut
ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ OpenGL ΡΡΠΎ API, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΎΡΠ½ΠΎΡΠΈΡΡΡ ΠΈΡΠΊΠ»ΡΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΊ Π³ΡΠ°ΡΠΈΠΊΠ΅ β Π² Π½Π΅Π³ΠΎ Π½Π΅ Π²Ρ ΠΎΠ΄ΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΏΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΎΠΊΠΎΠ½ ΠΈΠ»ΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΡΡΡΠΎΠΉΡΡΠ² Π²Π²ΠΎΠ΄Π°. Π’Π΅ΠΌ Π±ΠΎΠ»Π΅Π΅, ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΡΡΠΎΠΉ Π·Π°Π΄Π°ΡΠΈ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ. ΠΠΎ-ΡΡΠΎΠΌΡ Π΅Π΅ Π²ΡΠ½Π΅ΡΠ»ΠΈ Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ ΠΈ Π½Π°Π·Π²Π°Π»ΠΈ GLUT β OpenGL Utility Toolkit. ΠΠ΄Π½Π°ΠΊΠΎ, ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ ΡΠ΅Π»ΠΈΠ· ΡΡΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π±ΡΠ» ΠΎΡΠ΅Π½Ρ Π΄Π°Π²Π½ΠΎ ΠΈ ΡΠ΅ΠΉΡΠ°Ρ Π΅Π΅ ΠΏΠΎΠ΄ΠΌΠ΅Π½ΠΈΠ»Π° freeglut.
ΠΠ°ΡΠ°Π΅ΠΌ Ρ ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠ°ΠΉΡΠ° Π±ΠΈΠ½Π°ΡΠ½ΠΈΠΊΠΈ ΠΏΠΎΠ΄ MinGW. Π Π°ΡΠΏΠ°ΠΊΠΎΠ²ΡΠ²Π°Π΅ΠΌ, freeglut.dll ΠΈΠ· ΠΏΠ°ΠΏΠΊΠΈ bin ΠΊΠΈΠ΄Π°Π΅ΠΌ Π² » C:\Windows\System32 » (Π΄Π»Ρ Ρ 86) ΠΈΠ»ΠΈ » C:\Windows\SysWOW64 » (Π΄Π»Ρ Ρ 64), ΠΈΠ»ΠΈ Π»ΡΠ±ΡΡ Π΄ΡΡΠ³ΡΡ ΠΏΠ°ΠΏΠΊΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠΊΠ°Π·Π°Π½Π° Π² PATH. Π‘ΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΠΏΠ°ΠΏΠΎΠΊ include ΠΈ lib ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ Π»ΠΈΠ±ΠΎ Π² » MinGW\include » ΠΈ » MinGW\lib » (ΡΠ°ΠΊ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΡΠ΅), Π»ΠΈΠ±ΠΎ Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠ΅ ΡΠΎΠ·Π΄Π°Π½ΡΠ΅ ΠΏΠ°ΠΏΠΊΠΈ » MinGW\freeglut\include » ΠΈ » MinGW\freeglut\lib «.
ΠΠ° ΡΡΠΎΠΌ Ρ freeglut Π²ΡΠ΅. ΠΠ»Ρ Π΅Π³ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π½ΡΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ #include
ΠΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ ΡΠ°Π±ΠΎΡΠΎΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΡ
Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΠΉ test.cpp:
Sublime Text 2
ΠΡ ΠΈ Π½Π°ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠΊ, ΠΏΡΠΈΠ²Π΅Π΄Ρ ΠΏΡΠΈΠΌΠ΅Ρ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ Sublime. Π‘ΠΊΠ°ΡΠ°ΡΡ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΡΡΠ΄Π°, Π²Π²ΠΎΠ΄Π½ΡΠ΅ Π²ΠΈΠ΄Π΅ΠΎ-ΡΡΠΎΠΊΠΈ Π½Π° Π°Π½Π³Π»ΠΈΠΉΡΠΊΠΎΠΌ ΡΠ·ΡΠΊΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π³Π»ΡΠ½ΡΡΡ Π·Π΄Π΅ΡΡ.
ΠΠΎΡΠ»Π΅ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΠΎΡΠΊΡΡΠ²Π°Π΅ΠΌ ΡΠ°ΠΉΠ» Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ Π±ΠΈΠ»Π΄Π° Π‘++:
» C:\Users\%Username%\AppData\Roaming\Sublime Text 2\Packages\C++\C++.sublime-build »
Π‘ΠΎΡ
ΡΠ°Π½ΡΠ΅ΠΌ Π΅Π³ΠΎ ΠΊΠΎΠΏΠΈΡ ΠΊΠ°ΠΊ
» C:\Users\%Username%\AppData\Roaming\Sublime Text 2\Packages\User\C++\Π‘++ OpenGL.sublime-build «
Π‘ΡΡΠΎΡΠΊΡ
Π΄ΠΎΠΏΠΎΠ»Π½ΡΠ΅ΠΌ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ΠΌ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ:
ΠΠ»Ρ ΡΠΎΠ³ΠΎ ΡΡΠΎΠ±Ρ Sublime Π½Π΅ ΠΎΡΠΊΠ°Π·ΡΠ²Π°Π»ΡΡ Π²ΡΠ²ΠΎΠ΄ΠΈΡΡ ΠΊΠΈΡΠΈΠ»Π»ΠΈΡΡ Π² ΡΠ²ΠΎΡ ΠΊΠΎΠ½ΡΠΎΠ»Ρ, ΠΏΠΎΡΠ»Π΅
Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ
UPD: ΠΠΎΠ³Π΄Π° Π΄Π΅Π»ΠΎ Π΄ΠΎΡΠ»ΠΎ Π΄ΠΎ ΠΊΠΎΠ΄Π° Ρ gl-ΡΡΠ½ΠΊΡΠΈΡΠΌΠΈ ΠΈΠ· ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΡ Π²Π΅ΡΡΠΈΠΉ, Π²ΡΡΡΠ½ΠΈΠ»ΠΎΡΡ, ΡΡΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡΠ½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° GL/gl.h Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ. Π Π½Π΅ΠΌ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡΡΡ ΡΡΡΠ°ΡΠ΅Π²ΡΠ°Ρ Π²Π΅ΡΡΠΈΡ 1.1, ΠΈ ΡΡΠΎΡ ΡΠ°ΠΉΠ» Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅ ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ΅ΡΡΡ. Π Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊ Π½Π΅ΠΌΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΡ GL/glext.h (ΠΏΠΎΡΠ»Π΅Π΄Π½ΡΡ Π²Π΅ΡΡΠΈΡ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π½Π°Π΄ΠΎ ΡΠΊΠ°ΡΠ°ΡΡ ΠΎΡΡΡΠ΄Π°) ΠΈ GL/wglext.h (ΠΎΡΡΡΠ΄Π°). ΠΠ»Ρ Π»ΠΈΠ½ΡΠΊΡΠ° ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ ΡΠ°ΠΉΠ» Π·Π°ΠΌΠ΅Π½ΡΠ΅ΡΡΡ GL/glxext.h (ΡΡΡΠ»ΠΊΠ°). Π‘ΠΊΠ°ΡΠ°Π½Π½ΡΠΌΠΈ ΡΠ°ΠΉΠ»Π°ΠΌΠΈ Π½ΡΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Π½ΠΈΡΡ ΠΈΡ ΡΡΡΠ°ΡΠ΅Π²ΡΠΈΠ΅ Π²Π΅ΡΡΠΈΠΈ ΠΏΠΎ Π°Π΄ΡΠ΅ΡΡ » MinGW/include/GL/ «.
Π£ΡΠΎΠΊ β2. ΠΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠ° ΠΊ ΠΏΠ΅ΡΠ²ΠΎΠΌΡ ΠΏΡΠΎΠ΅ΠΊΡΡ OpenGL: Π½Π°ΡΡΡΠΎΠΉΠΊΠ° GLFW, CMake ΠΈ GLAD
ΠΠ΅ΡΠ²ΠΎΠ΅, ΡΡΠΎ Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ, ΠΏΡΠ΅ΠΆΠ΄Π΅ ΡΠ΅ΠΌ ΠΌΡ Π½Π°ΡΠ½Π΅ΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°ΡΡ Π³ΡΠ°ΡΠΈΠΊΡ β ΡΡΠΎ ΡΠΎΠ·Π΄Π°ΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ OpenGL ΠΈ ΠΎΠΊΠ½ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π΄Π»Ρ ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ. ΠΠ΄Π½Π°ΠΊΠΎ Π΄Π°Π½Π½ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΡΠ²Π»ΡΡΡΡΡ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½ΡΠΌΠΈ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ, ΠΏΠΎΡΡΠΎΠΌΡ OpenGL ΡΠ΅Π»Π΅Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½Π½ΠΎ ΠΏΡΡΠ°Π΅ΡΡΡ Π°Π±ΡΡΡΠ°Π³ΠΈΡΠΎΠ²Π°ΡΡΡΡ ΠΎΡ Π½ΠΈΡ . ΠΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΠΌΡ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠΎΠ·Π΄Π°ΡΡ ΠΎΠΊΠ½ΠΎ, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ ΠΈ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠΉ Π²Π²ΠΎΠ΄.
Π ΡΡΠ°ΡΡΡΡ, ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°ΡΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠΉ Π½Π°ΠΌ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π», ΠΏΡΠΈ ΡΡΠΎΠΌ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠ· Π½ΠΈΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎ Π½Π°ΡΠ΅Π»Π΅Π½Ρ Π½Π° ΡΠ°Π±ΠΎΡΡ Ρ OpenGL. ΠΡΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΠΈΠ·Π±Π°Π²ΡΡ Π½Π°Ρ ΠΎΡ Π²ΡΠ΅ΠΉ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠ°Π±ΠΎΡΡ, ΡΠ²ΡΠ·Π°Π½Π½ΠΎΠΉ Ρ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΡΠΌΠΈ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ. ΠΠ°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΠΌΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΠΌΠΈ ΡΠ²Π»ΡΡΡΡΡ: GLUT, SDL, SFML ΠΈ GLFW. ΠΠ° ΡΡΠΈΡ ΡΡΠΎΠΊΠ°Ρ ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ GLFW. ΠΡ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΈ Π»ΡΠ±ΡΡ Π΄ΡΡΠ³ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ ΠΈΠ· ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΡΠΏΠΈΡΠΊΠ°, Ρ.ΠΊ. ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΠΈ Π½Π°ΡΡΡΠΎΠΉΠΊΠ° Π΄Π»Ρ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π° ΠΈΠ· Π½ΠΈΡ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½Π° ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ΅ ΠΈ Π½Π°ΡΡΡΠΎΠΉΠΊΠ΅ GLFW.
ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° GLFW
GLFW (Π°Π½Π³Π». Β«Graphics Library FrameWorkΒ») β ΡΡΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°, Π½Π°ΠΏΠΈΡΠ°Π½Π½Π°Ρ Π½Π° ΡΠ·ΡΠΊΠ΅ Π‘ΠΈ, ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π½Π°Ρ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ OpenGL. ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° GLFW ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΡ Π½Π°ΠΌ Π²ΡΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΡΡΠ΅Π±ΡΡΡΡΡ Π΄Π»Ρ ΡΠ΅Π½Π΄Π΅ΡΠΈΠ½Π³Π° Π½Π° ΡΠΊΡΠ°Π½ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ². ΠΠ»Π°Π³ΠΎΠ΄Π°ΡΡ ΡΡΠΎΠΌΡ ΠΌΡ ΡΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΡ OpenGL, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΎΠΊΠ½Π° ΠΈ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠΉ Π²Π²ΠΎΠ΄, ΡΡΠΎ Π²ΠΏΠΎΠ»Π½Π΅ ΠΊΠΎΡΡΠ΅Π»ΠΈΡΡΠ΅Ρ Ρ Π½Π°ΡΠΈΠΌΠΈ ΡΠ΅Π»ΡΠΌΠΈ.
ΠΡΠ½ΠΎΠ²Π½ΠΎΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΡΡΠΎΠΌ ΠΈ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΡΡΠΎΠΊΠ°Ρ ΡΠ΄Π΅Π»ΡΠ΅ΡΡΡ ΠΈΠ·ΡΡΠ΅Π½ΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ GLFW, ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° OpenGL, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΏΡΠΎΡΡΠΎΠ³ΠΎ ΠΎΠΊΠ½Π°, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΌΡ ΠΈ Π±ΡΠ΄Π΅ΠΌ ΡΠΈΡΠΎΠ²Π°ΡΡ Π½Π°ΡΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΡ. ΠΠ° ΡΡΠΎΠΌ ΡΡΠΎΠΊΠ΅ ΠΌΡ ΠΏΠΎΡΠ°Π³ΠΎΠ²ΠΎ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ GLFW, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΏΡΠΎΡΠ΅ΡΡ ΡΠ±ΠΎΡΠΊΠΈ ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π² ΡΠ²ΡΠ·ΠΊΠ΅ Ρ GLFW.
ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅: ΠΠ° ΠΌΠΎΠΌΠ΅Π½Ρ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ Π΄Π°Π½Π½ΠΎΠΉ ΡΡΠ°ΡΡΠΈ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΡΠ΅Π΄Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Microsoft Visual Studio 2019 (ΠΎΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ Π½Π°ΡΠΈ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ Π±ΡΠ΄ΡΡ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΡΠΌΠΈ ΠΈ Ρ Π±ΠΎΠ»Π΅Π΅ ΡΡΠ°ΡΡΠΌΠΈ Π²Π΅ΡΡΠΈΡΠΌΠΈ Visual Studio). ΠΡΠ»ΠΈ ΠΆΠ΅ Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ Π±ΠΎΠ»Π΅Π΅ ΡΡΠ°ΡΡΡ Π²Π΅ΡΡΠΈΡ Visual Studio (ΠΈΠ»ΠΈ Π²ΠΎΠΎΠ±ΡΠ΅ Π΄ΡΡΠ³ΡΡ ΡΡΠ΅Π΄Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ), ΡΠΎ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π±ΡΡΡ ΡΠΏΠΎΠΊΠΎΠΉΠ½Ρ, Ρ.ΠΊ. ΠΏΡΠΎΡΠ΅ΡΡ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΠΈ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ GLFW Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ΅Π½ Π² Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π΅ IDE.
Π‘Π±ΠΎΡΠΊΠ° GLFW
ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ GLFW ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°ΡΠ°ΡΡ Ρ ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠ°ΠΉΡΠ°. Π‘ΡΠΎΠΈΡ ΠΎΡΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ GLFW ΡΠΆΠ΅ ΠΈΠΌΠ΅Π΅Ρ ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ Π±ΠΈΠ½Π°ΡΠ½ΡΠ΅ ΠΈ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡΠ½ΡΠ΅ ΡΠ°ΠΉΠ»Ρ Π΄Π»Ρ Visual Studio 2010-2019, Π½ΠΎ Π΄Π»Ρ ΠΏΠΎΠ»Π½ΠΎΡΡ ΠΊΠ°ΡΡΠΈΠ½Ρ ΠΈΡ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π½Π΅ Π±ΡΠ΄Π΅ΠΌ, Π° Π²ΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ Π²ΡΡΡΠ½ΡΡ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΠΌ GLFW ΠΈΠ· ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°. ΠΡΠΎ Π΄Π΅Π»Π°Π΅ΡΡΡ Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ Π²Ρ ΡΠ°ΠΌΠΈ ΠΏΡΠΎΡΡΠ²ΡΡΠ²ΠΎΠ²Π°Π»ΠΈ ΠΏΡΠΎΡΠ΅ΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ Ρ ΠΎΡΠΊΡΡΡΡΠΌ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΌ ΠΊΠΎΠ΄ΠΎΠΌ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π½Π΅ ΠΊΠ°ΠΆΠ΄Π°Ρ ΠΏΠΎΠ΄ΠΎΠ±Π½Π°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π±ΡΠ΄Π΅Ρ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠΊΠ°ΡΠ°ΡΡ ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ Π±ΠΈΠ½Π°ΡΠ½ΡΠ΅ ΡΠ°ΠΉΠ»Ρ. ΠΡΠ°ΠΊ, Π΄Π°Π²Π°ΠΉΡΠ΅ Π·Π°Π³ΡΡΠ·ΠΈΠΌ ΠΏΠ°ΠΊΠ΅Ρ Ρ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΌ ΠΊΠΎΠ΄ΠΎΠΌ.
ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅: ΠΡ Π±ΡΠ΄Π΅ΠΌ ΡΠΎΠ±ΠΈΡΠ°ΡΡ Π²ΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π² ΡΠΎΡΠΌΠ°ΡΠ΅ 64-Π±ΠΈΡΠ½ΡΡ Π±ΠΈΠ½Π°ΡΠ½ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ², ΠΏΠΎΡΡΠΎΠΌΡ ΡΠ±Π΅Π΄ΠΈΡΠ΅ΡΡ, ΡΡΠΎ ΡΠΊΠ°ΡΠΈΠ²Π°Π΅ΡΠ΅ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ ΠΈΠΌΠ΅Π½Π½ΠΎ 64-Π±ΠΈΡΠ½ΡΠ΅ Π±ΠΈΠ½Π°ΡΠ½ΡΠ΅ ΡΠ°ΠΉΠ»Ρ.
ΠΠΎΡΠ»Π΅ Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΠΏΠ°ΠΊΠ΅ΡΠ° Ρ ΡΠ°ΠΉΠ»Π°ΠΌΠΈ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΠΈΠ·Π²Π»Π΅ΠΊΠΈΡΠ΅ ΠΈ ΠΎΡΠΊΡΠΎΠΉΡΠ΅ Π΅Π³ΠΎ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅. ΠΠ°Ρ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ Π²Π΅ΡΠΈ:
Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°, ΠΊΠΎΡΠΎΡΠ°Ρ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½Π° Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ;
ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ ΠΈΠ· ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅Ρ, ΡΡΠΎ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½Π°Ρ Π½Π°ΠΌΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΈΠ΄Π΅Π°Π»ΡΠ½ΠΎ ΠΏΠΎΠ΄ΠΎΠΉΠ΄Π΅Ρ Π΄Π»Ρ Π½Π°ΡΠ΅Π³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ° ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ, Π² ΡΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠ°ΠΊ ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ Π±ΠΈΠ½Π°ΡΠ½ΡΠ΅ ΡΠ°ΠΉΠ»Ρ Π½Π΅ Π²ΡΠ΅Π³Π΄Π° ΠΌΠΎΠ³ΡΡ ΡΡΠΈΠΌ ΠΏΠΎΡ Π²Π°ΡΡΠ°ΡΡΡΡ (ΠΈΠ½ΠΎΠ³Π΄Π° ΠΎΠ½ΠΈ Π²ΠΎΠΎΠ±ΡΠ΅ Π½Π΅Π΄ΠΎΡΡΡΠΏΠ½Ρ Π΄Π»Ρ Π²Π°ΡΠ΅ΠΉ ΡΠΈΡΡΠ΅ΠΌΡ). ΠΠ΄Π½Π°ΠΊΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ², ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΡΡΠΈΡ ΡΡ ΠΏΠΎΠ΄ ΡΠ³ΠΈΠ΄ΠΎΠΉ ΠΎΡΠΊΡΡΡΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ, Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ Π½Π΅ Π²ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ ΠΎΠ΄Π½Ρ ΠΈ ΡΡ ΠΆΠ΅ IDE ΠΈΠ»ΠΈ ΡΠΈΡΡΠ΅ΠΌΡ ΡΠ±ΠΎΡΠΊΠΈ Π΄Π»Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠ²ΠΎΠ΅Π³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, Π° ΡΡΠΎ Π·Π½Π°ΡΠΈΡ, ΡΡΠΎ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»Π΅Π½Π½ΡΠ΅ ΡΠ°ΠΉΠ»Ρ ΠΏΡΠΎΠ΅ΠΊΡΠ°/ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Π½Π΅ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΡ Ρ Π½Π°ΡΡΡΠΎΠΉΠΊΠ°ΠΌΠΈ IDE Ρ Π΄ΡΡΠ³ΠΈΡ Π»ΡΠ΄Π΅ΠΉ. Π‘Π»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ, ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΊΠΎΠ½Π΅ΡΠ½ΡΠΉ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π½Π°ΡΡΡΠΎΠΈΡΡ ΡΠ²ΠΎΠΉ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ ΠΏΡΠΎΠ΅ΠΊΡ/ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Ρ ΡΡΠ΅ΡΠΎΠΌ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΡ *.Ρ / *.cpp ΠΈ *.h / *.hpp ΡΠ°ΠΉΠ»ΠΎΠ², ΡΡΠΎ ΠΏΠΎΡΡΠΈ Π²ΡΠ΅Π³Π΄Π° ΡΠ²Π»ΡΠ΅ΡΡΡ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΡΡΡΠ΄ΠΎΠ΅ΠΌΠΊΠΈΠΌ ΠΈ Π³ΡΠΎΠΌΠΎΠ·Π΄ΠΊΠΈΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠΌ. ΠΠΎ Π½Π΅ ΡΠΏΠ΅ΡΠΈΡΠ΅ ΡΠ°ΡΡΡΡΠ°ΠΈΠ²Π°ΡΡΡΡ, Π΄Π»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π΄Π°Π½Π½ΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΡΠΆΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΡΠ΄ΠΎΠ±Π½ΡΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ ΡΠ±ΠΎΡΠΊΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ² ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ CMake.
CMake
CMake β ΡΡΠΎ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ, ΠΊΠΎΡΠΎΡΡΠΉ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π·Π°ΡΠ°Π½Π΅Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΡ ΡΡΠ΅Π½Π°ΡΠΈΠ΅Π² ΠΌΠΎΠΆΠ΅Ρ ΠΈΠ· ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠΈ ΡΠ°ΠΉΠ»ΠΎΠ² ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠ°ΠΉΠ»Ρ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ²/ΡΠ΅ΡΠ΅Π½ΠΈΠΉ ΠΏΠΎΠ΄ Π²ΡΠ±ΡΠ°Π½Π½ΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ IDE (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π΄Π»Ρ Visual Studio, Code::Blocks ΠΈΠ»ΠΈ Eclipse). ΠΠ½ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ Π½Π°ΠΌ ΠΈΠ· ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠ°ΠΊΠ΅ΡΠ° ΡΠ°ΠΉΠ»ΠΎΠ² GLFW ΡΠΎΠ·Π΄Π°ΡΡ ΡΠ°ΠΉΠ» ΠΏΡΠΎΠ΅ΠΊΡΠ° ΠΏΠΎΠ΄ ΡΡΠ΅Π΄Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ Visual Studio 2019, Π° Π·Π°ΡΠ΅ΠΌ Π΄Π°Π½Π½ΡΠΉ ΡΠ°ΠΉΠ» ΠΌΡ ΡΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ. ΠΠΎ ΡΠ½Π°ΡΠ°Π»Π° Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ Π΅Π³ΠΎ ΡΠΊΠ°ΡΠ°ΡΡ, Π° Π·Π°ΡΠ΅ΠΌ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ.
ΠΠΎΡΠ»Π΅ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ CMake Ρ Π²Π°Ρ Π±ΡΠ΄Π΅Ρ 2 Π²Π°ΡΠΈΠ°Π½ΡΠ°:
Π·Π°ΠΏΡΡΡΠΈΡΡ CMake ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ;
Π·Π°ΠΏΡΡΡΠΈΡΡ CMake ΡΠ΅ΡΠ΅Π· Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ.
ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΌΡ Π½Π΅ ΡΡΡΠ΅ΠΌΠΈΠΌΡΡ Π²ΡΡ ΡΡΠ»ΠΎΠΆΠ½ΡΡΡ, ΡΠΎ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΠΌΡΡ Π½Π° Π²Π°ΡΠΈΠ°Π½ΡΠ΅ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°. ΠΠ»Ρ ΡΠ°Π±ΠΎΡΡ Ρ CMake Π½Π°ΠΌ ΠΏΠΎΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΡΠΊΠ°Π·Π°ΡΡ ΠΏΠ°ΠΏΠΊΡ Ρ ΡΠ°ΠΉΠ»Π°ΠΌΠΈ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΠΏΡΠΎΠ΅ΠΊΡΠ° (Π² Π½Π°ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ glfw-3.3.2 ) ΠΈ ΠΏΠ°ΠΏΠΊΡ Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π΄Π»Ρ Π±ΠΈΠ½Π°ΡΠ½ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ². ΠΠ»Ρ ΠΏΠ°ΠΏΠΊΠΈ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΠΌΡ ΡΠΎΠ±ΠΈΡΠ°Π΅ΠΌΡΡ Π²ΡΠ±ΡΠ°ΡΡ ΠΊΠΎΡΠ½Π΅Π²ΡΡ ΠΏΠ°ΠΏΠΊΡ Π·Π°Π³ΡΡΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠ°ΠΊΠ΅ΡΠ° GLFW, Π° Π΄Π»Ρ ΠΏΠ°ΠΏΠΊΠΈ ΡΠ±ΠΎΡΠΊΠΈ ΠΌΡ ΡΠΎΠ·Π΄Π°Π΄ΠΈΠΌ Π½ΠΎΠ²ΡΠΉ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ build :
Π ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΠΎΠΊΠ½Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°Π΄Π°ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ Π²Π΅ΡΡΠΈΡ Visual Studio. Π’.ΠΊ. ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΌΡ Π±ΡΠ΄Π΅ΠΌ Π² Visual Studio 2019, ΡΠΎ Π²ΡΠ±ΠΈΡΠ°Π΅ΠΌ ΠΎΠΏΡΠΈΡ «Visual Studio 16 2019» :
ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ ΠΏΡΠΎΠ΅ΠΊΡΠ°
ΠΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΌΡ ΡΠΎΠ·Π΄Π°Π»ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ, Π½ΡΠΆΠ½ΠΎ ΡΠ±Π΅Π΄ΠΈΡΡΡΡ, ΡΡΠΎ IDE Π·Π½Π°Π΅Ρ, Π³Π΄Π΅ Π½Π°ΠΉΡΠΈ Π΄Π°Π½Π½ΡΠΉ ΡΠ°ΠΉΠ», Π° ΡΠ°ΠΊΠΆΠ΅ Π΄ΡΡΠ³ΠΈΠ΅ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΠΌΡΠ΅ ΡΠ°ΠΉΠ»Ρ Π½Π°ΡΠ΅ΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ OpenGL. Π Π΅ΡΠΈΡΡ ΡΡΠΎΡ Π²ΠΎΠΏΡΠΎΡ ΠΌΠΎΠΆΠ½ΠΎ Π΄Π²ΡΠΌΡ ΡΠΏΠΎΡΠΎΠ±Π°ΠΌΠΈ:
Π‘ΠΏΠΎΡΠΎΠ± β1: ΠΠΎΠΆΠ½ΠΎ ΡΠΊΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΠΏΠ°ΠΏΠΊΠΈ include ΠΏΡΠΎΠ΅ΠΊΡΠ° GLFW Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΡΡ ΠΏΠ°ΠΏΠΊΡ include Π²Π°ΡΠ΅ΠΉ IDE ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°, Π° ΡΠ°ΠΊΠΆΠ΅ ΡΠΊΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΠΉ ΡΠ°ΠΉΠ» glfw3.lib Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΡΡ ΠΏΠ°ΠΏΠΊΡ /lib Π²Π°ΡΠ΅ΠΉ IDE ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°. ΠΠ°Π½Π½ΡΠΉ ΡΠΏΠΎΡΠΎΠ± Π²ΠΏΠΎΠ»Π½Π΅ ΡΠ°Π±ΠΎΡΠΈΠΉ, Π½ΠΎ ΠΌΡ Π΅Π³ΠΎ Π½Π΅ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΠΌ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π½ΠΎΠ²Π°Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ° IDE ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ° ΠΏΡΠΈΠ²Π΅Π΄Π΅Ρ ΠΊ ΡΠΎΠΌΡ, ΡΡΠΎ Π²Π°ΠΌ Π·Π°Π½ΠΎΠ²ΠΎ ΠΏΡΠΈΠ΄Π΅ΡΡΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°ΡΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ ΡΠ°ΠΉΠ»Ρ.
ΠΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ ΡΠ°ΠΉΠ»Ρ Π±ΡΠ΄ΡΡ ΡΠΎΡ ΡΠ°Π½Π΅Π½Ρ Π² Π²ΡΠ±ΡΠ°Π½Π½ΠΎΠΌ Π²Π°ΠΌΠΈ ΠΌΠ΅ΡΡΠ΅, ΠΌΡ ΡΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡΠΈΡΡΡΠΏΠΈΡΡ ΠΊ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π½Π°ΡΠ΅Π³ΠΎ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ OpenGL-GLFW-ΠΏΡΠΎΠ΅ΠΊΡΠ°.
ΠΠ°Ρ ΠΏΠ΅ΡΠ²ΡΠΉ ΠΏΡΠΎΠ΅ΠΊΡ
Π’Π΅ΠΏΠ΅ΡΡ Ρ Π½Π°Ρ Π΅ΡΡΡ ΡΠ°Π±ΠΎΡΠ΅Π΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π½Π°ΡΠ΅Π³ΠΎ ΡΠ°ΠΌΠΎΠ³ΠΎ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ OpenGL-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ!
ΠΠΈΠ½ΠΊΠΈΠ½Π³ ΠΏΡΠΎΠ΅ΠΊΡΠ°
ΠΠ΄Π΅ΡΡ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΡΡΠΎΠ»ΡΠΊΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ΠΎΠ², ΡΠΊΠΎΠ»ΡΠΊΠΎ Π·Π°Ρ ΠΎΡΠΈΡΠ΅, ΠΈ Ρ ΡΡΠΎΠ³ΠΎ ΠΌΠΎΠΌΠ΅Π½ΡΠ° IDE ΠΏΡΠΈ ΠΏΠΎΠΈΡΠΊΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ² Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ ΡΠ°ΠΊΠΆΠ΅ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ ΠΈ ΡΡΠΈ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ. ΠΠΎΡΡΠΎΠΌΡ, ΠΊΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ Π²Ρ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΠ΅ ΠΏΠ°ΠΏΠΊΡ Lib ΠΈΠ· ΠΏΡΠΎΠ΅ΠΊΡΠ° GLFW, Π²Ρ ΡΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π²ΡΠ΅ ΡΠ°ΠΉΠ»Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ ΠΈΠ· ΡΡΠΎΠΉ ΠΏΠ°ΠΏΠΊΠΈ. ΠΠ½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎ ΠΎΠ±ΡΡΠΎΡΡ Π΄Π΅Π»Π° ΠΈ Ρ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠ°ΠΏΠΊΠΈ Include Π΄Π»Ρ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡΠ½ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ².
ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π΄Π»Ρ VS Π±ΡΠ»ΠΈ ΡΠΊΠ°Π·Π°Π½Ρ Π²ΡΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ ΡΠ°ΠΉΠ»Ρ, ΡΠΎ ΠΌΡ, Π½Π°ΠΊΠΎΠ½Π΅Ρ, ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ²ΡΠ·Π°ΡΡ GLFW Ρ Π½Π°ΡΠΈΠΌ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠΌ, ΠΏΠ΅ΡΠ΅ΠΉΠ΄Ρ Π² ΡΠ°Π·Π΄Π΅Π» «ΠΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΡΠΈΠΊ» > «ΠΠ²ΠΎΠ΄» :
ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅: Π ΠΏΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠΈ ΠΏΠΎΠ΄ΡΠ°Π·Π΄Π΅Π»Π° Β«Π‘Π±ΠΎΡΠΊΠ° GLFWΒ» ΡΠΊΠ°Π·Π°Π½ΠΎ, ΡΡΠΎ ΠΌΡ ΡΠΎΠ±ΠΈΡΠ°Π΅ΠΌ Π²ΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π² ΡΠΎΡΠΌΠ°ΡΠ΅ 64-Π±ΠΈΡΠ½ΡΡ Π±ΠΈΠ½Π°ΡΠ½ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ². Π ΡΠΎ ΠΆΠ΅ Π²ΡΠ΅ΠΌΡ ΡΠΈΡΠ»ΠΎ Β«32Β» Π² Π½Π°Π·Π²Π°Π½ΠΈΠΈ ΡΠ°ΠΉΠ»Π° OpenGL32.Lib ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠ·Π²Π°ΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΠΏΡΡΠ°Π½ΠΈΡΡ, ΠΊΠ°ΠΊ Π±Ρ Π½Π°ΠΌΠ΅ΠΊΠ°Ρ Π½Π° ΡΠΎ, ΡΡΠΎ Π² Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΈΠΌΠ΅Π½Π½ΠΎ 32-Π±ΠΈΡΠ½Π°Ρ Π²Π΅ΡΡΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ. ΠΠ° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΡΡΠΎ Π½Π΅ ΡΠ°ΠΊ. ΠΡΠ»ΠΈ Ρ Π²Π°Ρ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ ΠΏΠ°ΠΊΠ΅Ρ Microsoft SDK, ΡΠΎ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΏΡΠΎΡΡΠΎ Π·Π°ΠΉΡΠΈ Π² ΠΏΠ°ΠΏΠΊΡ C:\Program Files (x86)\Windows Kits\10\Lib\[ΠΠΎΠΌΠ΅Ρ_Π²Π΅ΡΡΠΈΠΈ_SDK]\um\x64\ ΠΈ ΡΠ±Π΅Π΄ΠΈΡΡΡΡ, ΡΡΠΎ Π² Π½Π΅ΠΉ ΡΡΠ΅Π΄ΠΈ ΠΏΡΠΎΡΠΈΡ ΡΠ°ΠΉΠ»ΠΎΠ² Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ ΠΈ Π½Π°ΡΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°:
ΠΠΎΠ»ΡΡΠ΅ ΡΠΎΠ³ΠΎ, Π΅ΡΠ»ΠΈ Π·Π°ΠΉΡΠΈ Π² ΠΏΠ°ΠΏΠΊΡ C:\Program Files (x86)\Windows Kits\10\Lib\[ΠΠΎΠΌΠ΅Ρ_Π²Π΅ΡΡΠΈΠΈ_SDK]\um\x86\, ΡΠΎ ΠΈ ΡΠ°ΠΌ ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΡΡΠ΅ΡΠΈΡΡ ΡΠ°ΠΉΠ» OpenGL32.Lib:
ΠΡΡΠ³ΠΈΠΌΠΈ ΡΠ»ΠΎΠ²Π°ΠΌΠΈ, ΠΏΠΎΠ΄ ΠΎΠ΄Π½ΠΈΠΌ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ ΡΠ°ΠΉΠ»Π° OpenGL32.Lib ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π΄Π²Π΅ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ Π²Π΅ΡΡΠΈΠΈ (32-Π±ΠΈΡΠ½Π°Ρ ΠΈ 64-Π±ΠΈΡΠ½Π°Ρ) Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ. ΠΠΎΡΡΠΎΠΌΡ ΠΏΡΠΎΡΡΠΎ Π½Π΅ ΠΎΠ±ΡΠ°ΡΠ°ΠΉΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΡΠΎ, ΡΡΠΎ Π² Π΅Ρ ΠΈΠΌΠ΅Π½ΠΈ Π΅ΡΡΡ ΡΠ°ΡΡΡ Β«32Β». ΠΡΡ ΠΏΡΠ΅ΠΊΡΠ°ΡΠ½ΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΈ Π² 64-Π±ΠΈΡΠ½ΠΎΠΌ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΠΈ.
ΠΠ°ΡΠ΅ΠΌ, ΠΏΠΎΡΠ»Π΅ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ GLFW ΠΈ OpenGL Π² Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΡΠΈΠΊΠ°, Π²Ρ ΡΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΡ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡΠ½ΡΠ΅ ΡΠ°ΠΉΠ»Ρ GLFW ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΡΡΡΠΎΠΊΠΎΠΉ ΠΊΠΎΠ΄Π°:
ΠΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ OpenGL ΠΊ Visual Studio 2017
ΠΠ°ΠΊ Π² visual studio 2008 Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ opengl
ΠΠ΄ΡΠ°Π²ΡΡΠ²ΠΉΡΠ΅, Ρ ΡΠΊΠ°ΡΠ°Π» ΠΎΡΡΡΠ΄Π° http://www.swiftless.com/tutorials/opengl/gldrivers.html Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ.
ΠΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ OpenGL ΠΊ ΠΏΡΠΎΠ΅ΠΊΡΡ Π½Π° Π‘++ (Visual Studio)
ΠΠΎΠ±ΡΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΡΡΡΠΎΠΊ! ΠΠΈΠΊΠ°ΠΊ Π½Π΅ ΠΌΠΎΠ³Ρ ΠΏΠΎΠ½ΡΡΡ, ΠΊΠ°ΠΊ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ OpenGL ΠΊ ΡΠ²ΠΎΠ΅ΠΌΡ ΠΏΡΠΎΠ΅ΠΊΡΡ.
«OpenGL» Ρ ΡΠ°ΠΌ ΡΠΎΠ·Π΄Π°Π». Π Π½Π΅ΠΉ Ρ ΡΠΎΠ·Π΄Π°Π» ΠΏΠ°ΠΏΠΊΡ «glut». Π ΠΏΠ°ΠΏΠΊΠ΅ «glut» ΡΠΎΠ·Π΄Π°Π» ΠΏΠ°ΠΏΠΊΠΈ: «include», «lib» ΠΈ «bin». Π ΡΠ°ΡΠΊΠΈΠ΄Π°Π» ΡΠ°ΠΉΠ»Ρ ΠΏΠΎ ΠΏΠ°ΠΏΠΊΠ°ΠΌ. Π «bin» ΠΏΠΎΠ»ΠΎΠΆΠΈΠ» glut32.dll. ΠΡΠΎ ΠΏΡΠΎΡΡΠΎ Π΄Π»Ρ ΡΠ΄ΠΎΠ±ΡΡΠ²Π°.
ΠΠΎΡ ΡΠ°ΠΊΠ°Ρ ΡΡΡΡΠΊΡΡΡΠ° Ρ ΠΌΠ΅Π½Ρ. ΠΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π΄Π΅ΡΠΈΡΠΎΠ² ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΡΡΡ ΠΏΠ°ΠΏΠΊΠΈ ΠΈΠ»ΠΈ ΡΠ°ΠΉΠ»Π°.
— lib
— Win32
—- glut32.dll
—- glut32.lib
— x64
—- glut32.dll
—- glut32.lib
Π Π΅ΡΠ΅Π½ΠΈΠ΅
GLUT ΠΏΠ΅ΡΠ΅ΡΡΠ» Π² FreeGLUT. ΠΡΠΎ ΡΠΎΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅. ΠΠΎΠ»ΠΎΠΆΠΈΠ» Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π² ΠΏΠ°ΠΏΠΊΡ «Libs», Π½Π°ΡΡΡΠΎΠΈΠ» ΠΏΠΎ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠΌΡ ΠΏΡΡΠΈ. ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠΊΠ°ΡΠ°ΡΡ ΠΏΡΠΎΠ΅ΠΊΡ ΠΈ Π²ΡΡΠ°Π²ΠΈΡΡ ΡΠ²ΠΎΠΉ ΠΊΠΎΠ΄ Π² main.cpp. ΠΡΠΎΡ ΠΏΡΠΎΠ΅ΠΊΡ ΡΠ°Π±ΠΎΡΠΈΠΉ. ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠΊΠ°ΡΠ°ΡΡ ΠΈ ΡΡΠ°Π·Ρ Π·Π°ΠΏΡΡΡΠΈΡΡ. ΠΠ½ Π²ΡΠ²ΠΎΠ΄ΠΈΡ ΡΡΠ΅ΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠ° Ρ ΡΠ°Π·Π½ΡΠΌΠΈ ΡΠ²Π΅ΡΠ°ΠΌΠΈ Π²Π΅ΡΡΠΈΠ½. ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ OpenGL 3.3 Core: FreeGLUTAndGLSL.zip
ΠΠΎ ΠΈΠ΄Π΅Π΅, Π΅ΡΠ»ΠΈ Π²Ρ Π²ΡΡΠ°Π²ΠΈΡΠ΅ ΡΠ²ΠΎΠΉ ΠΊΠΎΠ΄ Π² main.cpp, Π½ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π·Π°ΡΠ°Π±ΠΎΡΠ°ΡΡ, Π΅ΡΠ»ΠΈ Π² Π²Π°ΡΠ΅ΠΌ ΠΊΠΎΠ΄Π΅ Π½Π΅Ρ ΠΎΡΠΈΠ±ΠΎΠΊ. ΠΡΠ»ΠΈ Π΅ΡΡΡ ΠΎΡΠΈΠ±ΠΊΠΈ, ΡΠΎ Π²ΡΡΠ°Π²ΡΡΠ΅ ΡΠ²ΠΎΠΉ ΠΊΠΎΠ΄ Π² ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π² ΡΠ΅Π³ CPP (ΠΊΠ½ΠΎΠΏΠΊΠ° C++ Π² ΡΠ΅Π΄Π°ΠΊΡΠΎΡΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ)
ΠΡΠΎ ΠΏΡΠΎΠ΅ΠΊΡ Ρ ΡΠΊΠ°ΡΠ°Π» ΠΈΠ· ΠΊΠ°ΠΊΠΎΠ³ΠΎ-ΡΠΎ ΡΡΡΠΎΡΠΈΠ°Π»Π°. ΠΠ΅ΠΌΠ½ΠΎΠ³ΠΎ Π΄ΠΎΡΠ°Π±ΠΎΡΠ°Π». ΠΠΎΠ±Π°Π²ΠΈΠ» Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ GLM Π΄Π»Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΠ°Π·ΠΌΠ΅ΡΠ° ΡΡΠ΅ΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠ°, ΠΏΠΎΠ²ΠΎΡΠΎΡΠ° ΠΈ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠ° Π΅Π³ΠΎ Ρ Π½ΠΎΠ²ΡΡ ΠΏΠΎΠ·ΠΈΡΠΈΡ.
ΠΠ°ΠΊ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΡ opengl ΠΊ ΠΏΡΠΎΠ΅ΠΊΡΡ
ΠΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ ΠΊΠ°ΠΊ Π²Ρ ΡΠΎΠ·Π΄Π°Π΄ΠΈΡΠ΅ Π½ΠΎΠ²ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² Visual C++ (ΠΏΡΠΈΡΠ΅ΠΌ Win32 ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π° Π½Π΅ ΠΊΠΎΠ½ΡΠΎΠ»ΡΠ½ΠΎΠ΅), ΠΠ°ΠΌ Π½Π°Π΄ΠΎ Π±ΡΠ΄Π΅Ρ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π΄Π»Ρ ΡΠ±ΠΎΡΠΊΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ OpenGL. Π ΠΌΠ΅Π½Ρ Project/setting, Π²ΡΠ±Π΅ΡΠΈΡΠ΅ Π·Π°ΠΊΠ»Π°Π΄ΠΊΡ LINK. Π ΡΡΡΠΎΠΊΠ΅ «Object/Library Modules» Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ «OpenGL32.lib GLu32.lib GLaux.lib». ΠΠ°ΡΠ΅ΠΌ ΠΊΠ»ΠΈΠΊΠ½ΠΈΡΠ΅ ΠΏΠΎ OK. Π’Π΅ΠΏΠ΅ΡΡ Π²ΡΠ΅ Π³ΠΎΡΠΎΠ²ΠΎ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Ρ OpenGL.
ΠΠ΅ΡΠ²ΡΠ΅ ΡΠ΅ΡΡΡΠ΅ ΡΡΡΠΎΠΊΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Π²Ρ Π²Π²Π΅Π΄Π΅ΡΠ΅, ΡΠΎΠΎΠ±ΡΠ°ΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΡ ΠΊΠ°ΠΊΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΡΠ½ΡΠ΅ ΡΠ°ΠΉΠ»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ. ΠΠ½ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ Π²ΡΠ³Π»ΡΠ΄ΡΡ ΡΠ°ΠΊ:
OpenGL code
ΠΠ΅ΡΠ²ΡΠ΅ Π΄Π²Π΅ ΡΡΡΠΎΠΊΠΈ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡ ΠΠΎΠ½ΡΠ΅ΠΊΡΡΡ Π Π΅Π½Π΄Π΅ΡΠΈΠ½Π³Π°, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ²ΡΠ·ΡΠ²Π°Π΅Ρ Π²ΡΠ·ΠΎΠ²Ρ OpenGL Ρ ΠΎΠΊΠ½ΠΎΠΌ Windows. ΠΠΎΠ½ΡΠ΅ΠΊΡΡ Π Π΅Π½Π΄Π΅ΡΠΈΠ½Π³Π° OpenGL ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ ΠΊΠ°ΠΊ hRC. ΠΠ»Ρ ΡΠΎΠ³ΠΎ ΡΡΠΎΠ±Ρ ΡΠΈΡΠΎΠ²Π°ΡΡ Π² ΠΎΠΊΠ½Π΅, Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΠ·Π΄Π°ΡΡ ΠΠΎΠ½ΡΠ΅ΠΊΡΡ Π£ΡΡΡΠΎΠΉΡΡΠ²Π° Windows, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ ΠΊΠ°ΠΊ hDC. DC ΡΠΎΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ ΠΎΠΊΠ½ΠΎ Ρ GDI. RC ΡΠΎΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ OpenGL Ρ DC.
OpenGL code
ΠΠΎΡΠ»Π΅Π΄Π½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΌΡ Π±ΡΠ΄Π΅ΠΌ Π½ΡΠΆΠ΄Π°ΡΡΡΡ, ΡΡΠΎ ΠΌΠ°ΡΡΠΈΠ², ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ Π΄Π»Ρ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΡ Π½Π°ΠΆΠ°ΡΠΈΡ ΠΊΠ»Π°Π²ΠΈΡ Π½Π° ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΠ΅. ΠΡΡΡ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡΡΠ΅ΠΉ ΡΠ»Π΅Π΄ΠΈΡΡ Π·Π° Π½Π°ΠΆΠ°ΡΠΈΡΠΌΠΈ Π½Π° ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΠ΅, Π½ΠΎ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΡΠΎΡ ΠΏΡΡΡ. ΠΡΠΈ ΡΡΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°ΡΡ Π½Π°ΠΆΠ°ΡΠΈΠ΅ Π±ΠΎΠ»Π΅Π΅ ΡΠ΅ΠΌ ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠ»Π°Π²ΠΈΡΠΈ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ.
OpenGL code
Opengl Code
Opengl code
Π‘Π»Π΅Π΄ΡΡΡΠΈΠ΅ ΡΡΠΈ ΡΡΡΠΎΠΊΠΈ ΡΠΎΠ·Π΄Π°ΡΡ ΠΡΡΠ΅Ρ ΠΠ»ΡΠ±ΠΈΠ½Ρ. ΠΡΠΌΠ°ΠΉΡΠ΅ ΠΎ Π±ΡΡΠ΅ΡΠ΅ Π³Π»ΡΠ±ΠΈΠ½Ρ ΠΊΠ°ΠΊ ΠΎ ΡΠ»ΠΎΡΡ Π½Π° ΡΠΊΡΠ°Π½Π΅. ΠΡΡΠ΅Ρ Π³Π»ΡΠ±ΠΈΠ½Ρ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, ΠΊΠ°ΠΊ Π΄Π°Π»Π΅ΠΊΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΡ Π½Π°Ρ ΠΎΠ΄ΡΡΡΡ ΠΎΡ ΡΠΊΡΠ°Π½Π°. ΠΡ Π½Π΅ Π±ΡΠ΄Π΅ΠΌ ΡΠ΅Π°Π»ΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π±ΡΡΠ΅Ρ Π³Π»ΡΠ±ΠΈΠ½Ρ Π² ΡΡΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅, Π½ΠΎ Π»ΡΠ±Π°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Ρ OpenGL, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠΈΡΡΠ΅Ρ Π½Π° ΡΠΊΡΠ°Π½Π΅ Π² 3D Π±ΡΠ΄Π΅Ρ Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ. ΠΠ½ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΡ Π΄Π»Ρ ΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΊΠ²Π°Π΄ΡΠ°Ρ ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½Π½ΡΠΉ ΠΏΠΎΠ΄ ΠΊΡΡΠ³ΠΎΠΌ Π½Π΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠ²Π΅ΡΡ ΠΊΡΡΠ³Π°. ΠΡΡΠ΅Ρ Π³Π»ΡΠ±ΠΈΠ½Ρ ΠΎΡΠ΅Π½Ρ Π²Π°ΠΆΠ½Π°Ρ ΡΠ°ΡΡΡ OpenGL.
OpenGL code
Π‘Π»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΏΡΡΡ ΡΡΡΠΎΠΊ ΡΠ°Π·ΡΠ΅ΡΠ°ΡΡ ΠΏΠ»Π°Π²Π½ΠΎΠ΅ ΡΠ²Π΅ΡΠΎΠ²ΠΎΠ΅ ΡΠ³Π»Π°ΠΆΠΈΠ²Π°Π½ΠΈΠ΅ (ΠΊΠΎΡΠΎΡΠΎΠ΅ Ρ Π±ΡΠ΄Ρ ΠΎΠ±ΡΡΡΠ½ΡΡΡ ΠΏΠΎΠ·Π΄Π½Π΅Π΅) ΠΈ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΡ ΡΠΊΡΠ°Π½Π° Π΄Π»Ρ ΠΏΠ΅ΡΡΠΏΠ΅ΠΊΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΠΌΠΎΡΡΠ°. ΠΡΠ΄Π°Π»Π΅Π½Π½ΡΠ΅ ΠΏΡΠ΅Π΄ΠΌΠ΅ΡΡ Π½Π° ΡΠΊΡΠ°Π½Π΅ ΠΊΠ°ΠΆΡΡΡΡ ΠΌΠ΅Π½ΡΡΠΈΠΌΠΈ, ΡΠ΅ΠΌ Π±Π»ΠΈΠΆΠ½ΠΈΠ΅. ΠΡΠΎ ΠΏΡΠΈΠ΄Π°Π΅Ρ ΡΡΠ΅Π½Π΅ ΡΠ΅Π°Π»ΠΈΡΡΠΈΡΠ½ΡΠΉ Π²ΠΈΠ΄. ΠΠ΅ΡΡΠΏΠ΅ΠΊΡΠΈΠ²Π° Π²ΡΡΠΈΡΠ»ΡΠ΅ΡΡΡ c ΡΠ³Π»ΠΎΠΌ ΠΏΡΠΎΡΠΌΠΎΡΡΠ° 45 Π³ΡΠ°Π΄ΡΡΠΎΠ² Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΡΠΈΡΠΈΠ½Ρ ΠΈ Π²ΡΡΠΎΡΡ ΠΎΠΊΠ½Π°. 0.1f, 100.0f Π³Π»ΡΠ±ΠΈΠ½Π° ΡΠΊΡΠ°Π½Π°.
glMatrixMode(GL_PROJECTION) ΡΠΎΠΎΠ±ΡΠ°Π΅Ρ ΠΎ ΡΠΎΠΌ, ΡΡΠΎ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π±ΡΠ΄ΡΡ Π²ΠΎΠ·Π΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°ΡΡ Π½Π° ΠΌΠ°ΡΡΠΈΡΡ ΠΏΡΠΎΠ΅ΠΊΡΠΈΠΈ. glLoadIdentity() β ΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΡ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ ΡΠ±ΡΠΎΡΡ. Π Π°Π· ΡΡΠ΅Π½Π° ΡΠ±ΡΠΎΡΠ΅Π½Π°, ΠΏΠ΅ΡΡΠΏΠ΅ΠΊΡΠΈΠ²Π° Π²ΡΡΠΈΡΠ»ΡΠ΅ΡΡΡ Π΄Π»Ρ ΡΡΠ΅Π½Ρ. glMatrixMode(GL_MODELVIEW) ΡΠΎΠΎΠ±ΡΠ°Π΅Ρ, ΡΡΠΎ Π»ΡΠ±ΡΠ΅ Π½ΠΎΠ²ΡΠ΅ ΡΡΠ°Π½ΡΡΠΎΡΠΌΠ°ΡΠΈΠΈ Π±ΡΠ΄ΡΡ Π²ΠΎΠ·Π΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°ΡΡ Π½Π° ΠΌΠ°ΡΡΠΈΡΡ ΠΏΡΠΎΡΠΌΠΎΡΡΠ° ΠΌΠΎΠ΄Π΅Π»ΠΈ. ΠΠ΅ Π²ΠΎΠ»Π½ΡΠΉΡΠ΅ΡΡ, Π΅ΡΠ»ΠΈ Π²Ρ ΡΡΠΎ-ΡΠΎ Π½Π΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅ΡΠ΅ ΡΡΠΎΡ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π», Ρ Π±ΡΠ΄Ρ ΠΎΠ±ΡΡΠ°ΡΡ Π²ΡΠ΅ΠΌΡ ΡΡΠΎΠΌΡ Π² Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠΈΡ ΡΡΠΎΠΊΠ°Ρ . Π’ΠΎΠ»ΡΠΊΠΎ Π·Π°ΠΏΠΎΠΌΠΈΠ½ΠΈΡΠ΅, ΡΡΠΎ ΠΠΠΠ ΡΠ΄Π΅Π»Π°ΡΡ, Π΅ΡΠ»ΠΈ Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ ΠΊΡΠ°ΡΠΈΠ²ΡΡ ΠΏΠ΅ΡΡΠΏΠ΅ΠΊΡΠΈΠ²Π½ΡΡ ΡΡΠ΅Π½Ρ.
OpenGl code
Π‘Π»Π΅Π΄ΡΡΡΠ°Ρ ΡΠ΅ΠΊΡΠΈΡ ΠΊΠΎΠ΄Π° ΠΎΡΠ΅Π½Ρ ΠΏΡΠΎΡΡΠ°Ρ, ΠΏΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Ρ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΠΌ ΠΊΠΎΠ΄ΠΎΠΌ. ΠΡΠΎ ΡΡΠ½ΠΊΡΠΈΡ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΡΠ΅Π½Ρ, Π²ΡΠ·ΡΠ²Π°Π΅ΠΌΠ°Ρ OpenGL Π²ΡΡΠΊΠΈΠΉ ΡΠ°Π·, ΠΊΠΎΠ³Π΄Π° Π²Ρ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΡΠ΅ ΡΠ°Π·ΠΌΠ΅Ρ ΠΎΠΊΠ½Π° (Π΄ΠΎΠΏΡΡΡΠΈΠΌ, ΡΡΠΎ Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ ΠΎΠΊΠ½Π° ΡΠ°ΡΠ΅, ΡΠ΅ΠΌ ΠΏΠΎΠ»Π½ΠΎΡΠΊΡΠ°Π½Π½ΡΠΉ ΡΠ΅ΠΆΠΈΠΌ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΡ Π½Π΅ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅ΠΌ). ΠΠ°ΠΆΠ΅ Π΅ΡΠ»ΠΈ Π²Ρ Π½Π΅ Π΄Π΅Π»Π°Π΅ΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΠ°Π·ΠΌΠ΅ΡΠΎΠ² ΠΎΠΊΠ½Π° (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ Π²Ρ Π½Π°Ρ ΠΎΠ΄ΠΈΡΠ΅ΡΡ Π² ΠΏΠΎΠ»Π½ΠΎΡΠΊΡΠ°Π½Π½ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅), ΡΡΠ° ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ° Π²ΡΠ΅ ΡΠ°Π²Π½ΠΎ Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ Π²ΡΠ·Π²Π°Π½Π° Ρ ΠΎΡΡ ΠΎΠ΄ΠΈΠ½ ΡΠ°Π·, ΠΎΠ±ΡΡΠ½ΠΎ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π·Π°ΠΏΡΡΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΠ°ΠΌΠ΅ΡΡ, ΡΡΠΎ ΡΡΠ΅Π½Π° ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΡΠ΅ΡΡΡ, ΠΎΡΠ½ΠΎΠ²ΡΠ²Π°ΡΡΡ Π½Π° ΡΠΈΡΠΈΠ½Π΅ ΠΈ Π²ΡΡΠΎΡΠ΅ ΠΎΠΊΠ½Π°, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΡΡΡ.
OpenGL code
GLvoid ReSizeGLScene(GLsizei Width, GLsizei Height)
<
if (Height==0) // ΠΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠ΅Π½ΠΈΠ΅ Π΄Π΅Π»Π΅Π½ΠΈΡ Π½Π° Π½ΠΎΠ»Ρ, Π΅ΡΠ»ΠΈ ΠΎΠΊΠ½ΠΎ ΡΠ»ΠΈΡΠΊΠΎΠΌ ΠΌΠ°Π»ΠΎ
Height=1;
glViewport(0, 0, Width, Height);
// Π‘Π±ΡΠΎΡ ΡΠ΅ΠΊΡΡΠ΅ΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ Π²ΡΠ²ΠΎΠ΄Π° ΠΈ ΠΏΠ΅ΡΡΠΏΠ΅ΠΊΡΠΈΠ²Π½ΡΡ
ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠΉ
glMatrixMode(GL_PROJECTION); // ΠΡΠ±ΠΎΡ ΠΌΠ°ΡΡΠΈΡΡ ΠΏΡΠΎΠ΅ΠΊΡΠΈΠΉ
glLoadIdentity(); // Π‘Π±ΡΠΎΡ ΠΌΠ°ΡΡΠΈΡΡ ΠΏΡΠΎΠ΅ΠΊΡΠΈΠΈ
gluPerspective(45.0f,(GLfloat)Width/(GLfloat)Height,0.1f,100.0f);
// ΠΡΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ ΡΠΎΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΡ Π³Π΅ΠΎΠΌΠ΅ΡΡΠΈΡΠ΅ΡΠΊΠΈΡ
ΡΠ°Π·ΠΌΠ΅ΡΠΎΠ² Π΄Π»Ρ ΠΎΠΊΠ½Π°
glMatrixMode(GL_MODELVIEW); // ΠΡΠ±ΠΎΡ ΠΌΠ°ΡΡΠΈΡΡ ΠΏΡΠΎΡΠΌΠΎΡΡΠ° ΠΌΠΎΠ΄Π΅Π»ΠΈ
>
Π ΡΡΠΎΠΉ ΡΠ΅ΠΊΡΠΈΠΈ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡΡΡ Π²Π΅ΡΡ ΠΊΠΎΠ΄ Π΄Π»Ρ ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ. ΠΡΠ΅, ΡΡΠΎ Π²Ρ ΠΏΠ»Π°Π½ΠΈΡΡΠ΅ΡΠ΅ Π΄Π»Ρ ΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ Π½Π° ΡΠΊΡΠ°Π½Π΅, Π±ΡΠ΄Π΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡΡ Π² ΡΡΠΎΠΉ ΡΠ΅ΠΊΡΠΈΠΈ ΠΊΠΎΠ΄Π°. Π ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΡΡΠΎΠΊΠ΅, ΠΏΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ Π±ΡΠ΄Π΅Ρ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ ΠΊΠΎΠ΄ Π² ΡΡΡ ΡΠ΅ΠΊΡΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΡΠ»ΠΈ Π²Ρ ΡΠΆΠ΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅ΡΠ΅ OpenGL, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΠΏΡΠΎΠ±ΠΎΠ²Π°ΡΡ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π² ΠΊΠΎΠ΄ ΠΏΡΠΎΡΡΠ΅ΠΉΡΠΈΠ΅ ΡΠΎΡΠΌΡ Π½Π° OpenGL, Π½ΠΈΠΆΠ΅ Π²ΡΠ·ΠΎΠ²Π° glLoadIdentity(). ΠΡΠ»ΠΈ Π²Ρ Π½ΠΎΠ²ΠΈΡΠΎΠΊ Π² OpenGL, ΠΏΠΎΠ΄ΠΎΠΆΠ΄ΠΈΡΠ΅ Π΄ΠΎ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π³ΠΎ ΠΌΠΎΠ΅Π³ΠΎ ΡΡΠΎΠΊΠ°. Π‘Π΅ΠΉΡΠ°Ρ Π²ΡΠ΅ ΡΡΠΎ ΠΌΡ ΡΠ΄Π΅Π»Π°Π΅ΠΌ, ΡΡΠΎ ΠΎΡΠΈΡΡΠΊΠ° ΡΠΊΡΠ°Π½Π° ΡΠ²Π΅ΡΠΎΠΌ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΠ»ΠΈ Π²ΡΡΠ΅, ΠΎΡΠΈΡΡΠΊΠ° Π±ΡΡΠ΅ΡΠ° Π³Π»ΡΠ±ΠΈΠ½Ρ ΠΈ ΡΠ±ΡΠΎΡ ΡΡΠ΅Π½Ρ.
Opengl code
Π‘Π»Π΅Π΄ΡΡΡΠ°Ρ ΡΠ΅ΠΊΡΠΈΡ ΠΊΠΎΠ΄Π° Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π²Π°ΠΆΠ½Π°Ρ ΡΠ΅ΠΊΡΠΈΡ Π² ΡΡΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅. ΠΡΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΠΎΠΊΠ½Π° Windows, ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΡΠΎΡΠΌΠ°ΡΠ° ΠΏΠΈΠΊΡΠ΅Π»Ρ, ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΏΡΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΡΠ°Π·ΠΌΠ΅ΡΠΎΠ², ΠΏΡΠΈ Π½Π°ΠΆΠ°ΡΠΈΠΈ Π½Π° ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΡ, ΠΈ Π·Π°ΠΊΡΡΡΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.
OpenGL code
ΠΠΎΠ΄ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠΊΠΎΠ±ΠΊΠ°ΠΌΠΈ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ ΡΠΎΡΠΌΠ°Ρ ΠΏΠΈΠΊΡΠ΅Π»Π΅ΠΉ. Π― ΠΏΡΠ΅Π΄ΠΏΠΎΡΠΈΡΠ°Ρ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ΅ΠΆΠΈΠΌ ΠΈΠ½Π΄Π΅ΠΊΡΠ°ΡΠΈΠΈ ΡΠ²Π΅ΡΠ°. ΠΡΠ»ΠΈ Π²Ρ Π½Π΅ Π·Π½Π°Π΅ΡΠ΅, ΡΡΠΎ ΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, Π½Π΅ Π·Π°Π±ΠΎΡΡΡΠ΅ΡΡ ΠΎΠ± ΡΡΠΎΠΌ. Π€ΠΎΡΠΌΠ°Ρ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ ΠΏΠΈΠΊΡΠ΅Π»Ρ ΠΎΠΏΠΈΡΡΠ²Π°Π΅Ρ, ΠΊΠ°ΠΊ OpenGL Π±ΡΠ΄Π΅Ρ Π²ΡΠ²ΠΎΠ΄ΠΈΡΡ Π² ΠΎΠΊΠ½ΠΎ. ΠΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ ΠΊΠΎΠ΄Π° ΠΈΠ³Π½ΠΎΡΠΈΡΡΠ΅ΡΡΡ, Π½ΠΎ Π·Π°ΡΠ°ΡΡΡΡ ΡΡΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ. Π― Π±ΡΠ΄Ρ ΠΏΠΎΠΌΠ΅ΡΠ°ΡΡ ΠΊΠΎΡΠΎΡΠΊΠΈΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ. ΠΠ½Π°ΠΊ Π²ΠΎΠΏΡΠΎΡΠ° ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Ρ Π½Π΅ ΡΠ²Π΅ΡΠ΅Π½, ΡΡΠΎ ΡΡΠΎ ΡΡΡΠΎΠΊΠ° ΠΊΠΎΠ΄Π° Π΄Π΅Π»Π°Π΅Ρ (Ρ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ΅Π»ΠΎΠ²Π΅ΠΊ!).
OpenGL code
OpenGl code
WM_CREATE ΡΠΎΠΎΠ±ΡΠ°Π΅Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅, ΡΡΠΎ ΠΎΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ ΡΠΎΠ·Π΄Π°Π½ΠΎ. ΠΠ½Π°ΡΠ°Π»Π΅ ΠΌΡ Π·Π°ΠΏΡΠΎΡΠΈΠΌ DC (ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ ΡΡΡΡΠΎΠΉΡΡΠ²Π°) Π΄Π»Ρ Π²Π°ΡΠ΅Π³ΠΎ ΠΎΠΊΠ½Π°. ΠΠΎΠΌΠ½ΠΈΡΠ΅, Π±Π΅Π· Π½Π΅Π³ΠΎ ΠΌΡ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΈΡΠΎΠ²Π°ΡΡ Π² ΠΎΠΊΠ½ΠΎ. ΠΠ°ΡΠ΅ΠΌ ΠΌΡ Π·Π°ΠΏΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΡΠΎΡΠΌΠ°Ρ ΠΏΠΈΠΊΡΠ΅Π»Ρ. ΠΠΎΠΌΠΏΡΡΡΠ΅Ρ Π±ΡΠ΄Π΅Ρ Π²ΡΠ±ΠΈΡΠ°ΡΡ ΡΠΎΡΠΌΠ°Ρ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΎΠ²ΠΏΠ°Π΄Π°Π΅Ρ ΠΈΠ»ΠΈ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π±Π»ΠΈΠ·ΠΎΠΊ ΠΊ ΡΠΎΡΠΌΠ°ΡΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΡ Π·Π°ΠΏΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ. Π― Π½Π΅ Π΄Π΅Π»Π°Ρ Π·Π΄Π΅ΡΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° ΠΏΡΠΎΠ²Π΅ΡΠΎΠΊ Π½Π° ΠΎΡΠΈΠ±ΠΊΠΈ, ΡΡΠΎΠ±Ρ ΡΠΎΠΊΡΠ°ΡΠΈΡΡ ΠΊΠΎΠ΄, Π½ΠΎ ΡΡΠΎ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ. ΠΡΠ»ΠΈ ΡΡΠΎ-ΡΠΎ Π½Π΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ, Ρ ΠΏΡΠΎΡΡΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠΉ ΠΊΠΎΠ΄. ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π²Ρ Π·Π°Ρ ΠΎΡΠΈΡΠ΅ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ, ΠΊΠ°ΠΊ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π΄ΡΡΠ³ΠΈΠ΅ ΡΠΎΡΠΌΠ°ΡΡ ΠΏΠΈΠΊΡΠ΅Π»Π΅ΠΉ.
OpenGL code
ΠΡΠ»ΠΈ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠΈΠΉ ΡΠΎΡΠΌΠ°Ρ ΠΏΠΈΠΊΡΠ΅Π»Ρ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π½Π°ΠΉΠ΄Π΅Π½, Π±ΡΠ΄Π΅Ρ Π²ΡΠ²Π΅Π΄Π΅Π½ΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅ Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅ΠΌ ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅ΠΌ. ΠΠ½ΠΎ Π±ΡΠ΄Π΅Ρ ΠΆΠ΄Π°ΡΡ, ΠΊΠΎΠ³Π΄Π° Π²Ρ Π½Π°ΠΆΠΌΠ΅ΡΠ΅ Π½Π° OK, Π΄ΠΎ Π²ΡΡ ΠΎΠ΄Π° ΠΈΠ· ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.
OpenGL code
ΠΡΠ»ΠΈ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠΈΠΉ ΡΠΎΡΠΌΠ°Ρ Π½Π°ΠΉΠ΄Π΅Π½, ΠΊΠΎΠΌΠΏΡΡΡΠ΅Ρ Π±ΡΠ΄Π΅Ρ ΠΏΡΡΠ°ΡΡΡΡ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΡΠΎΡΠΌΠ°Ρ ΠΏΠΈΠΊΡΠ΅Π»Ρ Π΄Π»Ρ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° ΡΡΡΡΠΎΠΉΡΡΠ²Π°. ΠΡΠ»ΠΈ ΡΠΎΡΠΌΠ°Ρ ΠΏΠΈΠΊΡΠ΅Π»Ρ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ ΠΏΠΎ ΠΊΠ°ΠΊΠΎΠΉ-ΡΠΎ ΠΏΡΠΈΡΠΈΠ½Π΅, Π²ΡΡΠΊΠΎΡΠΈΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅, ΡΡΠΎ ΡΠΎΡΠΌΠ°Ρ ΠΏΠΈΠΊΡΠ΅Π»Ρ Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½, ΠΈ Π±ΡΠ΄Π΅Ρ ΠΎΠΆΠΈΠ΄Π°ΡΡ, ΠΏΠΎΠΊΠ° ΠΡ Π½Π΅ Π½Π°ΠΆΠΌΠ΅ΡΠ΅ ΠΊΠ½ΠΎΠΏΠΊΡ OK, Π΄ΠΎ Π²ΡΡ ΠΎΠ΄Π° ΠΈΠ· ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.
OpenGL code
ΠΡΠ»ΠΈ ΠΊΠΎΠ΄ ΡΠ΄Π΅Π»Π°Π½, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π²ΡΡΠ΅, Π±ΡΠ΄Π΅Ρ ΡΠΎΠ·Π΄Π°Π½ DC (ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ ΡΡΡΡΠΎΠΉΡΡΠ²Π°), ΠΈ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠΈΠΉ ΡΠΎΡΠΌΠ°Ρ ΠΏΠΈΠΊΡΠ΅Π»Ρ. Π‘Π΅ΠΉΡΠ°Ρ ΠΌΡ ΡΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΠΠΎΠ½ΡΠ΅ΠΊΡΡ Π Π΅Π½Π΄Π΅ΡΠΈΠ½Π³Π°, Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ OpenGL ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ DC. wglCreateContext Π±ΡΠ΄Π΅Ρ Π·Π°Ρ Π²Π°ΡΡΠ²Π°ΡΡ ΠΠΎΠ½ΡΠ΅ΠΊΡΡ Π Π΅Π½Π΄Π΅ΡΠΈΠ½Π³Π° ΠΈ ΡΠΎΡ ΡΠ°Π½ΡΡΡ Π΅Π³ΠΎ Π² ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ hRC. ΠΡΠ»ΠΈ ΠΏΠΎ ΠΊΠ°ΠΊΠΎΠΉ-ΡΠΎ ΠΏΡΠΈΡΠΈΠ½Π΅ ΠΠΎΠ½ΡΠ΅ΠΊΡΡ Π Π΅Π½Π΄Π΅ΡΠΈΠ½Π³Π° Π½Π΅ Π΄ΠΎΡΡΡΠΏΠ΅Π½, Π²ΡΡΠΊΠΎΡΠΈΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅. ΠΠ°ΠΆΠΌΠΈΡΠ΅ OK Π΄Π»Ρ Π²ΡΠ·ΠΎΠ²Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.
OpenGL code
Π‘Π΅ΠΉΡΠ°Ρ ΠΌΡ ΠΈΠΌΠ΅Π΅ΠΌ ΠΠΎΠ½ΡΠ΅ΠΊΡΡ Π Π΅Π½Π΄Π΅ΡΠΈΠ½Π³Π°, ΠΈ Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ΄Π΅Π»Π°ΡΡ Π΅Π³ΠΎ Π°ΠΊΡΠΈΠ²Π½ΡΠΌ, Π΄Π»Ρ ΡΠΎΠ³ΠΎ ΡΡΠΎΠ±Ρ OpenGL ΠΌΠΎΠ³ ΡΠΈΡΠΎΠ²Π°ΡΡ Π² ΠΎΠΊΠ½ΠΎ. Π‘Π½ΠΎΠ²Π°, Π΅ΡΠ»ΠΈ ΠΏΠΎ Π½Π΅ ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΏΡΠΈΡΠΈΠ½Π΅ ΡΡΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ΄Π΅Π»Π°Π½ΠΎ, Π²ΡΡΠΊΠΎΡΠΈΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅. ΠΠ»ΠΈΠΊΠ½ΠΈΡΠ΅ OK Π² ΠΎΠΊΠΎΡΠΊΠ΅ ΠΎΡΠΈΠ±ΠΊΠΈ Π΄Π»Ρ Π²ΡΡ ΠΎΠ΄Π° ΠΈΠ· ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.
OpenGl code
ΠΡΠ»ΠΈ Π²ΡΠ΅ ΠΏΡΠΎΡΠ»ΠΎ ΡΠ΄Π°ΡΠ½ΠΎ, ΡΠΎ Ρ Π½Π°Ρ Π΅ΡΡΡ Π²ΡΠ΅ Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΡΠΎΠ·Π΄Π°ΡΡ ΠΎΠ±Π»Π°ΡΡΡ ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ OpenGL. GetClientRect Π²ΠΎΠ·Π²ΡΠ°ΡΠΈΡ Π½Π°ΠΌ ΡΠΈΡΠΈΠ½Ρ ΠΈ Π²ΡΡΠΎΡΡ ΠΎΠΊΠ½Π°. ΠΡ Π·Π°ΠΏΠΎΠΌΠ½ΠΈΠΌ ΡΠΈΡΠΈΠ½Ρ ΡΠΏΡΠ°Π²Π°, ΠΈ Π²ΡΡΠΎΡΡ ΡΠ½ΠΈΠ·Ρ. ΠΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ ΠΊΠ°ΠΊ ΠΌΡ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΈ ΡΠΈΡΠΈΠ½Ρ ΠΈ Π²ΡΡΠΎΡΡ, ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΠΌ ΡΠΊΡΠ°Π½ OpenGL. ΠΡ Π΄Π΅Π»Π°Π΅ΠΌ ΡΡΠΎ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ Π²ΡΠ·ΠΎΠ²Π° InitGL, ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°Ρ Π² ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°Ρ ΠΏΡΠ°Π²ΠΎ ΠΈ Π½ΠΈΠ· (ΡΠΈΡΠΈΠ½Ρ ΠΈ Π²ΡΡΠΎΡΡ).
OpenGL code
WM_DESTROY ΠΈ WM_CLOSE ΠΎΡΠ΅Π½Ρ ΠΏΠΎΡ ΠΎΠΆΠΈ. ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π±ΡΠ΄Π΅Ρ ΠΏΠΎΡΡΠ»Π°ΡΡ ΡΡΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π·, ΠΊΠΎΠ³Π΄Π° Π²Ρ Π²ΡΡ ΠΎΠ΄ΠΈΡΠ΅ ΠΈΠ· ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, Π½Π°ΠΆΠ°Π² ALT-F4, ΠΈΠ»ΠΈ Π΅ΡΠ»ΠΈ Π²Ρ ΠΏΠΎΡΠ»Π°Π»ΠΈ PostQuitMessage(0) ΡΠ°ΠΊΠΆΠ΅ ΠΊΠ°ΠΊ ΠΌΡ Π΄Π΅Π»Π°Π»ΠΈ, ΠΊΠΎΠ³Π΄Π° ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΠ»Π° ΠΎΡΠΈΠ±ΠΊΠ°.
ChangeDisplaySettings(NULL,0) Π±ΡΠ΄Π΅Ρ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ°ΡΡ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΡΠ°Π±ΠΎΡΠ΅Π³ΠΎ ΡΡΠΎΠ»Π° ΠΎΠ±ΡΠ°ΡΠ½ΠΎ, Π΄Π΅Π»Π°Ρ Π΅Π³ΠΎ ΡΠ°ΠΊΠΈΠΌ, ΠΊΠ°ΠΊΠΈΠΌ ΠΌΡ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ°Π»ΠΈΡΡ ΠΈΠ· Π½Π΅Π³ΠΎ Π² ΠΏΠΎΠ»Π½ΠΎΡΠΊΡΠ°Π½Π½ΡΠΉ ΡΠ΅ΠΆΠΈΠΌ. ReleaseDC(hWnd,hDC) ΡΠ½ΠΈΡΡΠΎΠΆΠ°Π΅Ρ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ ΡΡΡΡΠΎΠΉΡΡΠ²Π° ΠΎΠΊΠ½Π°. ΠΠΎ ΡΡΡΠ΅ΡΡΠ²Ρ ΡΡΠΎ ΡΠ½ΠΈΡΡΠΎΠΆΠ°Π΅Ρ ΠΎΠΊΠ½ΠΎ OpenGL.
OpenGl code
case WM_DESTROY:
case WM_CLOSE:
ChangeDisplaySettings(NULL, 0);
wglMakeCurrent(hDC,NULL);
wglDeleteContext(hRC);
ReleaseDC(hWnd,hDC);
WM_KEYDOWN Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ Π²ΡΡΠΊΠΈΠΉ ΡΠ°Π· ΠΏΡΠΈ Π½Π°ΠΆΠ°ΡΠΈΠΈ ΠΊΠ»Π°Π²ΠΈΡΠΈ. ΠΠ»Π°Π²ΠΈΡΠ°, ΠΊΠΎΡΠΎΡΠ°Ρ Π±ΡΠ»Π° Π½Π°ΠΆΠ°ΡΠ°, ΡΠΎΡ ΡΠ°Π½ΡΠ΅ΡΡΡ Π² ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ wParam. ΠΡΠ°ΠΊ, ΡΡΠΎ ΠΆΠ΅ Π΄Π΅Π»Π°Π΅Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΊΠΎΠ΄. Π‘ΠΊΠ°ΠΆΠ΅ΠΌ, Ρ Π½Π°ΠΆΠ°Π» ‘A’. ΠΡΠΊΠ²Π° ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ β ΡΡΠΎ ΡΠΈΡΠ»ΠΎ, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π΅Π΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ. ΠΠΎΡΡΠΎΠΌΡ Π² ΡΡΠ΅ΠΉΠΊΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ‘A’ Π·Π°Π½ΠΎΡΠΈΡΡΡ TRUE. ΠΠΎΠ·Π΄Π½Π΅Π΅, Π² ΠΊΠΎΠ΄Π΅, Π΅ΡΠ»ΠΈ Ρ ΠΏΡΠΎΠ²Π΅ΡΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΡΡΠ΅ΠΉΠΊΠΈ ΠΈ ΡΠ²ΠΈΠΆΡ TRUE, ΡΠΎ Ρ Π·Π½Π°Ρ, ΡΡΠΎ ΠΊΠ»Π°Π²ΠΈΡΠ° ‘A’ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π² ΡΡΠΎΡ ΠΌΠΎΠΌΠ΅Π½Ρ Π½Π°ΠΆΠ°ΡΠ°.
OpenGL code
WM_KEYUP Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ Π²ΡΡΠΊΠΈΠΉ ΡΠ°Π·, ΠΊΠΎΠ³Π΄Π° ΠΊΠ»Π°Π²ΠΈΡΠ° ΠΎΡΠΏΡΡΠΊΠ°Π΅ΡΡΡ. ΠΠ»Π°Π²ΠΈΡΠ°, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΎΡΠΆΠ°ΡΠ°, ΡΠ°ΠΊΠΆΠ΅ ΡΠΎΡ ΡΠ°Π½ΡΠ΅ΡΡΡ Π² ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ wParam. ΠΠΎΡΡΠΎΠΌΡ, ΠΊΠΎΠ³Π΄Π° Ρ ΠΎΡΠΏΡΡΠΊΠ°Ρ ΠΊΠ»Π°Π²ΠΈΡΡ ‘A’, ΡΡΠΎ Π΄Π΅Π»Π°Π΅Ρ ΡΡΠ΅ΠΉΠΊΡ Π΄Π»Ρ ΠΊΠ»Π°Π²ΠΈΡΠΈ ‘A’ ΡΠ°Π²Π½ΠΎΠΉ FALSE. ΠΠΎΠ³Π΄Π° Ρ ΠΏΡΠΎΠ²Π΅ΡΡ ΡΡΠ΅ΠΉΠΊΡ, Π΄Π»Ρ ΡΠΎΠ³ΠΎ ΡΡΠΎΠ±Ρ ΡΠ²ΠΈΠ΄Π΅ΡΡ Π½Π°ΠΆΠ°ΡΠ° Π»ΠΈ ΠΊΠ»Π°Π²ΠΈΡΠ° ‘A’, ΠΎΠ½Π° Π²Π΅ΡΠ½Π΅Ρ FALSE, ΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ «Π½Π΅Ρ, ΠΎΠ½Π° Π½Π΅ Π½Π°ΠΆΠ°ΡΠ°».
OpenGL code
OpenGL code
ΠΠ°ΡΠ΅ΠΌ, Π΄Π°Π΄ΠΈΠΌ Windows ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°ΡΡ Π²ΡΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΡ Π½Π΅ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΠΌ ΠΈ Π·Π°Π²Π΅ΡΡΠΈΠΌ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ.
OpenGL code
ΠΡΠΎ ΡΠΎ ΠΌΠ΅ΡΡΠΎ, Π³Π΄Π΅ Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°, Π³Π΄Π΅ ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ ΠΎΠΊΠ½ΠΎ, Π³Π΄Π΅ Π΄Π΅Π»Π°Π΅ΡΡΡ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π²ΡΠ΅, ΠΊΡΠΎΠΌΠ΅ ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ. ΠΡ Π½Π°ΡΠΈΠ½Π°Π΅ΠΌ Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΎΠΊΠ½Π°.
OpenGL code
OpenGL code
Π‘Π΅ΠΉΡΠ°Ρ ΠΌΡ ΡΠ΅Π³ΠΈΡΡΡΠΈΡΡΠ΅ΠΌ ΠΊΠ»Π°ΡΡ. ΠΡΠ»ΠΈ ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»Π° ΠΎΡΠΈΠ±ΠΊΠ°, ΠΏΠΎΡΠ²ΠΈΡΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅Π΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅. ΠΠ»ΠΈΠΊΠ½ΠΈΡΠ΅ Π½Π° OK Π½Π° ΠΎΠΊΠ½ΠΎ Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅ ΠΈ Π±ΡΠ΄Π΅ΡΠ΅ Π²ΡΠΊΠΈΠ½ΡΡΡ ΠΈΠ· ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.
OpenGL code
Π‘Π΅ΠΉΡΠ°Ρ ΠΌΡ ΡΠ΄Π΅Π»Π°Π΅ΠΌ ΠΎΠΊΠ½ΠΎ. ΠΠ΅ ΡΠΌΠΎΡΡΡ Π½Π° ΡΠΎ, ΡΡΠΎ ΠΌΡ Π΄Π΅Π»Π°Π΅ΠΌ ΠΎΠΊΠ½ΠΎ Π·Π΄Π΅ΡΡ, ΡΡΠΎ Π½Π΅ Π²ΡΠ·ΠΎΠ²Π΅Ρ OpenGL Π΄ΠΎ ΡΠ΅Ρ ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ WM_CREATE Π½Π΅ ΠΏΠΎΡΠ»Π°Π½ΠΎ. Π€Π»Π°Π³ΠΈ WS_CLIPCHILDREN ΠΈ WS_CLIPSIBLINGS ΡΡΠ΅Π±ΡΡΡΡΡ Π΄Π»Ρ OpenGL. ΠΡΠ΅Π½Ρ Π²Π°ΠΆΠ½ΠΎ, ΡΡΠΎΠ±Ρ Π²Ρ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ ΠΈΡ Π·Π΄Π΅ΡΡ. Π― Π»ΡΠ±Π»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π²ΡΠΏΠ»ΡΠ²Π°ΡΡΠ΅Π΅ ΠΎΠΊΠ½ΠΎ, ΠΎΠ½ΠΎ Ρ ΠΎΡΠΎΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π² ΠΏΠΎΠ»Π½ΠΎΡΠΊΡΠ°Π½Π½ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅.
OpenGl code
WS_POPUP |
WS_CLIPCHILDREN |
WS_CLIPSIBLINGS,
0, 0, // ΠΠΎΠ·ΠΈΡΠΈΡ ΠΎΠΊΠ½Π° Π½Π° ΡΠΊΡΠ°Π½Π΅
640, 480, // Π¨ΠΈΡΠΈΠ½Π° ΠΈ Π²ΡΡΠΎΡΠ° ΠΎΠΊΠ½Π°
NULL,
NULL,
hInstance,
NULL);
OpenGL code
Π― Π½Π΅ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Ρ Π³Π»ΡΠ±ΠΈΠ½Ρ ΡΠ²Π΅ΡΠ°, ΠΊΠΎΠ³Π΄Π° Ρ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ°Ρ ΠΏΠΎΠ»Π½ΠΎΡΠΊΡΠ°Π½Π½ΡΠΉ ΡΠ΅ΠΆΠΈΠΌ. ΠΡΡΠΊΠΈΠΉ ΡΠ°Π·, ΠΊΠΎΠ³Π΄Π° Ρ ΠΏΡΠΎΠ±ΠΎΠ²Π°Π» ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ°ΡΡ Π³Π»ΡΠ±ΠΈΠ½Ρ ΡΠ²Π΅ΡΠ°, Ρ ΠΏΠΎΠ»ΡΡΠ°Π» ΡΠ²Π΅ΡΡ ΡΠ΅ΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΡΠ΅ Π·Π°ΠΏΡΠΎΡΡ ΠΎΡ Windows ΡΡΠΎΠ±Ρ ΡΠ΄Π΅Π»Π°ΡΡ ΠΏΠ΅ΡΠ΅Π·Π°Π³ΡΡΠ·ΠΊΡ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ° Π΄Π»Ρ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΡΠ΅ΠΆΠΈΠΌΠ° ΡΠ²Π΅ΡΠ°. Π― Π½Π΅ ΡΠ²Π΅ΡΠ΅Π½, Π½Π°Π΄ΠΎ Π»ΠΈ ΡΠ΄ΠΎΠ²Π»Π΅ΡΠ²ΠΎΡΡΡΡ ΡΡΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅, Π½ΠΎ Ρ ΡΠ΅ΡΠΈΠ» ΠΎΡΡΠ°Π²Π»ΡΡΡ ΠΊΠΎΠΌΠΏΡΡΡΠ΅Ρ Ρ ΡΠΎΠΉ Π³Π»ΡΠ±ΠΈΠ½ΠΎΠΉ ΡΠ²Π΅ΡΠ°, ΠΊΠΎΡΠΎΡΠ°Ρ Π±ΡΠ»Π° Π΄ΠΎ Π·Π°ΠΏΡΡΠΊΠ° GL ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.
OpenGL code
DEVMODE dmScreenSettings; // Π Π΅ΠΆΠΈΠΌ ΡΠ°Π±ΠΎΡΡ
memset(&dmScreenSettings, 0, sizeof(DEVMODE)); // ΠΡΠΈΡΡΠΊΠ° Π΄Π»Ρ Ρ
ΡΠ°Π½Π΅Π½ΠΈΡ ΡΡΡΠ°Π½ΠΎΠ²ΠΎΠΊ
dmScreenSettings.dmSize = sizeof(DEVMODE); // Π Π°Π·ΠΌΠ΅Ρ ΡΡΡΡΠΊΡΡΡΡ Devmode
dmScreenSettings.dmPelsWidth = 640; // Π¨ΠΈΡΠΈΠ½Π° ΡΠΊΡΠ°Π½Π°
dmScreenSettings.dmPelsHeight = 480; // ΠΡΡΠΎΡΠ° ΡΠΊΡΠ°Π½Π°
dmScreenSettings.dmFields = DM_PELSWIDTH | DM_PELSHEIGHT; // Π Π΅ΠΆΠΈΠΌ ΠΠΈΠΊΡΠ΅Π»Π°
ChangeDisplaySettings(&dmScreenSettings, CDS_FULLSCREEN);
// ΠΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π² ΠΏΠΎΠ»Π½ΡΠΉ ΡΠΊΡΠ°Π½
OpenGL code
OpenGL code
SwapBuffers(hDC) ΠΎΡΠ΅Π½Ρ Π²Π°ΠΆΠ½Π°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π°. ΠΡ ΠΈΠΌΠ΅Π΅ΠΌ ΠΎΠΊΠ½ΠΎ Ρ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΠΎΠΉ Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ Π±ΡΡΠ΅ΡΠΈΠ·Π°ΡΠΈΠ΅ΠΉ. ΠΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΡΠΈΡΡΠ΅ΡΡΡ Π½Π° ΡΠΊΡΡΡΠΎΠΌ ΠΎΠΊΠ½Π΅ (Π½Π°Π·ΡΠ²Π°Π΅ΠΌΡΠΌ Π±ΡΡΠ΅ΡΠΎΠΌ). ΠΠ°ΡΠ΅ΠΌ, ΠΌΡ Π³ΠΎΠ²ΠΎΡΠΈΠΌ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΡ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠΈΡΡ Π±ΡΡΠ΅ΡΠ°, ΡΠΊΡΡΡΡΠΉ Π±ΡΡΠ΅Ρ ΠΊΠΎΠΏΠΈΡΡΠ΅ΡΡΡ Π½Π° ΡΠΊΡΠ°Π½. ΠΡΠΈ ΡΡΠΎΠΌ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΡΡ ΠΏΠ»Π°Π²Π½Π°Ρ Π°Π½ΠΈΠΌΠ°ΡΠΈΡ Π±Π΅Π· ΡΡΠ²ΠΊΠΎΠ², ΠΈ Π·ΡΠΈΡΠ΅Π»Ρ Π½Π΅ Π·Π°ΠΌΠ΅ΡΠ°Π΅Ρ ΠΎΡΡΠΈΡΠΎΠ²ΠΊΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ².
OpenGL code
Π ΡΡΠΎΠΌ ΡΡΠΎΠΊΠ΅ Ρ ΠΏΠΎΠΏΡΡΠ°Π»ΡΡ ΠΎΠ±ΡΡΡΠ½ΠΈΡΡ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π±ΠΎΠ»ΡΡΠ΅ Π΄Π΅ΡΠ°Π»Π΅ΠΉ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ°Π³Π° Π·Π°ΠΏΡΡΠ°Π½Π½ΠΎΠΉ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ, ΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π²Π°ΡΠΈΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΡ ΠΏΠΎΠ»Π½ΠΎΡΠΊΡΠ°Π½Π½ΡΡ OpenGL ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ, ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ΄ΡΡ Π·Π°Π²Π΅ΡΡΠ°ΡΡΡΡ ΠΏΡΠΈ Π½Π°ΠΆΠ°ΡΠΈΠΈ ESC. Π― ΠΏΠΎΡΡΠ°ΡΠΈΠ» 3 Π΄Π½Ρ ΠΈ 13 ΡΠ°ΡΠΎΠ² Π΄Π»Ρ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ ΡΡΠΎΠ³ΠΎ ΡΡΠΎΠΊΠ°. ΠΡΠ»ΠΈ Π²Ρ ΠΈΠΌΠ΅Π΅ΡΠ΅ Π»ΡΠ±ΡΠ΅ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ ΠΈΠ»ΠΈ Π²ΠΎΠΏΡΠΎΡΡ, ΠΏΠΎΠΆΠ°Π»ΡΠΉΡΡΠ°, ΠΏΠΎΡΠ»ΠΈΡΠ΅ ΠΈΡ ΠΌΠ½Π΅ ΠΏΠΎ ΡΠ»Π΅ΠΊΡΡΠΎΠ½Π½ΠΎΠΉ ΠΏΠΎΡΡΠ΅. ΠΡΠ»ΠΈ Π²Ρ ΠΎΡΡΡΠ°Π΅ΡΠ΅, ΡΡΠΎ Ρ Π½Π΅ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π» ΡΡΠΎ-ΡΠΎ ΠΈΠ»ΠΈ ΡΡΠΎ ΠΊΠΎΠ΄ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ Π»ΡΡΡΠ΅ Π² Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΡΠ΅ΠΊΡΠΈΡΡ ΠΏΠΎ Π½Π΅ΠΊΠΎΡΠΎΡΡΠΌ ΠΏΡΠΈΡΠΈΠ½Π°ΠΌ, ΠΏΠΎΠΆΠ°Π»ΡΠΉΡΡΠ°, Π΄Π°ΠΉΡΠ΅ ΠΌΠ½Π΅ Π·Π½Π°ΡΡ. Π― Ρ ΠΎΡΡ ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠΎΠΊΠΈ ΠΏΠΎ OpenGL Ρ ΠΎΡΠΎΡΠΈΠΌΠΈ Π½Π°ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΌΠΎΠ³Ρ. Π― Π·Π°ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠΎΠ²Π°Π½ Π² ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠΉ ΡΠ²ΡΠ·ΠΈ.
ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΡΠΈΠΊΠ°: ΠΈΡΡ ΠΎΠ΄Π½ΡΠ΅ ΠΊΠΎΠ΄Ρ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΡΡΠΎΠΊΠ° ΠΈ Π΄ΡΡΠ³ΠΈΡ ΡΡΠΎΠΊΠΎΠ², Π΅ΡΡΡ Π½Π° ΡΠ°ΠΉΡΠ΅ NeHe. Π§ΡΠΎΠ±Ρ Π½Π°ΠΉΡΠΈ ΠΈΡ , ΠΠ°ΠΌ Π½Π°Π΄ΠΎ ΠΏΠ΅ΡΠ΅ΠΉΡΠΈ Π½Π° ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»ΡΠ½ΡΠΉ ΡΡΠΎΠΊ ΠΏΠΎ ΡΡΡΠ»ΠΊΠ΅, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½Π° Π²Π½Π°ΡΠ°Π»Π΅ ΡΠ΅ΠΊΡΡΠ° Π»ΡΠ±ΠΎΠ³ΠΎ ΠΏΠ΅ΡΠ΅Π²Π΅Π΄Π΅Π½Π½ΠΎΠ³ΠΎ ΡΡΠΎΠΊΠ°. ΠΠ°ΡΠ΅ΠΌ, Π½Π°Π΄ΠΎ ΠΏΠ΅ΡΠ΅ΠΉΡΠΈ Π² ΠΊΠΎΠ½Π΅Ρ ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»ΡΠ½ΠΎΠ³ΠΎ (Π°Π½Π³Π»ΠΎΡΠ·ΡΡΠ½ΠΎΠ³ΠΎ) ΡΡΠΎΠΊΠ° ΠΈ ΡΠ°ΠΌ Π½Π°ΠΉΡΠΈ ΡΡΡΠ»ΠΊΠΈ Π½Π° Π½ΡΠΆΠ½ΡΠΉ Π°ΡΡ ΠΈΠ² Ρ Π½ΡΠΆΠ½ΡΠΌ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΌ ΠΊΠΎΠ΄ΠΎΠΌ, Π΄Π»Ρ ΡΠ²ΠΎΠ΅Π³ΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°, ΠΈΠ»ΠΈ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ, ΠΈΠ»ΠΈ ΡΠ·ΡΠΊΠ° (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Delphi). ΠΠΎΠΌΠ΅ΡΡΠΈΡΡ Π²ΡΠ΅ ΠΈΡΡ ΠΎΠ΄Π½ΡΠ΅ ΠΊΠΎΠ΄Ρ Π΄Π»Ρ ΡΡΠΎΠΊΠΎΠ² NeHe Π½Π° ΡΡΠΎΠΌ ΡΠ°ΠΉΡΠ΅, ΠΏΡΠΎΡΡΠΎ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ!
ΠΡΠ΅ ΠΎΠ΄Π½ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΡΠΈΠΊΠ°: Π² ΡΠ²ΡΠ·ΠΈ Ρ ΡΠ΅ΠΌ, ΡΡΠΎ NeHe ΠΈΠ½ΠΎΠ³Π΄Π° ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅Ρ ΡΡΠΎΠΊΠΈ, Π½ΠΎ ΠΏΡΠΈ ΡΡΠΎΠΌ Π½Π΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΏΠΎΠ½ΡΡΡ ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ ΡΡΠΎ ΡΠ΄Π΅Π»Π°Π» (Π½Π΅Ρ Π΄Π°ΡΡ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π³ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΡΠΎΠΊΠ°), ΡΠΎ Π±ΡΠ²Π°Π΅Ρ ΡΠ°ΠΊ, ΡΡΠΎ ΡΠ΅ΠΊΡΡ ΠΏΠ΅ΡΠ΅Π²Π΅Π΄Π΅Π½Π½ΡΡ ΡΡΠΎΠΊΠΎΠ² Π½Π΅Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΎΡΠ»ΠΈΡΠ°Π΅ΡΡΡ ΠΎΡ ΡΠ΅ΠΊΡΡΠΈΡ ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»ΡΠ½ΡΡ ΡΡΠΎΠΊΠΎΠ². ΠΠ΅ ΠΏΡΠ³Π°ΠΉΡΠ΅ΡΡ ΡΡΠΎΠ³ΠΎ, ΡΠΌΡΡΠ» ΡΡΠΎΠΊΠ° ΠΏΡΠΈ ΡΡΠΎΠΌ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π½Π΅ ΠΌΠ΅Π½ΡΠ΅ΡΡΡ.








