βΌοΈ μ °μ΄λ μ½λ & 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μ μ’νκ³μμ μ¬μ©ν μ μλλ‘ ν©λλ€.
'π» DEV > μ°κ΅¬λͺ©λ‘' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Webstorm] SSH Key Passphrase μΈμ¦ (ν€λ§€μΈ μ€ν 리) (0) | 2024.11.22 |
---|---|
[WebGL - regl] (μ λ΅) WebGL μ’νκ³λ₯Ό ν½μ μ’νκ³λ‘ λ³ν (0) | 2024.08.08 |
[WebGL - regl] (1) regl μ΄λ? (0) | 2024.08.08 |
[Figma] We can't open that file μλ¬ ν΄κ²° (WebGL) (0) | 2023.12.13 |
[Git] SSH ν€ μμ±νλ λ°©λ² & SSH ν€ μ°Ύλ λ°©λ² (0) | 2023.11.15 |
λκΈ