| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | |||||
| 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| 10 | 11 | 12 | 13 | 14 | 15 | 16 |
| 17 | 18 | 19 | 20 | 21 | 22 | 23 |
| 24 | 25 | 26 | 27 | 28 | 29 | 30 |
| 31 |
- 베르누이 분포
- bfs
- 기울기 소실
- DP
- 알고리즘
- 동적계획법
- dl
- 과대적합
- deep learning
- Perceptron
- 다익스트라
- 딥러닝
- dijkstra
- 단층 퍼셉트론
- OpenGL
- 백준
- 계단 함수
- 이진 분류
- 범용 근사 정리
- 순방향 신경망
- 3d
- 경사하강법
- c++
- union-find
- 베버의 법칙
- 손실 함수
- 이진분류
- BOJ
- vanishing gradient
- feedforward neural network
- Today
- Total
Hello COCOBALL!
[LearnOpenGL] 25. Face culling 본문
3D cube를 그릴 때, 어느 방향에서 봐도 최대 3개의 면을 볼 수 있기 때문에 나머지 3개의 면은 그릴 필요가 없음 → 볼 수 없는 면을 그리지 않음으로 인해 fragment shader의 동작을 50% 이상 줄일 수 있다
그렇다면 특정한 면이 viewer에게 보이지 않는다는 것을 어떻게 알것인가?
모든 닫힌 면은 양면을 가지고 있고, 한쪽은 viewer에게 향해 있고 다른 한쪽은 viewer를 등진다.
→ viewer에게 향하고 있는 면만 렌더링 ( 이것이 face culling이 하는 작업 )
front facing은 렌더링 하고, back facing은 렌더링 하지 않는다.
이제 우리는 OpenGL에게 front인지 back인지 알려주는 특정한 방식이 필요하다.
Winding order
OpenGL은 렌더링 할 때 clockwise, counter-clockwise 정보를 활용하여 front-facing인지 back-facing인지 결정 ( default : 반시계 방향이 front-facing)

Face culling
glEnable(GL_CULL_FACE);
다음 함수를 호출한 이후로부터, front-facing이 아닌 경우 모두 폐기된다.
glCullFace(GL_FRONT);
여러 옵션으로 폐기하고 싶은 면의 유형을 바꿀 수 있다. (default : GL_BACK)
- GL_BACK: Culls only the back faces.
- GL_FRONT: Culls only the front faces.
- GL_FRONT_AND_BACK: Culls both the front and back faces.
glFrontFace(GL_CCW);
OpenGL에게 시계 방향의 면이 후면이 아닌 전면이라고 알릴 수 있다.
기본값은 GL_CCW이고, GL_CW는 시계 방향을 의미한다.
example
glEnable(GL_CULL_FACE);
glCullFace(GL_BACK);
glFrontFace(GL_CW);
glEnable(GL_CULL_FACE);
glCullFace(GL_FRONT);
두 개의 example 코드의 결과는 후면만 렌더링 된다.

face culling은 적은 비용으로 OpenGL의 성능을 증가시킬 수 있다는 이점이 있다.
'OpenGL' 카테고리의 다른 글
| [LearnOpenGL] 27. Cubemaps (0) | 2022.08.22 |
|---|---|
| [LearnOpenGL] 26. Framebuffers (0) | 2022.08.22 |
| [LearnOpenGL] 24. Blending (0) | 2022.08.22 |
| [LearnOpenGL] 23. Stencil testing (1) | 2022.08.22 |
| [LearnOpenGL] 22. Depth testing (1) | 2022.08.22 |