๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ˜ธ OpenGL

[Learn OpenGL] Hello Triangle - 1

by HOENDEV 2023. 11. 16.

OpenGL์—์„œ ๋ชจ๋“  ๊ฒƒ์€ 3D ๊ณต๊ฐ„์— ์žˆ์ง€๋งŒ, ํ™”๋ฉด์ด๋‚˜ ์ฐฝ์€ 2D ํ”ฝ์…€ ๋ฐฐ์—ด์ด๋ฏ€๋กœ, OpenGL์˜ ์ฃผ์š” ์ž‘์—…์€

 

๋ชจ๋“  3D ์ขŒํ‘œ๋ฅผ ํ™”๋ฉด์— ๋งž๋Š” 2Dํ”ฝ์…€๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

3D ์ขŒํ‘œ๋ฅผ 2D ํ”ฝ์…€๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ณผ์ •์€ OpenGL์˜ ๊ทธ๋ž˜ํ”ฝ ํŒŒ์ดํ”„๋ผ์ธ์— ์˜ํ•ด ๊ด€๋ฆฌ๋ฉ๋‹ˆ๋‹ค.

 

๊ทธ๋ž˜ํ”ฝ ํŒŒ์ดํ”„๋ผ์ธ์€ ํฌ๊ฒŒ ๋‘ ๋ถ€๋ถ„์œผ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋Š”๋ฐ,

 

์ฒซ ๋ฒˆ์งธ ๋ถ€๋ถ„์€ 3D ์ขŒํ‘œ๋ฅผ 2D ์ขŒํ‘œ๋กœ ๋ณ€ํ™˜ํ•˜๊ณ ,

 

๋‘ ๋ฒˆ์งธ ๋ถ€๋ถ„์€ 2D ์ขŒํ‘œ๋ฅผ ์‹ค์ œ ์ƒ‰์ƒ์ด ์žˆ๋Š” ํ”ฝ์…€๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

 

 

๊ทธ๋ž˜ํ”ฝ ํŒŒ์ดํ”„๋ผ์ธ์€ 3D ์ขŒํ‘œ ์„ธํŠธ๋ฅผ ์ž…๋ ฅ์œผ๋กœ ๋ฐ›์•„ ์ด๋ฅผ ํ™”๋ฉด์˜ ์ƒ‰์ƒ ์žˆ๋Š” 2D ํ”ฝ์…€๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

 

๊ทธ๋ž˜ํ”ฝ ํŒŒ์ดํ”„๋ผ์ธ์€ ์—ฌ๋Ÿฌ ๋‹จ๊ณ„๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ์œผ๋ฉฐ,

 

๊ฐ ๋‹จ๊ณ„๋Š” ์ด์ „ ๋‹จ๊ณ„์˜ ์ถœ๋ ฅ์„ ์ž…๋ ฅ์œผ๋กœ ํ•„์š”๋กœ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ฐ ๋‹จ๊ณ„๋Š” ๋งค์šฐ ์ „๋ฌธํ™”๋˜์–ด ์žˆ์œผ๋ฉฐ(ํ•˜๋‚˜์˜ ํŠน์ • ๊ธฐ๋Šฅ๋งŒ ์ˆ˜ํ–‰),

 

๋ณ‘๋ ฌ๋กœ ์‰ฝ๊ฒŒ ์‹คํ–‰๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ณ‘๋ ฌ์  ํŠน์„ฑ์œผ๋กœ ์ธํ•ด, ํ˜„์žฌ์˜ ๊ทธ๋ž˜ํ”ฝ ์นด๋“œ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๊ทธ๋ž˜ํ”ฝ ํŒŒ์ดํ”„๋ผ์ธ ๋‚ด์—์„œ ๋น ๋ฅด๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ์ˆ˜์ฒœ ๊ฐœ์˜ ์ž‘์€ ์ฒ˜๋ฆฌ ์ฝ”์–ด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

 

์ด ์ฒ˜๋ฆฌ ์ฝ”์–ด๋“ค์€ ํŒŒ์ดํ”„๋ผ์ธ์˜ ๊ฐ ๋‹จ๊ณ„๋งˆ๋‹ค GPU์—์„œ ์‹คํ–‰๋˜๋Š” ์ž‘์€ ํ”„๋กœ๊ทธ๋žจ๋“ค์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ž‘์€ ํ”„๋กœ๊ทธ๋žจ๋“ค์„ ์…ฐ์ด๋”๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

 

 

