일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 이진 분류
- 범용 근사 정리
- DP
- dl
- bfs
- dijkstra
- 베버의 법칙
- Perceptron
- union-find
- 다익스트라
- OpenGL
- deep learning
- BOJ
- 경사하강법
- 단층 퍼셉트론
- 베르누이 분포
- c++
- 알고리즘
- 동적계획법
- 계단 함수
- 과대적합
- vanishing gradient
- 손실 함수
- 순방향 신경망
- 기울기 소실
- 딥러닝
- 백준
- 3d
- 이진분류
- feedforward neural network
- Today
- Total
목록OpenGL (13)
Hello COCOBALL!

GLSL’s built-in variables shader는 파이프라이닝 되어 있기 때문에 shader 밖의 다른 데이터가 필요한 경우에 데이터를 전달해야 한다. 데이터 전달 방식에는 vertex attributes, uniforms, samplers 등이 있고, 추가로 gl_ 접두사로 시작하는 내장 변수가 있다.(gl_Position, gl_FragCoord) Vertex shader variables 1. gl_PointSize OpenGL의 glPointSize 함수를 사용하여 설정할 수 있지만, vertex shader에서도 설정이 가능하다. float 타입의 출력 변수이고 point의 너비와 높이를 픽셀 단위로 설정이 가능하다. vertex shader에서 point size를 설정하면 vert..
지금까지 우리는 데이터를 GPU에 저장하기 위해 버퍼를 많이 사용했지만, 이번 챕터에서는 지금까지 우리가 해온 버퍼의 관리에 대한 대안을 제시한다. Buffer in OpenGL OpenGL에서의 버퍼는 GPU의 특정 메모리를 관리하는 객체 그 이상도 그 이하도 아니다. 특정한 buffer target에 바인딩하여 버퍼에 의미를 부여한다. 내부적으로 target마다 버퍼에 대한 참조를 저장하고, 버퍼를 따로 처리한다. 지금까지는 glBufferData 함수의 호출을 통해 버퍼 메모리를 채웠다. 만약 함수의 data 파라미터로 NULL을 준다면 이 함수는 메모리 할당만 하고 데이터를 채우지 않는데, 이는 특정 메모리 크기를 예약하고 나중에 버퍼를 채우려는 경우에 유용하다. 하나의 함수로 버퍼 전체를 채우는..

큐브의 6개의 면을 형성하는 2D 텍스처를 포함하고 있는 텍스처이다. 방향벡터를 사용하여 인덱싱/샘플링 될 수 있다는 장점이 있다. 1x1x1 단위 큐브와 중앙에 위치한 방향벡터의 원점을 가질 때, cube map으로부터 텍스처를 샘플링 하는 것은 다음 그림과 같다. 방향벡터의 크기는 상관없이, 방향만 주어지면 방향벡터가 만나게 되는 텍셀을 얻는다. cubemap을 샘플링하는 방향 벡터는 cube의 보간된 vertex 위치와 비슷하다. 다음과 같은 방식으로 큐브가 원점에 존재한다면 큐브의 위치 벡터를 이용해서 cubemap을 샘플링 할 수 있고, 큐브의 vertex 위치를 텍스처 좌표로 고려한다. 그 결과 cubemap의 각각의 face를 접근할 수 있는 텍스처 좌표를 얻을 수 있다. Creating a..

screen buffer color buffer depth buffer stencil buffer 모든 screen buffer를 결합한 것을 framebuffer라 부르고, GPU 메모리 어딘가에 저장된다. default framebuffer window를 생성할 때 생긴다. 지금까지 우리가 수행한 렌더링 작업은 defalut framebuffer에 있는 render buffer에서 수행됨 우리만의 framebuffer를 생성하면 렌더링 하는데에 추가적인 기능을 얻을 수 있음 Creating a framebuffer framebuffer 객체 생성 unsigned int fbo; glGenFramebuffers(1, &fbo); framebuffer 바인딩 glBindFramebuffer(GL_FRAM..

3D cube를 그릴 때, 어느 방향에서 봐도 최대 3개의 면을 볼 수 있기 때문에 나머지 3개의 면은 그릴 필요가 없음 → 볼 수 없는 면을 그리지 않음으로 인해 fragment shader의 동작을 50% 이상 줄일 수 있다 그렇다면 특정한 면이 viewer에게 보이지 않는다는 것을 어떻게 알것인가? 모든 닫힌 면은 양면을 가지고 있고, 한쪽은 viewer에게 향해 있고 다른 한쪽은 viewer를 등진다. → viewer에게 향하고 있는 면만 렌더링 ( 이것이 face culling이 하는 작업 ) front facing은 렌더링 하고, back facing은 렌더링 하지 않는다. 이제 우리는 OpenGL에게 front인지 back인지 알려주는 특정한 방식이 필요하다. Winding order Ope..

Blending은 물체의 투명도와 관련이 있고, 투명한 object는 완전히 투명하거나 부분적으로 투명할 수 있다. Object의 투명도는 color의 alpha value에 의해 결정 alpha value가 0.5인 경우, object의 색의 반은 자신의 색, 나머지 반은 object 뒤에 있는 색으로 결정됨 texel 단위마다 alpha value를 가지는 texture도 있음 Discarding fragments 다음과 같은 그림에서 grass는 1.0의 alpha value를 가지고, 나머지 배경인 흰색 부분은 0.0의 alpha value를 가진다. 이러한 경우, 텍스쳐에서 투명한 부분은 discard하고 그리고자 하는 것이 일반적이다. OpenGL은 기본적으로 alpha value를 어떤 방식..

fragment shader의 fragment 처리 후 수행되는 stencil test에서는 fragment가 폐기될지 말지 테스트 하는 단계 그 후에 depth test로 보내져서 폐기될지 말지 다시 한번 테스트 된다. 지금까지 배운 buffer와 다르게 stencil buffer라 불리는 buffer를 기반으로 수행된다. stencil buffer는 일반적으로 8비트의 stencil value를 가지고 있고, pixel/fragment마다 256개의 값으로 나타내진다. general outline stencil testing 활성화 glEnable(GL_STENCIL_TEST); color, depth buffer와 마찬가지로 매 렌더링 루프마다 stencil buffer를 비운다. glClear(G..

depth buffer는 버퍼의 한 종류이고, fragment의 정보를 저장하고 color buffer와 동일한 크기를 가짐. 윈도우 시스템에 의해 자동으로 생성되고 깊이 값들을 16,24,32비트 실수형으로 저장(대부분 24bit) Depth testing은 fragment shader, stencil testing이 수행된 후 screen space에서 수행, gl_FragCoord 변수를 통해 접근 가능 gl_FragCoord 변수의 x,y 요소는 fragment의 screen space 좌표와 실제 깊이값을 가지는 z 요소도 포함(z 값은 depth buffer와 비교할 값) 먼저 depth testing을 활성화 시킨다. glEnable(GL_DEPTH_TEST); 렌더링 루프가 돌 때 마다 버..
Model class class Model { public: Model(char *path) { loadModel(path); } void Draw(Shader shader); private: // model data vector meshes; string directory; void loadModel(string path); // 파일을 불러옴 void processNode(aiNode *node, const aiScene *scene); Mesh processMesh(aiMesh *mesh, const aiScene *scene); vector loadMaterialTextures(aiMaterial *mat, aiTextureType type, string typeName); }; private 함..

Assimp를 통해 불러온 모델은 Assimp 데이터 구조의 형식으로 저장됨 OpenGL이 이해할 수 있는 포맷으로 변환 시키는 작업이 필요함 mesh : 그려질 수 있는 하나의 독립체 vertex에 대한 정의 struct Vertex { glm::vec3 Position; glm::vec3 Normal; glm::vec2 TexCoords; }; texture 정보 별도로 저장 struct Texture { unsigned int id; string type; // diffuse texture, specular texture .. }; mesh class의 구조 class Mesh { public: // mesh data vector vertices; vector indices; vector textu..