λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
πŸ’» DEV/연ꡬλͺ©λ‘

[WebGL - regl] (2) regl 예제 속 GLSL μ½”λ“œ 해석

by Rising Oneβ˜… 2024. 8. 8.
728x90
λ°˜μ‘ν˜•
SMALL

 

β—ΌοΈŽ 셰이더 μ½”λ“œ & GLSL κΈ°λ³Έ μ½”λ“œν•΄μ„

* 셰이더 μ½”λ“œ:

- Graphics Programmingμ—μ„œ GPUκ°€ 화면에 λ Œλ”λ§ν•  κ·Έλž˜ν”½μ„ μ œμ–΄ν•˜κΈ° μœ„ν•΄ μž‘μ„±ν•˜λŠ” ν”„λ‘œκ·Έλž¨

- κ·Έλž˜ν”½μŠ€ μΉ΄λ“œμ˜ GPUμ—μ„œ 직접 싀행이 λœλ‹€.

 

λ²„ν…μŠ€ 셰이더 (Vertex Shader)

: 각 μ •μ μ˜ μœ„μΉ˜λ₯Ό λ°˜ν™˜ν•˜κ³ , μ •μ μ˜ 속성(색상, μ’Œν‘œ) 처리

- μž…λ ₯ : 정점 데이터 μž…λ ₯ λ°›μŒ

- 좜λ ₯ : λ°˜ν™˜λœ 정점 μœ„μΉ˜μ™€ κ΄€λ ¨ 정보 좜λ ₯

 

ν”„λž˜κ·Έλ¨ΌνŠΈ 셰이더 (Fragment Shader)

: ν™”λ©΄μ˜ 각 픽셀에 색상 값을 계산

- μž…λ ₯ : 각 ν”½μ…€μ˜ 데이터 μž…λ ₯ λ°›μŒ

- 좜λ ₯ : μ΅œμ’… 색상 값을 화면에 좜λ ₯


* GLSL: GPUμ—μ„œ μ‹€ν–‰λ˜λŠ” 셰이더 ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜λŠ” μ–Έμ–΄

 

β—ΌοΈŽ vec2 : 2차원 벑터 

- 2개의 뢀동 μ†Œμˆ˜μ  κ°’μœΌλ‘œ ꡬ성

(2D μ’Œν‘œ ν‘œν˜„ - 2개의 μ‹€μˆ˜ κ°’ ν•„μš”)

 

β—ΌοΈŽ vec4 : 4차원 벑터

- 4개의 뢀동 μ†Œμˆ˜μ  κ°’μœΌλ‘œ ꡬ성

(3D 곡간 μ’Œν‘œ ν‘œν˜„ or 색상-λ°©ν–₯-벑터 λ“±μ˜ 4개의 값이 ν•„μš”ν•œ μž‘μ—…μ— μ‚¬μš©)

const vertexShaderSource = `
        attribute vec2 a_position;
        void main() {
          gl_Position = vec4(a_position, 0.0, 1.0);
        }
      `;

 

β—ΌοΈŽ attribute (속성)

attribute vec2 a_position;

# attribute(속성) λ³€μˆ˜κ°€ WebGL λ²„νΌμ—μ„œ 데이터λ₯Ό κ°€μ Έμ˜€λŠ” 역할을 ν•œλ‹€.
# vec2 (2개의 μ‹€μˆ˜λ₯Ό ν•„μš”λ‘œ ν•˜λŠ” 2차원 벑터)에 
# a_position(μ •μ μ˜ μœ„μΉ˜ μ €μž₯)의 μ’Œν‘œλ₯Ό λ„£μŒ(=> 2Dμž„μ„ μ•Œ 수 μžˆλ‹€)

 

- 속성(attribute) λ³€μˆ˜λŠ” λ²„νΌμ—μ„œ 데이터λ₯Ό κ°€μ Έμ˜€λŠ” 역할을 ν•œλ‹€.

(λ²„νΌλŠ” μœ„μΉ˜, μ’Œν‘œ, 색상 등을 ν¬ν•¨ν•˜μ§€λ§Œ μ›ν•˜λŠ” 것을 넣을 수 있음)

 

 

  • vec2: 2차원 벑터 (x, y).
  • vec4: 4차원 벑터 (x, y, z, w).
  • attribute vec2 a_position;: λ²„ν…μŠ€μ˜ 2D μœ„μΉ˜ 속성을 μ •μ˜ν•©λ‹ˆλ‹€.
  • void main(): μ…°μ΄λ”μ˜ μ£Ό ν•¨μˆ˜λ‘œ, 각 λ²„ν…μŠ€μ˜ μ΅œμ’… μœ„μΉ˜λ₯Ό κ³„μ‚°ν•©λ‹ˆλ‹€.
  • gl_Position = vec4(a_position, 0.0, 1.0);: 2D μœ„μΉ˜λ₯Ό 4D μœ„μΉ˜λ‘œ λ³€ν™˜ν•˜μ—¬, WebGL의 μ’Œν‘œκ³„μ—μ„œ μ‚¬μš©ν•  수 μžˆλ„λ‘ ν•©λ‹ˆλ‹€.

 

 

 

728x90
λ°˜μ‘ν˜•
LIST

λŒ“κΈ€