์ด๋Ÿฌํ•œ ์…ฐ์ด๋” ์ค‘ ์ผ๋ถ€๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์–ด, ๊ธฐ์กด์˜ ๊ธฐ๋ณธ ์…ฐ์ด๋”๋ฅผ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ๋Š” ์ž์ฒด ์…ฐ์ด๋”๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์ด๋ฅผ ํ†ตํ•ด ํŒŒ์ดํ”„๋ผ์ธ์˜ ํŠน์ • ๋ถ€๋ถ„์„ ๋” ์„ธ๋ฐ€ํ•˜๊ฒŒ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, GPU์—์„œ ์‹คํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์— ๊ท€์ค‘ํ•œ CPU ์‹œ๊ฐ„๋„ ์ ˆ์•ฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์…ฐ์ด๋”๋Š” OpenGL ์…ฐ์ด๋”ฉ ์–ธ์–ด(GLSL)๋กœ ์ž‘์„ฑ๋˜๋ฉฐ, ๋‹ค์Œ ์žฅ์—์„œ ์ด์— ๋Œ€ํ•ด ๋” ์ž์„ธํžˆ ์‚ดํŽด๋ณผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

์•„๋ž˜์—์„œ๋Š” ๊ทธ๋ž˜ํ”ฝ ํŒŒ์ดํ”„๋ผ์ธ์˜ ๋ชจ๋“  ๋‹จ๊ณ„๋ฅผ ์ถ”์ƒ์ ์œผ๋กœ ๋‚˜ํƒ€๋‚ธ ๊ฒƒ์„ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํŒŒ๋ž€์ƒ‰ ์„น์…˜์€ ์šฐ๋ฆฌ๊ฐ€ ์ž์ฒด ์…ฐ์ด๋”๋ฅผ ์ฃผ์ž…ํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

 

 

 

๊ทธ๋ž˜ํ”ฝ ํŒŒ์ดํ”„๋ผ์ธ์—๋Š” ์ •์  ๋ฐ์ดํ„ฐ๋ฅผ ์™„์ „ํžˆ ๋ Œ๋”๋ง๋œ ํ”ฝ์…€๋กœ ๋ณ€ํ™˜ํ•˜๋Š”๋ฐ

 

๊ฐ๊ฐ ํ•˜๋‚˜์˜ ํŠน์ • ๋ถ€๋ถ„์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋งŽ์€ ์„น์…˜์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

 

๊ทธ๋ž˜ํ”ฝ ํŒŒ์ดํ”„๋ผ์ธ์— ์ž…๋ ฅ์œผ๋กœ๋Š” Vertex Data๋ผ๊ณ  ํ•˜๋Š” ์‚ผ๊ฐํ˜•์„ ํ˜•์„ฑํ•˜๋Š” ์„ธ๊ฐœ์˜ 3D ์ขŒํ‘œ๋ฅผ ๋ฐฐ์—ด๋กœ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.

 

ํ•˜๋‚˜์˜ ์ •์ ์€ 3D์ขŒํ‘œ๋‹น ํ•˜๋‚˜์˜ ๋ฐ์ดํ„ฐ ๋ชจ์Œ์ž…๋‹ˆ๋‹ค.

 

์ด ์ •์ ์˜ ๋ฐ์ดํ„ฐ๋Š” ์›ํ•˜๋Š” ์–ด๋–ค ๋ฐ์ดํ„ฐ๋“  ํฌํ•จํ•  ์ˆ˜ ์žˆ๋Š” ์ •์  ์†์„ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

 

ํ•˜์ง€๋งŒ ๊ฐ„๋‹จํžˆ ํ•˜๊ธฐ ์œ„ํ•ด, ๊ฐ ์ •์ ์€ 3D ์œ„์น˜์™€ ์ผ๋ถ€ ์ƒ‰์ƒ ๊ฐ’์œผ๋กœ๋งŒ ๊ตฌ์„ฑ๋œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ์‹œ๋‹ค.

 

 

OpenGL์ด ์ขŒํ‘œ์™€ ์ƒ‰์ƒ ๊ฐ’์˜ ๋ชจ์Œ์„ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ• ์ง€์— ๋Œ€ํ•œ ๋ Œ๋” ํƒ€์ž…์„ ์•Œ๋ ค์ค˜์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

