Как ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ opengl ΠΊ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρƒ

ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ OpenGL Π² Visual Studio 2010

ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ OpenGL Π½Π° Visual Studio 2010

Как ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ opengl ΠΊ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρƒ
ΠŸΠ΅Ρ€Π²Ρ‹ΠΌ Π΄Π΅Π»ΠΎΠΌ скачиваСм 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.
Как ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ opengl ΠΊ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρƒ
Π”Π°Π»Π΅Π΅ Π² Π²ΠΊΠ»Π°Π΄ΠΊΠ΅ Configuration Properties ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅ΠΌ Π²ΠΊΠ»Π°Π΄ΠΊΡƒ Linker Π° Π² Π½Π΅ΠΉ Π²ΠΊΠ»Π°Π΄ΠΊΡƒ Input.
Как ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ opengl ΠΊ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρƒ
Π‘ΠΏΡ€Π°Π²Π° Π² ΠΎΠΊΠ½Π΅ Π²ΠΈΠ΄ΠΈΠΌ строку Additional dependencies.
НаТимаСм Edit.
Как ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ opengl ΠΊ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρƒ
ВставляСм Π² Π²Ρ‹ΡˆΠ΅Π΄ΡˆΠ΅Π΅ ΠΎΠΊΠ½ΠΎ строку(ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ):
opengl32.lib glut32.lib glu32.lib
Как ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ opengl ΠΊ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρƒ
НаТимаСм «ΠžΠš» ΠΈ «ΠŸΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ» ΠΈΠ»ΠΈ «Apply» Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ ΠΎΠΊΠ½Π΅.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ напишСм ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ для отрисовки Ρ„ΠΈΠ³ΡƒΡ€Ρ‹(Π±Π΅Π»ΠΎΠ³ΠΎ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π°)с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ срСдств ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ OpenGL.
Как ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ 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 :

Как ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ opengl ΠΊ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρƒ

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΎΠΊΠ½Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ Visual Studio. Π’.ΠΊ. Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ Π² Visual Studio 2019, Ρ‚ΠΎ Π²Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌ ΠΎΠΏΡ†ΠΈΡŽ «Visual Studio 16 2019» :

Как ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ opengl ΠΊ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρƒ

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°

Как ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ opengl ΠΊ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρƒ

ПослС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΌΡ‹ создали Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ, Π½ΡƒΠΆΠ½ΠΎ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ IDE Π·Π½Π°Π΅Ρ‚, Π³Π΄Π΅ Π½Π°ΠΉΡ‚ΠΈ Π΄Π°Π½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ», Π° Ρ‚Π°ΠΊΠΆΠ΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ нашСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ OpenGL. Π Π΅ΡˆΠΈΡ‚ΡŒ этот вопрос ΠΌΠΎΠΆΠ½ΠΎ двумя способами:

Бпособ β„–1: МоТно ΡΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ содСрТимоС ΠΏΠ°ΠΏΠΊΠΈ include ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° GLFW Π² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΡƒΡŽ ΠΏΠ°ΠΏΠΊΡƒ include вашСй IDE ΠΈΠ»ΠΈ компилятора, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΡΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» glfw3.lib Π² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΡƒΡŽ ΠΏΠ°ΠΏΠΊΡƒ /lib вашСй IDE ΠΈΠ»ΠΈ компилятора. Π”Π°Π½Π½Ρ‹ΠΉ способ Π²ΠΏΠΎΠ»Π½Π΅ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ, Π½ΠΎ ΠΌΡ‹ Π΅Π³ΠΎ Π½Π΅ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ новая установка IDE ΠΈΠ»ΠΈ компилятора ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ Π²Π°ΠΌ Π·Π°Π½ΠΎΠ²ΠΎ придСтся ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹.

Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ сохранСны Π² Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠΌ Π²Π°ΠΌΠΈ мСстС, ΠΌΡ‹ смоТСм ΠΏΡ€ΠΈΡΡ‚ΡƒΠΏΠΈΡ‚ΡŒ ΠΊ созданию нашСго ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ OpenGL-GLFW-ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°.

Наш ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚

Как ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ opengl ΠΊ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρƒ

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Ρƒ нас Π΅ΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‡Π΅Π΅ пространство для создания нашСго самого ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ OpenGL-прилоТСния!

Π›ΠΈΠ½ΠΊΠΈΠ½Π³ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°

Как ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ opengl ΠΊ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρƒ

Как ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ opengl ΠΊ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρƒ

Π—Π΄Π΅ΡΡŒ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ², сколько Π·Π°Ρ…ΠΎΡ‚ΠΈΡ‚Π΅, ΠΈ с этого ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° IDE ΠΏΡ€ΠΈ поискС Ρ„Π°ΠΉΠ»ΠΎΠ² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ Ρ‚Π°ΠΊΠΆΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ ΠΈ эти Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ, ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Ρ‹ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ ΠΏΠ°ΠΏΠΊΡƒ Lib ΠΈΠ· ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° GLFW, Π²Ρ‹ смоТСтС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ всС Ρ„Π°ΠΉΠ»Ρ‹ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ ΠΈΠ· этой ΠΏΠ°ΠΏΠΊΠΈ. Аналогично обстоят Π΄Π΅Π»Π° ΠΈ с Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠ°ΠΏΠΊΠΈ Include для Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ².

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ для VS Π±Ρ‹Π»ΠΈ ΡƒΠΊΠ°Π·Π°Π½Ρ‹ всС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹, Ρ‚ΠΎ ΠΌΡ‹, Π½Π°ΠΊΠΎΠ½Π΅Ρ†, ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ²ΡΠ·Π°Ρ‚ΡŒ GLFW с нашим ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠΌ, пСрСйдя Π² Ρ€Π°Π·Π΄Π΅Π» «ΠšΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊ» > «Π’Π²ΠΎΠ΄» :

Как ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ opengl ΠΊ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρƒ

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠΈ ΠΏΠΎΠ΄Ρ€Π°Π·Π΄Π΅Π»Π° Β«Π‘Π±ΠΎΡ€ΠΊΠ° GLFWΒ» сказано, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ собираСм всС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ 64-Π±ΠΈΡ‚Π½Ρ‹Ρ… Π±ΠΈΠ½Π°Ρ€Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ². Π’ Ρ‚ΠΎ ΠΆΠ΅ врСмя число Β«32Β» Π² Π½Π°Π·Π²Π°Π½ΠΈΠΈ Ρ„Π°ΠΉΠ»Π° OpenGL32.Lib ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΏΡƒΡ‚Π°Π½ΠΈΡ†Ρƒ, ΠΊΠ°ΠΊ Π±Ρ‹ намСкая Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π² Π΄Π°Π½Π½ΠΎΠΌ случаС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΈΠΌΠ΅Π½Π½ΠΎ 32-битная вСрсия Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ. На самом Π΄Π΅Π»Π΅ это Π½Π΅ Ρ‚Π°ΠΊ. Если Ρƒ вас установлСн ΠΏΠ°ΠΊΠ΅Ρ‚ Microsoft SDK, Ρ‚ΠΎ достаточно просто Π·Π°ΠΉΡ‚ΠΈ Π² ΠΏΠ°ΠΏΠΊΡƒ C:\Program Files (x86)\Windows Kits\10\Lib\[НомСр_вСрсии_SDK]\um\x64\ ΠΈ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ Π² Π½Π΅ΠΉ срСди ΠΏΡ€ΠΎΡ‡ΠΈΡ… Ρ„Π°ΠΉΠ»ΠΎΠ² находится ΠΈ наша Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°:

Как ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ opengl ΠΊ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρƒ

Π‘ΠΎΠ»ΡŒΡˆΠ΅ Ρ‚ΠΎΠ³ΠΎ, Ссли Π·Π°ΠΉΡ‚ΠΈ Π² ΠΏΠ°ΠΏΠΊΡƒ C:\Program Files (x86)\Windows Kits\10\Lib\[НомСр_вСрсии_SDK]\um\x86\, Ρ‚ΠΎ ΠΈ Ρ‚Π°ΠΌ ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΡ‚Ρ€Π΅Ρ‚ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ» OpenGL32.Lib:

Как ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ opengl ΠΊ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρƒ

Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, ΠΏΠΎΠ΄ ΠΎΠ΄Π½ΠΈΠΌ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ Ρ„Π°ΠΉΠ»Π° 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 ΠΈΠ½ΠΎΠ³Π΄Π° измСняСт ΡƒΡ€ΠΎΠΊΠΈ, Π½ΠΎ ΠΏΡ€ΠΈ этом Π½Π΅Ρ‚ возмоТности ΠΏΠΎΠ½ΡΡ‚ΡŒ ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ это сдСлал (Π½Π΅Ρ‚ Π΄Π°Ρ‚Ρ‹ послСднСго измСнСния ΡƒΡ€ΠΎΠΊΠ°), Ρ‚ΠΎ Π±Ρ‹Π²Π°Π΅Ρ‚ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎ тСкст ΠΏΠ΅Ρ€Π΅Π²Π΅Π΄Π΅Π½Π½Ρ‹Ρ… ΡƒΡ€ΠΎΠΊΠΎΠ² Π½Π΅Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ отличаСтся ΠΎΡ‚ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΡ… ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… ΡƒΡ€ΠΎΠΊΠΎΠ². НС ΠΏΡƒΠ³Π°ΠΉΡ‚Π΅ΡΡŒ этого, смысл ΡƒΡ€ΠΎΠΊΠ° ΠΏΡ€ΠΈ этом Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π΅ мСняСтся.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *