1
1
1.1
1.1.1
(3DCG) 3D
OpenGL
GLSL (OpenGL Shading Language)
1.1.2
3D
3DCG
1.1.3
: 0 : 2 : 3
: 4 ( ): 5 40%
60%
2
1.2
1.2.1 3DCG
(CG) CG
CG
CG ( ) CG
3DCG
1.2.2 3DCG
3DCG
3DCG
3DCG
3DCG
CG
3DCG
3
1.2.3
3DCG
3DCG
3DCG
CAD ( ) CAE (
) 3DCG
3DCG
3DCG
CG Sutherland Sketchpad
(interaction) CG
CG
1.3 3DCG
1.3.1 CG
3DCG A...
4
1 CG
1.3.3
CG
( )
!
!
!
!
!
!
! /
! /
! ( )
• 
• 
• 
•  API
5
1.4 OpenGL
CPU
(OS)
(API) OS
Microsoft Windows
Graphics Device Interface (GDI) 3DCG DirectX (
3DCG Direct3D) API
Windows...
6
1.5 GLFW
1.5.1 OpenGL
OpenGL API
GLUT (OpenGL Utility Toolkit) OpenGL Silicon Graphics
( ) GLUT
Unix / Linux Windows Mac...
7
" OpenGL
Mac OS X 10.7 (Lion) OpenGL 3.2 Core Profile
"
GLUT
"
"
GLUT
"
GLUT
( ) ( )
Mac OS X GLUT
" GLFW
GLUT GLFW Cube...
8
2
2.1
2.1.1
( 2)
(Bresenham )
( 3)
9
2
3
アプリケーション
(やりたいこと)
ハードウェア
(やれること)
アプリケーション
(やりたいこと)
ハードウェア
(やれること)
アルゴリズム
セマンティック
ギャップ
アプリケーション
(やりたいこと)
ハードウェア
(やれるこ...
10
2.1.2
"
!
!
ACM CORE ISO GKS GKS-3D PHIGS PHIGS+
"
(API)
!
! (API)
OpenGL DirectX
( )
( 4)
2.1.3 GPU
GPU
CPU
GPU
OS
11
4 GPU
5
CPU側に実装
GPU側に実装
アプリケーション
(やりたいこと)
アルゴリズム
アルゴリズム
グラフィックスライブラリ
プログラマブルシェーダ
固定機能ハードウェア
グラフィックスライブラ
リは GPU を対象とした
と...
12
2.1.4
( 5)
CG ( )
API OpenInventor
OpenSceneGraph SceniX
CryENGINE Unreal Engine Unity OROCHI MascotCapsule
Irrlicht ch...
13
( 6)
2.2.2
"
( 7)
7
"
( 8)
8
14
GPU
2.2.3
CAD
( )
CAD
Hz
(Hertz)
fps (frame per second)
6 8 fps
15 fps
60 Hz
60 fps
1
60 Hz
120 Hz ( ) 240
Hz ( )
フレームレ...
15
2.2.4
( )
CPU
CPU
GPU GPU
PC 3DCG GPU
GPU
GPU
2.3
2.3.1
9 ( )
(throughput)
9
パイプライン1段
パイプライン3段
(3倍速い)
16
10
2.4
2.4.1
11
2.4.2
CPU
( )
各ステージが等間隔
一部のステージが長い
(やることがない)
17
(Rendering Primitive)
(Attribute)
( )
GPU (
) ( )
( )
(
) ( )
(
)
CPU
(
)
CPU
2.4.3
( )
( 12)
( 13)
18
CPU
GPU (Graphics Processing Unit)
T & L (Transform and
Lighting)
12
13
"
( )
( 14)
Single-Pipe
Multi-Pipe
19
14
"
( 15)
16
15
ローカル座標系 ローカル座標系 ローカル座標系
ワールド座標系
20
16
17
"
( 17)
( Pixel)
( ) ( )
GPU
ローカル座標系
ローカル座標系
ワールド座標系
視点座標系
x
z
y
x
z
y
x
z
y
x
z
y
スクリーン
陰影付けなし 陰影付けあり
21
18
19
"
(View Volume)
2 (Canonical View Volume) ( 18)
(Orthogonal Projection)
標準ビューボリューム
視野錐台 (View Frustum)
直交投影
(Orth...
22
(Perspective Projection) ( 19)
(View Frustum, )
20
21
"
(Clipping)
(Normalized Dvice Coordnate, NDC)
1
-1 1
-1
O
1
-1 1...
23
"
xy
(Viewport) (Viewport
Transformation) (Screen Mapping)
22
23
2.4.4
( 23)
1
-1 1
-1
O
クリッピング空間
x
y
w
hx
y
ビューポート
デバイ...
24
"
(Triangle Setup)
( , Scan Conversion)
24
"
(
)
"
( )
ジオメトリデータ フラグメントデータ
25
25
"
(Frame Buffer Object, FBO)
フォグなし フォグあり
26
( )
26
図形
描画
カラーバッファ(画像表示)
デプスバッファ(隠面消去)
ステンシルバッファ(型抜き)
R
G
B
A
27
3
3.1 GLFW
OpenGL 1.5.1
GLFW (http://www.glfw.org) GLFW
3.1.1 Windows
GLFW (http://www.glfw.org/download.html) “32-bit
...
28
" 64bit Windows
include GLFW
C:¥Program*Files*(x86)¥Windows*Kits¥8.1¥Include¥um*
lib-msvc120 glfw3.lib
C:¥Program*Files...
29
3.1.3 Linux
Linux (X11) NVIDIA GeForce 8 ATI RADEON HD
Intel CPU https://01.org
Fedora (http://fedoraproject.org) GLFW ...
30
27
Visual C++ Win32
OK ( 28)
28 Win32
29
29
( 30)
main()
31
30
"
GLFW
( 31)
31
32
32
32
(
)
" VC++ ( )
GLFW
( 33) ( ) VC++
< …>
33
( 34)
…
34
( ! )
GLFW ZIP include
( 35)
33
35 GLFW include
OK ( 36)
36
< …> ( 37)
37
( 38)
…
34
38
GLFW ZIP lib-msvc120
( 39)
39 GLFW lib-msvc120
OK ( 40)
40
"
GLFW OpenGL
35
( 41)
< …>
41
glfw3.lib, opengl32.lib
( 42) OK
42 glfw3.lib opengl32.lib
43
43 “glfw3.lib; opengl32.lib;”
36
OK
(
) 2
#pragma*comment(lib,*"glfw3.lib")*
#pragma*comment(lib,*"opengl32.lib")*
GLFW
Win32
OpenGL
( 1 )
#pragma*comme...
37
Windows) 2
Path glfw3.dll
"
( 44)
44
( 45) Visual C++
C++ (.cpp)
45 C++
( 46)
2
Windows 7:
Windows 8:
PC
38
46
3.2.2 Mac OS X
"
Mac OS X Xcode 5 Xcode
( 47) “Create a new Xcode project” “File”
“New” “Project”
47
“OS X” “Applica...
39
48
“Product Name” “Organization Name”
“Company Identifier” “Type” C++
“Next” ( 49)
49
“Create”
( 50)
40
50
"
51
“Targets”
“Build Settings”
“search” “Header Search Paths”
“+”
GLFW (/usr/local/include)
51
ESC
41
“Library Search Paths” ( 52)
GLFW (/usr/local/lib)
52
“linker”
“Other Linker Flags” ( 53)
“+”
1
Klglfw3*Kframework*Coco...
42
“main.cpp”
( 54) main() “ .1” Unix Linux
man
“Delete”
54
" Makefile
Xcode Makefile
mkdir
‘%’
%*mkdir*sample*
Makefile
(...
43
3.2.3 Linux
" Geany
Linux
Geany (http://www.geany.org)
Geany
main.cpp ‘%’
%*geany*main.cpp*
Geany C++
main.cxx ( 55) “....
44
Geany
( 56)
( 57)
-lm GLFW OpenGL
*KlGL*Klglfw3*KlXi*KlXrandr*KlXxf86vm*KlX11*Klrt*Klpthread*Klm*
OK
57
" Makefile
Gean...
45
make
3.3
3.3.1
OpenGL
GLFW GLFW
(1) GLFW (glfwInit())
(2) (glfwCreateWindow())
(3) (glfwWindowShouldClose())
(4) (glfwS...
46
int glfwInit(void)
GLFW GLFW
GL_TRUE GL_FALSE
3.3.3
GLFW glfwCreateWindow() OpenGL
glfwCreateWindow()
NULL
glfwInit()
G...
47
monitor
( ) ( )
NULL
share
share
NULL
void glfwTerminate(void)
GLFW glfwInit() GLFW
GLFW
glfwInit()
GLFW glfwInit()
3.3...
48
window
OpenGL
3.3.5 OpenGL
glfwMakeContextCurrent() OpenGL
OpenGL glClearColor()
( )
gl OpenGL API (GLFW glfw )
#includ...
49
58 R, G, B
3.3.6
main()
while
glfwWindowShouldClose()
const
glClear()
OpenGL glfwSwapBuffers()
glfwWindowShouldClose() ...
50
****return*1;*
**}*
*
**//* *OpenGL* *
**glfwMakeContextCurrent(window);*
*
**//* *
**glClearColor(1.0f,*1.0f,*1.0f,*0....
51
2
"
OpenGL
OpenGL
( 59)
59
"
glfwWaitEvents()
glfwPollEvents() ( )
( )
イベントが発生するまで待つ (プログラムの実行
を停止する)。イベントが発生すれば、最初のイベ
...
52
3.3.7
glfwInit() glfwTerminate()
main() return glfwTerminate()
#include*<iostream>*
#include*<GLFW/glfw3.h>*
*
int*main...
53
" atexit() glTerminate()
glTerminate()
main() return glfwCreateWindow()
glTerminate()
glTerminate() atexit()
atexit() c...
54
**//* *
**while*(glfwWindowShouldClose(window)*==*GL_FALSE)*
**{*
****//* *
****glClear(GL_COLOR_BUFFER_BIT);*
*
****//...
55
****//* *
****std::cerr*<<*"Can't*create*GLFW*window."*<<*std::endl;*
****return*1;*
**}*
*
**//* *OpenGL* *
**glfwMake...
56
GLFW_OPENGL_PROFILE
OpenGL Compatible Profile hint
GLFW_OPENGL_COMPAT_PROFILE Core Profile hint
GLFW_OPENGL_CORE_PROFIL...
57
*
*
void glfwSwapInterval(int interval)
interval
interval (V-Sync
) 1
0
fps (frame per second)
3.3.10
3.3.8 OpenGL Open...
58
#include*<GLFW/glfw3.h>*
*
//* *
#include*"gg.h"*
using*namespace*gg;*
*
//* *
static*void*cleanup()*
{*
**//*GLFW* *
*...
59
****glfwSwapBuffers(window);*
*
****//* *
****glfwWaitEvents();*
**}*
}*
"
OpenGL 3.2 Core Profile gluLookAt() GLU (Ope...
60
3.4
make
3.4.1 Windows
Visual Studio 2013
( 60) “ ”
60 Visual Studio 2013
F5
Debug LINK : warning LNK4098: defaultlib
'...
61
c++ -I/usr/local/include -L/usr/local/lib -lglfw3
-framework Cocoa -framework IOKit -framework OpenGL -framework CoreVi...
Upcoming SlideShare
Loading in …5
×

ゲームグラフィックス特論 第1回 講義ノート

6,273 views

Published on

Published in: Education
0 Comments
19 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
6,273
On SlideShare
0
From Embeds
0
Number of Embeds
1,160
Actions
Shares
0
Downloads
157
Comments
0
Likes
19
Embeds 0
No embeds

No notes for slide

ゲームグラフィックス特論 第1回 講義ノート

  1. 1. 1 1 1.1 1.1.1 (3DCG) 3D OpenGL GLSL (OpenGL Shading Language) 1.1.2 3D 3DCG 1.1.3 : 0 : 2 : 3 : 4 ( ): 5 40% 60%
  2. 2. 2 1.2 1.2.1 3DCG (CG) CG CG CG ( ) CG 3DCG 1.2.2 3DCG 3DCG 3DCG 3DCG 3DCG CG 3DCG
  3. 3. 3 1.2.3 3DCG 3DCG 3DCG CAD ( ) CAE ( ) 3DCG 3DCG 3DCG CG Sutherland Sketchpad (interaction) CG CG 1.3 3DCG 1.3.1 CG 3DCG AR ( ) GPU (Graphics Processing Unit) GPGPU (General Purpose GPU) 1.3.2 3DCG ( 1)
  4. 4. 4 1 CG 1.3.3 CG ( ) ! ! ! ! ! ! ! / ! / ! ( ) •  •  •  •  API
  5. 5. 5 1.4 OpenGL CPU (OS) (API) OS Microsoft Windows Graphics Device Interface (GDI) 3DCG DirectX ( 3DCG Direct3D) API Windows OpenGL API OpenGL Microsoft DirectX Windows 3DCG API OpenGL Silicon Graphics ( SGI ) API IRIX UNIX OS (EWS) OpenGL EWS ( GL OpenGL IRIS GL ) ( OS ) EWS CAD EWS Windows OpenGL OS Windows DirectX OpenGL DirectX Microsoft OS Windows OpenGL Windows 3DCG API OpenGL ( OpenGL ES) OpenGL OpenGL OpenGL Apple OS Mac OS X UNIX Linux X Window System OpenGL OS Apple iOS Google Android OpenGL ES
  6. 6. 6 1.5 GLFW 1.5.1 OpenGL OpenGL API GLUT (OpenGL Utility Toolkit) OpenGL Silicon Graphics ( ) GLUT Unix / Linux Windows Mac OS X GLUT OpenGL OpenGL OpenGL GLUT GLUT freeglut OpenGLUT Mac OS X Mac OS X GLUT OpenGL 2.1 Mac OS X 10.7 (Lion) OpenGL 3.2 Core Profile 10.9 (Mavericks) OpenGL 4.1 ( ) 10.9 GLUT 1.5.2 GLFW OpenGL GLUT FLTK Qt SDL Qt 3DCG OpenGL Qt GLUT GLFW GLFW (http://www.glfw.org/) GLFW OpenGL ( ) zlib/libpng license 1 1.5.3 GLFW GLFW " GLUT Windows / Mac OS X / Linux 1 GLFW Marcus Geelnard Camilla Berglund
  7. 7. 7 " OpenGL Mac OS X 10.7 (Lion) OpenGL 3.2 Core Profile " GLUT " " GLUT " GLUT ( ) ( ) Mac OS X GLUT " GLFW GLUT GLFW Cube Sphere Teapot GLFW GLUT GLUT GLFW OpenGL Core Profile Mac OS X GLUT OpenGL Legacy Profile OpenGL 2.1 " GLFW Reference User Guide
  8. 8. 8 2 2.1 2.1.1 ( 2) (Bresenham ) ( 3)
  9. 9. 9 2 3 アプリケーション (やりたいこと) ハードウェア (やれること) アプリケーション (やりたいこと) ハードウェア (やれること) アルゴリズム セマンティック ギャップ アプリケーション (やりたいこと) ハードウェア (やれること) アプリケーション (やりたいこと) アルゴリズム グラフィックス ライブラリ アルゴリズム アプリケーション (やりたいこと) グラフィックス ライブラリ アルゴリズム ハードウェア (やれること) ハードウェア (やれること) アルゴリズム
  10. 10. 10 2.1.2 " ! ! ACM CORE ISO GKS GKS-3D PHIGS PHIGS+ " (API) ! ! (API) OpenGL DirectX ( ) ( 4) 2.1.3 GPU GPU CPU GPU OS
  11. 11. 11 4 GPU 5 CPU側に実装 GPU側に実装 アプリケーション (やりたいこと) アルゴリズム アルゴリズム グラフィックスライブラリ プログラマブルシェーダ 固定機能ハードウェア グラフィックスライブラ リは GPU を対象とした ときに機能が整理された ハードウェア APIとして の役割に集中する ハードウェア (やれること) アルゴリズム アプリケーション (やりたいこと) アプリケーション (やりたいこと) アプリケーション (やりたいこと) アルゴリズム アルゴリズム ミドルウェア ハードウェア API プログラマブルシェーダ 固定機能ハードウェア ハードウェア (やれること) アルゴリズム
  12. 12. 12 2.1.4 ( 5) CG ( ) API OpenInventor OpenSceneGraph SceniX CryENGINE Unreal Engine Unity OROCHI MascotCapsule Irrlicht chidori DAIKOKU OGRE BISHAMON YEBIS CRI-ADX2 PhysX Havok ODE Bullet 6 2.2 2.2.1 3DCG 3DCG 形状情報 材質情報 光源情報 視点情報 映像情報
  13. 13. 13 ( 6) 2.2.2 " ( 7) 7 " ( 8) 8
  14. 14. 14 GPU 2.2.3 CAD ( ) CAD Hz (Hertz) fps (frame per second) 6 8 fps 15 fps 60 Hz 60 fps 1 60 Hz 120 Hz ( ) 240 Hz ( ) フレームレート 1 fps 8 fps 15 fps 60 fps 動きの知覚 一枚一枚の画像が順に現れるように見えて対話的操作はほぼ不可能 ぎこちないが動画として知覚されて対話的操作が可能になる 動きはほぼ滑らかに感じられて対話的操作に違和感がない 一般的なフラットパネルディスプレイのリフレッシュレート
  15. 15. 15 2.2.4 ( ) CPU CPU GPU GPU PC 3DCG GPU GPU GPU 2.3 2.3.1 9 ( ) (throughput) 9 パイプライン1段 パイプライン3段 (3倍速い)
  16. 16. 16 10 2.4 2.4.1 11 2.4.2 CPU ( ) 各ステージが等間隔 一部のステージが長い (やることがない)
  17. 17. 17 (Rendering Primitive) (Attribute) ( ) GPU ( ) ( ) ( ) ( ) ( ) ( ) CPU ( ) CPU 2.4.3 ( ) ( 12) ( 13)
  18. 18. 18 CPU GPU (Graphics Processing Unit) T & L (Transform and Lighting) 12 13 " ( ) ( 14) Single-Pipe Multi-Pipe
  19. 19. 19 14 " ( 15) 16 15 ローカル座標系 ローカル座標系 ローカル座標系 ワールド座標系
  20. 20. 20 16 17 " ( 17) ( Pixel) ( ) ( ) GPU ローカル座標系 ローカル座標系 ワールド座標系 視点座標系 x z y x z y x z y x z y スクリーン 陰影付けなし 陰影付けあり
  21. 21. 21 18 19 " (View Volume) 2 (Canonical View Volume) ( 18) (Orthogonal Projection) 標準ビューボリューム 視野錐台 (View Frustum) 直交投影 (Orthographic Projection) 透視投影 (Perspective Projection) 1 -1 1 -1 1 -1 ビューボリューム (View Volume) (Canonical View Volume) 直交投影 透視投影
  22. 22. 22 (Perspective Projection) ( 19) (View Frustum, ) 20 21 " (Clipping) (Normalized Dvice Coordnate, NDC) 1 -1 1 -1 O 1 -1 1 -1 O クリッピング前 クリッピング後 x y x y クリッピング前 クリッピング後
  23. 23. 23 " xy (Viewport) (Viewport Transformation) (Screen Mapping) 22 23 2.4.4 ( 23) 1 -1 1 -1 O クリッピング空間 x y w hx y ビューポート デバイス座標系正規化デバイス座標系の xy 平面
  24. 24. 24 " (Triangle Setup) ( , Scan Conversion) 24 " ( ) " ( ) ジオメトリデータ フラグメントデータ
  25. 25. 25 25 " (Frame Buffer Object, FBO) フォグなし フォグあり
  26. 26. 26 ( ) 26 図形 描画 カラーバッファ(画像表示) デプスバッファ(隠面消去) ステンシルバッファ(型抜き) R G B A
  27. 27. 27 3 3.1 GLFW OpenGL 1.5.1 GLFW (http://www.glfw.org) GLFW 3.1.1 Windows GLFW (http://www.glfw.org/download.html) “32-bit Windows binaries” 32bit ZIP glfw-3.X.Y.bin.WIN32.zip (X, Y ) ( C:¥ ) (Visual Studio 2013 ) VC++ " 32bit Windows include GLFW C:¥Program*Files¥Windows*Kits¥8.1¥Include¥um* lib-msvc120 glfw3.lib C:¥Program*Files¥Windows*Kits¥8.1¥Lib¥winv6.3¥um¥x86*
  28. 28. 28 " 64bit Windows include GLFW C:¥Program*Files*(x86)¥Windows*Kits¥8.1¥Include¥um* lib-msvc120 glfw3.lib C:¥Program*Files*(x86)¥Windows*Kits¥8.1¥Lib¥winv6.3¥um¥x86* Visual Studio VC++ ZIP ( ) CMake (http://www.cmake.org) CMake (cmake-gui) “Where is the source code” ZIP “Where to build the binaries” “Configure” Visual Studio “Generate” Visual Studio 3.1.2 Mac OS X Mac OS X Xcode Command Line Tools Xcode AppStore Command Line Tools Xcode 5 “Xcode” “Open Developer Tool” “More Developer Tools” ( ) MacPorts (http://www.macports.org) GLFW 3 HomeBrew (http://brew.sh) Fink (http://www.finkproject.org) " GLFW (http://www.glfw.org/download.html) ZIP glfw-3.X.Y.zip (X, Y ) glfw-3.X.Y ( ) ‘%’ /usr/local %*cd*~/Desktop/glfwK3.X.Y* %*mkdir*build* %*cd*build* %*cmake*..* %*make* %*sudo*make*install* " GLFW GLFW build Makefile ( ) %*cd*~/Desktop/glfwK3.X.Y/build* %*sudo*make*uninstall*
  29. 29. 29 3.1.3 Linux Linux (X11) NVIDIA GeForce 8 ATI RADEON HD Intel CPU https://01.org Fedora (http://fedoraproject.org) GLFW 3 Ubuntu (http://www.ubuntu.com) OpenSUSE (http://www.opensuse.org) " GLFW (http://www.glfw.org/download.html) ZIP glfw-3.X.Y.zip (X, Y ) ( ) ‘%’ /usr/local %*unzip*glfwK3.X.Y.zip* %*cd*glfwK3.X.Y* %*mkdir*build* %*cd*build* %*cmake*..* %*make* %*sudo*make*install* " GLFW GLFW build Makefile ( ) %*cd*glfwK3.X.Y/build* %*sudo*make*uninstall* 3.2 (Integrated Development Environment, IDE) 3.2.1 Windows " Windows Visual Studio 2013 Visual Studio 2013 27
  30. 30. 30 27 Visual C++ Win32 OK ( 28) 28 Win32 29 29 ( 30) main()
  31. 31. 31 30 " GLFW ( 31) 31 32 32
  32. 32. 32 ( ) " VC++ ( ) GLFW ( 33) ( ) VC++ < …> 33 ( 34) … 34 ( ! ) GLFW ZIP include ( 35)
  33. 33. 33 35 GLFW include OK ( 36) 36 < …> ( 37) 37 ( 38) …
  34. 34. 34 38 GLFW ZIP lib-msvc120 ( 39) 39 GLFW lib-msvc120 OK ( 40) 40 " GLFW OpenGL
  35. 35. 35 ( 41) < …> 41 glfw3.lib, opengl32.lib ( 42) OK 42 glfw3.lib opengl32.lib 43 43 “glfw3.lib; opengl32.lib;”
  36. 36. 36 OK ( ) 2 #pragma*comment(lib,*"glfw3.lib")* #pragma*comment(lib,*"opengl32.lib")* GLFW Win32 OpenGL ( 1 ) #pragma*comment(linker,*"/subsystem:¥"windows¥"*/entry:¥"mainCRTStartup¥"")* (Dynamic Link Library, DLL) DLL glfw3.lib DLL DLL Visual C++ Visual C++ GLFW glfw3.lib glfw3dll.lib DLL (glfw3.dll) glfw3.dll glfw3.dll C:¥Windows¥System32 (32bit Windows) C:¥Windows¥SysWOW64 (64bit
  37. 37. 37 Windows) 2 Path glfw3.dll " ( 44) 44 ( 45) Visual C++ C++ (.cpp) 45 C++ ( 46) 2 Windows 7: Windows 8: PC
  38. 38. 38 46 3.2.2 Mac OS X " Mac OS X Xcode 5 Xcode ( 47) “Create a new Xcode project” “File” “New” “Project” 47 “OS X” “Application” “Command Line Tool” “Next” ( 48)
  39. 39. 39 48 “Product Name” “Organization Name” “Company Identifier” “Type” C++ “Next” ( 49) 49 “Create” ( 50)
  40. 40. 40 50 " 51 “Targets” “Build Settings” “search” “Header Search Paths” “+” GLFW (/usr/local/include) 51 ESC
  41. 41. 41 “Library Search Paths” ( 52) GLFW (/usr/local/lib) 52 “linker” “Other Linker Flags” ( 53) “+” 1 Klglfw3*Kframework*Cocoa*Kframework*IOKit*Kframework*OpenGL*Kframework*CoreVideo* 53
  42. 42. 42 “main.cpp” ( 54) main() “ .1” Unix Linux man “Delete” 54 " Makefile Xcode Makefile mkdir ‘%’ %*mkdir*sample* Makefile ( ) CXXFLAGS*=*KI/usr/local/include*–Wall* LDLIBS* =*KL/usr/local/lib*Klglfw3*Kframework*Cocoa*Kframework*IOKit*¥* * Kframework*OpenGL*Kframework*CoreVideo* OBJECTS* =*$(patsubst*%.cpp,%.o,$(wildcard**.cpp))* TARGET* =*sample* * .PHONY:*clean* * $(TARGET):*$(OBJECTS)* * $(LINK.cc)*$^*$(LOADLIBES)*$(LDLIBS)*Ko*$@* * clean:* * K$(RM)*$(TARGET)*$(OBJECTS)**~*.*~*core* make
  43. 43. 43 3.2.3 Linux " Geany Linux Geany (http://www.geany.org) Geany main.cpp ‘%’ %*geany*main.cpp* Geany C++ main.cxx ( 55) “.cxx” Linux C++ 55 56
  44. 44. 44 Geany ( 56) ( 57) -lm GLFW OpenGL *KlGL*Klglfw3*KlXi*KlXrandr*KlXxf86vm*KlX11*Klrt*Klpthread*Klm* OK 57 " Makefile Geany Makefile mkdir ‘%’ %*mkdir*sample* Makefile ( ) CXXFLAGS*=*KWall* LDLIBS* =*KlGL*Klglfw3*KlXi*KlXrandr*KlXxf86vm*KlX11*Klrt*Klpthread*–lm* OBJECTS* =*$(patsubst*%.cpp,%.o,$(wildcard**.cpp))* TARGET* =*sample* * .PHONY:*clean* * $(TARGET):*$(OBJECTS)* * $(LINK.cc)*$^*$(LOADLIBES)*$(LDLIBS)*Ko*$@* * clean:* * K$(RM)*$(TARGET)*$(OBJECTS)**~*.*~*core*
  45. 45. 45 make 3.3 3.3.1 OpenGL GLFW GLFW (1) GLFW (glfwInit()) (2) (glfwCreateWindow()) (3) (glfwWindowShouldClose()) (4) (glfwSwapBuffers()) (5) (glfwTerminate()) C++ ( ) int*main()* {* }* ( ) main() 3.3.2 GLFW main() GLFW GLFW GLFW/glfw3.h #include main() glfwInit() OpenGL glfwInit() GL_FALSE GLFW #include*<iostream>* #include*<GLFW/glfw3.h>* * int*main()* {* **//*GLFW* * **if*(glfwInit()*==*GL_FALSE)* **{* ****//* * ****std::cerr*<<*"Can't*initialize*GLFW"*<<*std::endl;* ****return*1;* **}* }*
  46. 46. 46 int glfwInit(void) GLFW GLFW GL_TRUE GL_FALSE 3.3.3 GLFW glfwCreateWindow() OpenGL glfwCreateWindow() NULL glfwInit() GLFW return glfwTerminate() GLFW #include*<iostream>* #include*<GLFW/glfw3.h>* * int*main()* {* **//*GLFW* * **if*(glfwInit()*==*GL_FALSE)* **{* ****//* * ****std::cerr*<<*"Can't*initialize*GLFW"*<<*std::endl;* ****return*1;* **}* * **//* * **GLFWwindow**const*window(glfwCreateWindow(640,*480,*"Hello!",*NULL,*NULL));* **if*(window*==*NULL)* **{* ****//* * ****std::cerr*<<*"Can't*create*GLFW*window."*<<*std::endl;* ****glfwTerminate();* ****return*1;* **}* }* GLFWwindow *glfwCreateWindow(int width, int height, const char *title, GLFWmonitor *monitor, GLFWwindow *share) GLFW NULL width 0 height 0 title UTF-8
  47. 47. 47 monitor ( ) ( ) NULL share share NULL void glfwTerminate(void) GLFW glfwInit() GLFW GLFW glfwInit() GLFW glfwInit() 3.3.4 glfwMakeContextCurrent() #include*<iostream>* #include*<GLFW/glfw3.h>* * int*main()* {* **//*GLFW* * **if*(glfwInit()*==*GL_FALSE)* **{* ****//* * ****std::cerr*<<*"Can't*initialize*GLFW"*<<*std::endl;* ****return*1;* **}* * **//* * **GLFWwindow**const*window(glfwCreateWindow(640,*480,*"Hello!",*NULL,*NULL));* **if*(window*==*NULL)* **{* ****//* * ****std::cerr*<<*"Can't*create*GLFW*window."*<<*std::endl;* ****glfwTerminate();* ****return*1;* **}* * **//* *OpenGL* * **glfwMakeContextCurrent(window);* }* void glfwMakeContextCurrent(GLFWwindow *const window) window ( )
  48. 48. 48 window OpenGL 3.3.5 OpenGL glfwMakeContextCurrent() OpenGL OpenGL glClearColor() ( ) gl OpenGL API (GLFW glfw ) #include*<iostream>* #include*<GLFW/glfw3.h>* * int*main()* {* **//*GLFW* * **if*(glfwInit()*==*GL_FALSE)* **{* ****//* * ****std::cerr*<<*"Can't*initialize*GLFW"*<<*std::endl;* ****return*1;* **}* * **//* * **GLFWwindow**const*window(glfwCreateWindow(640,*480,*"Hello!",*NULL,*NULL));* **if*(window*==*NULL)* **{* ****//* * ****std::cerr*<<*"Can't*create*GLFW*window."*<<*std::endl;* ****glfwTerminate();* ****return*1;* **}* * **//* *OpenGL* * **glfwMakeContextCurrent(window);* * **//* * **glClearColor(1.0f,*1.0f,*1.0f,*0.0f);* }* void glClearColor(GLclampf R, GLclampf G, GLclampf B, GLclampf A) glClear(GL_COLOR_BUFFER_BIT) R G B GLclampf (float ) 0 1 ( 58) 1 0, 0, 0 1, 1, 1 A OpenGL (0 1 ) 0
  49. 49. 49 58 R, G, B 3.3.6 main() while glfwWindowShouldClose() const glClear() OpenGL glfwSwapBuffers() glfwWindowShouldClose() const glfwWaitEvents() glfwPollEvents() ( 2) #include*<iostream>* #include*<GLFW/glfw3.h>* * int*main()* {* **//*GLFW* * **if*(glfwInit()*==*GL_FALSE)* **{* ****//* * ****std::cerr*<<*"Can't*initialize*GLFW"*<<*std::endl;* ****return*1;* **}* * **//* * **GLFWwindow**const*window(glfwCreateWindow(640,*480,*"Hello!",*NULL,*NULL));* **if*(window*==*NULL)* **{* ****//* * ****std::cerr*<<*"Can't*create*GLFW*window."*<<*std::endl;* ****glfwTerminate();*
  50. 50. 50 ****return*1;* **}* * **//* *OpenGL* * **glfwMakeContextCurrent(window);* * **//* * **glClearColor(1.0f,*1.0f,*1.0f,*0.0f);* * **//* * **while*(glfwWindowShouldClose(window)*==*GL_FALSE)* **{* ****//* * ****glClear(GL_COLOR_BUFFER_BIT);* * ****//* ****//* * ****//* * ****//* * ****glfwSwapBuffers(window);* * ****//* * ****glfwWaitEvents();* **}* }* int glfwWindowShouldClose(GLFWwindow *const window) window 0 void glClear(GLbitfield mask) mask ( 26) mask GL_COLOR_BUFFER_BIT glClearColor() void glfwSwapBuffers(GLFWwindow *const window) window void glfwWaitEvents(void) void glfwPollEvents(void)
  51. 51. 51 2 " OpenGL OpenGL ( 59) 59 " glfwWaitEvents() glfwPollEvents() ( ) ( ) イベントが発生するまで待つ (プログラムの実行 を停止する)。イベントが発生すれば、最初のイベ ントを取り出してプログラムの実行を再開する。 glewWaitEvents() glewPollEvents() イベントが発生していれば、それを取り出す。イ ベントの有無にかかわらず、次に進む (プログラ ムの実行を停止しない)。 バッファの入れ替え glfwSwapBuffers() 表示 描画 表示 描画
  52. 52. 52 3.3.7 glfwInit() glfwTerminate() main() return glfwTerminate() #include*<iostream>* #include*<GLFW/glfw3.h>* * int*main()* {* **//*GLFW* * **if*(glfwInit()*==*GL_FALSE)* **{* ****//* * ****std::cerr*<<*"Can't*initialize*GLFW"*<<*std::endl;* ****return*1;* **}* * **//* * **GLFWwindow**const*window(glfwCreateWindow(640,*480,*"Hello!",*NULL,*NULL));* **if*(window*==*NULL)* **{* ****//* * ****std::cerr*<<*"Can't*create*GLFW*window."*<<*std::endl;* ****glfwTerminate();* ****return*1;* **}* * **//* *OpenGL* * **glfwMakeContextCurrent(window);* * **//* * **glClearColor(1.0f,*1.0f,*1.0f,*0.0f);* * **//* * **while*(glfwWindowShouldClose(window)*==*GL_FALSE)* **{* ****//* * ****glClear(GL_COLOR_BUFFER_BIT);* * ****//* ****//* * ****//* * ****//* * ****glfwSwapBuffers(window);* * ****//* * ****glfwWaitEvents();* **}* * **glfwTerminate();* }*
  53. 53. 53 " atexit() glTerminate() glTerminate() main() return glfwCreateWindow() glTerminate() glTerminate() atexit() atexit() cstdlib #include glfwTerminate() cleanup() glfwInit() atexit() cleanup() main() glfwTerminate() #include*<cstdlib>* #include*<iostream>* #include*<GLFW/glfw3.h>* * //* * static*void*cleanup()* {* **//*GLFW* * **glfwTerminate();* }* * int*main()* {* **//*GLFW* * **if*(glfwInit()*==*GL_FALSE)* **{* ****//* * ****std::cerr*<<*"Can't*initialize*GLFW"*<<*std::endl;* ****return*1;* **}* * **//* * **atexit(cleanup);* * **//* * **GLFWwindow**const*window(glfwCreateWindow(640,*480,*"Hello!",*NULL,*NULL));* **if*(window*==*NULL)* **{* ****//* * ****std::cerr*<<*"Can't*create*GLFW*window."*<<*std::endl;* ****return*1;* **}* * **//* *OpenGL* * **glfwMakeContextCurrent(window);* * **//* * **glClearColor(1.0f,*1.0f,*1.0f,*0.0f);* *
  54. 54. 54 **//* * **while*(glfwWindowShouldClose(window)*==*GL_FALSE)* **{* ****//* * ****glClear(GL_COLOR_BUFFER_BIT);* * ****//* ****//* * ****//* * ****//* * ****glfwSwapBuffers(window);* * ****//* * ****glfwWaitEvents();* **}* }* int atexit(void (*function)(void)) atexit() function atexit() ( 32 ) 0 0 3.3.8 OpenGL OpenGL 3.2 OpenGL glfwCreateWindow() glfwWindowHint() * * int*main()* {* **//*GLFW* * **if*(glfwInit()*==*GL_FALSE)* **{* ****//* * ****std::cerr*<<*"Can't*initialize*GLFW"*<<*std::endl;* ****return*1;* **}* * **//* * **atexit(cleanup);* * **//*OpenGL*Version*3.2*Core*Profile* * **glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR,*3);* **glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR,*2);* **glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT,*GL_TRUE);* **glfwWindowHint(GLFW_OPENGL_PROFILE,*GLFW_OPENGL_CORE_PROFILE);* * **//* * **GLFWwindow**const*window(glfwCreateWindow(640,*480,*"Hello!",*NULL,*NULL));* **if*(window*==*NULL)* **{*
  55. 55. 55 ****//* * ****std::cerr*<<*"Can't*create*GLFW*window."*<<*std::endl;* ****return*1;* **}* * **//* *OpenGL* * **glfwMakeContextCurrent(window);* * **//* * **glClearColor(1.0f,*1.0f,*1.0f,*0.0f);* * * void glfwWindowHint(int target, int hint) glfwCreateWindow() glfwDefaultWindowHints() target ( ) GLFW_RED_BITS, GLFW_GREEN_BITS, GLFW_BLUE_BITS, GLFW_ALPHA_BITS hint 8 GLFW_DEPTH_BITS hint 24 GLFW_STENCIL_BITS hint 8 GLFW_SAMPLES hint 0 0 GLFW_STEREO hint GL_TRUE GL_FALSE GL_TRUE GLFW_CLIENT_API hint GLFW_OPENGL_ES_API OpenGL ES API GLFW_OPENGL_API GLFW_CONTEXT_VERSION_MAJOR OpenGL hint 3.2 3 1 GLFW_CONTEXT_VERSION_MINOR OpenGL hint 3.2 2 1 GLFW_OPENGL_FORWARD_COMPAT OpenGL Forward Compatible Profile ( ) hint GL_TRUE GL_FALSE
  56. 56. 56 GLFW_OPENGL_PROFILE OpenGL Compatible Profile hint GLFW_OPENGL_COMPAT_PROFILE Core Profile hint GLFW_OPENGL_CORE_PROFILE 0 glfwWindowHint() glfwCreateWindow() 3.3.9 glfwCreateWindow() glfwSwapInterval() * * int*main()* {* **//*GLFW* * **if*(glfwInit()*==*GL_FALSE)* **{* ****//* * ****std::cerr*<<*"Can't*initialize*GLFW"*<<*std::endl;* ****return*1;* **}* * **//* * **atexit(cleanup);* * **//*OpenGL*Version*3.2*Core*Profile* * **glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR,*3);* **glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR,*2);* **glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT,*GL_TRUE);* **glfwWindowHint(GLFW_OPENGL_PROFILE,*GLFW_OPENGL_CORE_PROFILE);* * **//* * **GLFWwindow**const*window(glfwCreateWindow(640,*480,*"Hello!",*NULL,*NULL));* **if*(window*==*NULL)* **{* ****//* * ****std::cerr*<<*"Can't*create*GLFW*window."*<<*std::endl;* ****return*1;* **}* * **//* *OpenGL* * **glfwMakeContextCurrent(window);* * **//* * **glfwSwapInterval(1);* * **//* * **glClearColor(1.0f,*1.0f,*1.0f,*0.0f);*
  57. 57. 57 * * void glfwSwapInterval(int interval) interval interval (V-Sync ) 1 0 fps (frame per second) 3.3.10 3.3.8 OpenGL OpenGL 3.2 Core Profile OpenGL API (Windows OpenGL 1.1 API ) API GLEW (The OpenGL Extension Wrangler Library, http://glew.sourceforge.net) Windows / Mac OS X / Linux gg.cpp gg.h ( ) glext.h (http://www.opengl.org/registry/api/glext.h) ( ) " ! gg.cpp ! gg.h ! glext.h #include <GL/glfw.h> #include "gg.h" using namespace gg; glfwInit() glfwSwapInterval(1) ggInit() ggInit() glfwOpenWindow() (0, 0, 0, 0, 0, 0, 0, 0, GLFW_WINDOW) " #include*<cstdlib>* #include*<iostream>*
  58. 58. 58 #include*<GLFW/glfw3.h>* * //* * #include*"gg.h"* using*namespace*gg;* * //* * static*void*cleanup()* {* **//*GLFW* * **glfwTerminate();* }* * int*main()* {* **//*GLFW* * **if*(glfwInit()*==*GL_FALSE)* **{* ****//* * ****std::cerr*<<*"Can't*initialize*GLFW"*<<*std::endl;* ****return*1;* **}* * **//* * **atexit(cleanup);* * **//* * **GLFWwindow**const*window(glfwCreateWindow(640,*480,*"Hello!",*NULL,*NULL));* **if*(window*==*NULL)* **{* ****//* * ****std::cerr*<<*"Can't*create*GLFW*window."*<<*std::endl;* ****return*1;* **}* * **//* *OpenGL* * **glfwMakeContextCurrent(window);* * **//* * **glfwSwapInterval(1);* * **//* * **ggInit();* * **//* * **glClearColor(1.0f,*1.0f,*1.0f,*0.0f);* * **//* * **while*(glfwWindowShouldClose(window)*==*GL_FALSE)* **{* ****//* * ****glClear(GL_COLOR_BUFFER_BIT);* * ****//* ****//* * ****//* * ****//* *
  59. 59. 59 ****glfwSwapBuffers(window);* * ****//* * ****glfwWaitEvents();* **}* }* " OpenGL 3.2 Core Profile gluLookAt() GLU (OpenGL Utility) GLU GLFW_NO_GLU #define Windows OpenGL 1.2 GLEW glfwCreateWindow() GLFW ggInit() glewExperimental = GL_TRUE; glewInit() #incoude*<GL/glew.h>* #incoude*<GLFW/glfw3.h>* *** ...* *** **//* * **glewExperimental*=*GL_TRUE;* **if*(glewInit()*!=*GLEW_OK)* **{* ****//* * ****return*1;* **}* Mac OS X Mac OS X glfw3.h #include GLFW_INCLUDE_GLCOREARB #define gl3ext.h #include #define*GLFW_INCLUDE_GLCOREARB* #include*<GLFW/glfw3.h>* #include*<OpenGL/gl3ext.h>* Linux Linux X11 C++ GL_GLEXT_PROTOTYPES #define #define*GL_GLEXT_PROTOTYPES* #include*<GLFW/glfw3.h>* #include*<GL/glext.h>* gg.h / gg.cpp
  60. 60. 60 3.4 make 3.4.1 Windows Visual Studio 2013 ( 60) “ ” 60 Visual Studio 2013 F5 Debug LINK : warning LNK4098: defaultlib 'MSVCRT' /NODEFAULTLIB:library GLFW 3.4.2 Mac OS X Xcode ( 61) Command R 61 Xcode
  61. 61. 61 c++ -I/usr/local/include -L/usr/local/lib -lglfw3 -framework Cocoa -framework IOKit -framework OpenGL -framework CoreVideo ‘%’ %*c++*main.cpp*KI/usr/local/include*KL/usr/local/lib*Klglfw3*¥* Kframework*Cocoa*Kframework*IOKit*Kframework*OpenGL*Kframework*CoreVideo* Makefile make Makefile make %*make* 3.4.3 Linux Geany ( 62) F9 F5 62 Geany c++ -lGL -lglfw3 -lXi -lXrandr -lXxf86vm -lX11 -lrt -lpthread -lm ‘%’ %*c++*main.cpp*KlGL*Klglfw3*KlXi*KlXrandr*KlXxf86vm*KlX11*Klrt*Klpthread*Klm* Makefile make Makefile make %*make*

×