๋ฐ์ดํ„ฐ๊ฐ€ ์ ๋“ค๋กœ ๋ Œ๋”๋ง๋ ์ง€, ์‚ผ๊ฐํ˜•๋“ค๋กœ ๋ Œ๋”๋ง๋ ์ง€ ์•„๋‹ˆ๋ฉด ํ•˜๋‚˜์˜ ๊ธด ์„ ์œผ๋กœ ๋ Œ๋”๋ง ๋ ์ง€ ๋“ฑ์„ ์•Œ๋ ค์ค˜์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

์ด๋Ÿฌํ•œ ํžŒํŠธ๋ฅผ primitives๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

 

๊ทธ๋ฆฌ๊ณ  ์ด๊ฒƒ์„ ๊ทธ๋ฆฌ๊ธฐ ๋ช…๋ น์„ ํ˜ธ์ถœํ•  ๋•Œ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

 

GL_POINTS, GL_TRIANGLES ๋ฐ GL_LINE_STRIP ๊ฐ™์€ ๊ฒƒ๋“ค์ด ๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค.

 

Vertext Shader

ํŒŒ์ดํ”„๋ผ์ธ์˜ ์ฒซ๋ฒˆ์งธ ๋ถ€๋ถ„์€ ๋‹จ์ผ ์ •์ ์„ ์ž…๋ ฅ์œผ๋กœ ๋ฐ›๋Š” vertex shader ์ž…๋‹ˆ๋‹ค.

 

vertext shader์˜ ์ฃผ์š” ๋ชฉ์ ์€ 3D ์ขŒํ‘œ๋ฅผ ๋‹ค๋ฅธ 3D์ขŒํ‘œ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ฒƒ์ด๋ฉฐ(๋‚˜์ค‘์— ์„ค๋ช…)

 

vertextshader๋Š” ์ •์  ์†์„ฑ์— ๋Œ€ํ•œ ๊ธฐ๋ณธ ์ฒ˜๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค.

 

 

vertex shader ๋‹จ๊ณ„์˜ ์ถœ๋ ฅ์€ ์„ ํƒ์ ์œผ๋กœ geometry shader์— ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค.

 

geometry shader๋Š” primitive๋ฅผ ํ˜•์„ฑํ•˜๋Š” ์ •์  ๋ชจ์Œ์„ ์ž…๋ ฅ์œผ๋กœ ๋ฐ›์•„ ์ƒˆ๋กœ์šด ์ •์ ์„ ์ƒ์„ฑํ•˜์—ฌ

 

์ƒˆ๋กœ์šด primitive๋ฅผ ํ˜•์„ฑํ•˜๋Š” ๊ธฐ๋Šฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

 

์ด ์˜ˆ์ œ์˜ ๊ฒฝ์šฐ์—๋Š” ์ฃผ์–ด์ง„ ๋ชจ์–‘์—์„œ ๋‘ ๋ฒˆ์งธ ์‚ผ๊ฐํ˜•์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

 

Privitive Assembly

 

primitive assembly ๋‹จ๊ณ„๋Š” vertex ํ˜น์€ geometry shader์—์„œ ๋‚˜์˜จ ๋ชจ๋“  ์ •์ (ํ˜น์€ ์ •์  GL_POINTS๊ฐ€ ์„ ํƒ๋˜์—ˆ๋‹ค๋ฉด)

 

์„ ์ž…๋ ฅ์œผ๋กœ ๋ฐ›์•„ ํ•˜๋‚˜ ์ด์ƒ์˜ primitive ๋ฅผ ํ˜•์„ฑํ•˜๊ณ  ๋ชจ๋“  ์ ์„ ์กฐ๋ฆฝํ•ฉ๋‹ˆ๋‹ค.

 

์œ„ ๊ฒฝ์šฐ ๋‘๊ฐฑ์˜ ์‚ผ๊ฐํ˜•์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

 

 

primitive assembly ์˜ ์ถœ๋ ฅ์€ ๋ ˆ์Šคํ„ฐํ™” ๋‹จ๊ณ„๋กœ ๋„˜์–ด๊ฐ‘๋‹ˆ๋‹ค.

 

์—ฌ๊ธฐ์„œ primitive๋ฅผ ์ตœ์ข… ํ™”๋ฉด์˜ ํ”ฝ์…€์— ๋งคํ•‘ํ•˜๊ณ , fragment shader๊ฐ€ ์‚ฌ์šฉํ•  fragment๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

 

fragment shader๊ฐ€ ์‹คํ–‰๋˜๊ธฐ ์ „์— ํด๋ฆฌํ•‘์ด ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค.

 

ํด๋ฆฌํ•‘์€ ๋ทฐ ๋ฐ”๊นฅ์— ์žˆ๋Š” framents๋ฅผ ๋ชจ๋‘ ๋ฒ„๋ฆฌ๊ณ  ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค.

 

OpenGL์—์„œ fragment๋Š” OpenGL์ด ํ•œ ํ”ฝ์…€์„ ๋ Œ๋”๋งํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ๋ชจ๋“  ๋ฐ์ดํ„ฐ ์ž…๋‹ˆ๋‹ค.

 

Fragment Shader

 

fragment shader์˜ ์ฃผ์š” ๋ชฉํ‘œ๋Š” ํ”ฝ์…€์˜ ์ตœ์ข… ์ƒ‰์ƒ์„ ๊ณ„์‚ฐํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

๊ทธ๋ฆฌ๊ณ  ์ด ์Šคํ…Œ์ด์ง€๋Š” ๋ณดํ†ต advanced OpenGL ์ดํŽ™ํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ณณ์ž…๋‹ˆ๋‹ค.

 

์ผ๋ฐ˜์ ์œผ๋กœ fragmnet shader๋Š” 3D ํ™”๋ฉด์˜ ์ •๋ณด๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.(ํ”ฝ์…€ ์ƒ‰์ƒ์„ ๊ณ„์‚ฐํ•˜๊ธฐ ์œ„ํ•œ ๋น›, ๊ทธ๋ฆผ์ž ๋น›์˜ ์ƒ‰์ƒ ๋“ฑ)

 

Tests and Blendings

 

๋ชจ๋“  ํ•ด๋‹น ์ƒ‰์ƒ ๊ฐ’์ด ๊ฒฐ์ •๋œ ํ›„, ์ตœ์ข… ๊ฐ์ฒด๋Š” ์•ŒํŒŒ ํ…Œ์ŠคํŠธ ๋ฐ ๋ธ”๋ Œ๋”ฉ ๋‹จ๊ณ„๋ผ๊ณ  ๋ถ€๋ฅด๋Š” ๋˜ ํ•˜๋‚˜์˜ ๋‹จ๊ณ„๋ฅผ ๊ฑฐ์นฉ๋‹ˆ๋‹ค.

 

์ด ๋‹จ๊ณ„๋Š” ํ”„๋ž˜๊ทธ๋จผํŠธ์˜ ํ•ด๋‹น depth(๋ฐ ์Šคํ…์‹ค) ๊ฐ’์„ ํ™•์ธํ•˜๊ณ  ์ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฒฐ๊ณผ ํ”„๋ž˜๊ทธ๋จผํŠธ๊ฐ€ ๋‹ค๋ฅธ ๊ฐ์ฒด ์•ž์— ์žˆ๊ฑฐ๋‚˜ ๋’ค์— ์žˆ์–ด์•ผ ํ•˜๋Š”์ง€๋ฅผ ํŒ๋‹จํ•˜์—ฌ ๊ทธ์— ๋”ฐ๋ผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.

 

๋˜ํ•œ, ์•ŒํŒŒ ๊ฐ’(์•ŒํŒŒ ๊ฐ’์€ ๊ฐ์ฒด์˜ ๋ถˆํˆฌ๋ช…๋„๋ฅผ ์ •์˜ํ•จ)์„ ํ™•์ธํ•˜๊ณ  ๊ฐ์ฒด๋ฅผ ๊ทธ์— ๋”ฐ๋ผ ํ˜ผํ•ฉํ•ฉ๋‹ˆ๋‹ค.

 

๋”ฐ๋ผ์„œ ํ”„๋ž˜๊ทธ๋จผํŠธ ์…ฐ์ด๋”์—์„œ ํ”ฝ์…€ ์ถœ๋ ฅ ์ƒ‰์ƒ์ด ๊ณ„์‚ฐ๋˜์—ˆ๋‹ค ํ•˜๋”๋ผ๋„,

 

์—ฌ๋Ÿฌ ์‚ผ๊ฐํ˜•์„ ๋ Œ๋”๋งํ•  ๋•Œ ์ตœ์ข… ํ”ฝ์…€ ์ƒ‰์ƒ์€ ์™„์ „ํžˆ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

๋ณด์‹œ๋‹ค์‹œํ”ผ, ๊ทธ๋ž˜ํ”ฝ ํŒŒ์ดํ”„๋ผ์ธ์€ ์ƒ๋‹นํžˆ ๋ณต์žกํ•œ ์ „์ฒด์ด๋ฉฐ ๋งŽ์€ ๊ตฌ์„ฑ ๊ฐ€๋Šฅํ•œ ๋ถ€๋ถ„๋“ค์„ ํฌํ•จํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

 

๊ทธ๋Ÿฌ๋‚˜ ๊ฑฐ์˜ ๋ชจ๋“  ๊ฒฝ์šฐ์— ์šฐ๋ฆฌ๋Š” ์ •์  ๋ฐ ํ”„๋ž˜๊ทธ๋จผํŠธ ์…ฐ์ด๋”๋งŒ ์ž‘์—…ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

์ง€์˜ค๋ฉ”ํŠธ๋ฆฌ ์…ฐ์ด๋”๋Š” ์„ ํƒ ์‚ฌํ•ญ์ด๋ฉฐ ๋ณดํ†ต ๊ธฐ๋ณธ ์…ฐ์ด๋”๋กœ ๋‚จ๊ฒจ์ง‘๋‹ˆ๋‹ค. ๋˜ํ•œ, ์—ฌ๊ธฐ์—์„œ ๋ฌ˜์‚ฌํ•˜์ง€ ์•Š์€ ํ…Œ์…€๋ ˆ์ด์…˜ ๋‹จ๊ณ„์™€ ๋ณ€ํ™˜ ํ”ผ๋“œ๋ฐฑ ๋ฃจํ”„๊ฐ€ ์žˆ์ง€๋งŒ, ๊ทธ๊ฒƒ์€ ๋‚˜์ค‘์˜ ์ด์•ผ๊ธฐ์ž…๋‹ˆ๋‹ค.

 

 

ํ˜„๋Œ€ OpenGL์—์„œ๋Š” ์ตœ์†Œํ•œ ์ž์ฒด ์ •์  ๋ฐ ํ”„๋ž˜๊ทธ๋จผํŠธ ์…ฐ์ด๋”๋ฅผ ์ •์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(GPU์— ๊ธฐ๋ณธ ์ •์ /ํ”„๋ž˜๊ทธ๋จผํŠธ ์…ฐ์ด๋”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค).

 

์ด ๋•Œ๋ฌธ์— ํ˜„๋Œ€ OpenGL์„ ๋ฐฐ์šฐ๊ธฐ ์‹œ์ž‘ํ•˜๊ธฐ๊ฐ€ ์ข…์ข… ์–ด๋ ต์Šต๋‹ˆ๋‹ค.

 

์™œ๋ƒํ•˜๋ฉด ์ฒซ ์‚ผ๊ฐํ˜•์„ ๋ Œ๋”๋งํ•˜๊ธฐ ์ „์— ๋งŽ์€ ์ง€์‹์ด ํ•„์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

 

ํ•˜์ง€๋งŒ ์‚ผ๊ฐํ˜•์„ ๋ Œ๋”๋งํ•˜๊ฒŒ ๋˜๋ฉด ๊ทธ๋ž˜ํ”ฝ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์— ๋Œ€ํ•ด ํ›จ์”ฌ ๋” ๋งŽ์ด ์•Œ๊ฒŒ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

'๐Ÿ˜ธ OpenGL' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Learn OpenGL] Hello Triangle - 4  (0) 2023.11.18
[Learn OpenGL] Hello Triangle - 3  (0) 2023.11.17
[Learn OpenGL] Hello Triangle - 2  (0) 2023.11.17
[Learn OpenGL] Creating a window(M1 Mac, Xcode)  (0) 2023.11.16
[Learn OpenGL] OpenGL  (0) 2023.11.15