본문 바로가기

Game/Graphics

(68)
Learn OpenGL - Advanced OpenGL : Cubemaps link : https://learnopengl.com/Advanced-OpenGL/Cubemaps Cubemaps 우리는 잠시동안 2D 텍스처를 사용해 왔지만 지금까지 살펴보지 못한 더 많은 텍스처 유형이 있다. 이 튜토리얼에서는 사실 하나의 텍스처로 매핑된 여러 텍스처의 조합인 큐브 텍스처 유형에 대해 설명한다: 방향 벡터의 크기는 중요하지 않다. 방향이 제공되는 한 OpenGL은 방향이 도달하는 해당 텍셀을 검색하고, 제대로 샘플링 된 텍스쳐 값을 반환한다. 큐브 맵을 첨부할 큐브 모양이 있다고 상상하면 큐브 맵을 샘플링하는 방향 벡터는 큐브의 정점 위치와 유사하다. 큐브가 원점의 중앙에 있는 한 큐브의 실제 위치 벡터를 사용해 큐브 맵을 샘플링 할 수 있다. 그런 다음 모든 정점의 텍스처 좌표를 ..
Learn OpenGL - Advanced OpenGL : Framebuffers link : https://learnopengl.com/Advanced-OpenGL/Framebuffers Framebuffers 지금까지 우리는 여러 종류의 화면 버퍼를 사용했다: 색상 값을 쓰는 color buffer, 깊이 정보를 쓰는 depth buffer, 어떤 조건을 기반으로 특정 조각을 버릴 수 있는 stencil buffer. 이러한 버퍼의 조합을 framebuffer라고 하며 메모리의 어딘가에 저장된다. OpenGL은 우리 자신의 프레임 버퍼를 정의 할 수 있는 유연성을 제공하기 때문에 우리 자신의 색상 및 선택적으로는 깊이와 스텐실 버퍼를 정의 할 수도 있다. 지금까지 수행한 렌더링 작업은 모두 기본 프레임 버퍼에 첨부된 렌더링 버퍼 위에 수행되었다. 기본 프레임 버퍼는 윈도우를 만들 ..
Learn OpenGL - Advanced OpenGL : Face culling link : https://learnopengl.com/Advanced-OpenGL/Face-culling Face culling 3D 큐브를 시각화하고 어느 방향에서나 볼 수 있는 최대 면을 계산해보아라. 상상력이 너무 창의적이지 않은 경우 최대 수는 3이 될 것이다. 어떤 위치 또는 방향에서도 큐브를 볼 수 있지만 3개 이상의 면을 볼 수는 없다. 그렇다면 왜 우리가 볼 수 없는 다른 세 면을 그리는 노력을 낭비할 것인가? 우리가 어떤 방법으로 그것들을 버릴 수 있다면 우리는 조각 쉐이더 실행의 50% 이상을 절약할 수 있을 것이다.우리는 50% 대신 50% 이상이라고 말한다. 특정 가고에서 볼 때 2개 또는 심지어 1개의 면만이 보일 수 있기 때문이다. 이 경우 우리는 50% 이상을 절약할 수 있다..
LearnOpenGL - Advanced OpenGL : Blending link : https://learnopengl.com/Advanced-OpenGL/Blending Blending OpenGL에서 블렌딩은 일반적으로 객체 내에서 투명성을 구현하는 기술로 알려져 있다. 투명성은 단색을 가지지 않는 오브젝트에 관한 것이지만 오브젝트 자체와 그 뒤에 있는 다른 오브젝트의 색상을 다양한 강도로 조합한 것이다. (유색 유리창은 투명한 물체이다) 유리에는 자체 색상이 있지만 결과 색상에는 유리 뒤에 있는 모든 물체의 색상이 포함된다. 여러 색상(여러 오브젝트)을 단일 색상으로 혼합하기 때문에 블렌딩이라는 이름이 붙여진 까닭이기도 하다. 투명성은 객체를 통과해서 볼 수 있게 한다. 투명 오브젝트는 완전히 투명할 수 있다. (모든 색상을 통과시킬 수 있다는 말이다) 또는 부분적으로..
Learn OpenGL - Advanced OpenGL : Stencil testing link : https://learnopengl.com/Advanced-OpenGL/Stencil-testing Stencil testing 프래그먼트 쉐이더가 프래그먼트를 처리하고 나면, 깊이 테스트와 마찬가지로 조각을 파기 할 수 있는 스텐실 테스트가 실행된다. 그런 다음 남은 조각들은 더 많은 파편을 버릴 수 있는 깊이 테스트로 넘어간다. 스텐실 테스트는 스텐실 버퍼라는 또 다른 버퍼의 내용을 기반으로 한다. 스텐실 버퍼는 렌더링 중에 업데이트해 흥미로운 효과를 얻을 수 있다. 스텐실 버퍼는 스텐실 값당 8비트를 포함하며 pixel / fragment 당 총 256개의 스텐실 값을 갖는다. 그런 다음 이러한 스텐실 값을 원하는 값으로 설정한 다음 특정 조각에 특정 스텐실 값이 있을 때마다 조각을 버..
Learn OpenGL - Advanced OpenGL : Depth testing link : https://learnopengl.com/Advanced-OpenGL/Depth-testing Depth testing Coordinate systems 튜토리얼에서 우리는 3D 컨테이너를 렌더링하고 깊이 버퍼를 사용해 다른면 뒤에 있는 동안 face 렌더링을 앞쪽으로 방지한다. 이 튜토리얼에서는 깊이 버퍼가 저장하는 이러한 깊이 값과 실제로 조각이 다른 조각 뒤에 있는지 여부를 실제로 결정하는 방법에 대해 자세히 설명한다. 깊이 버퍼는 색상 버퍼 (모든 조각 색상을 저장하는 : 시각적 출력)와 마찬가지로 단편마다 정보를 저장하고 색상 버퍼와 동일한 너비와 높이를 갖는 버퍼이다. 깊이 버퍼는 윈도우 시스템에 의해 자동으로 생성되며 깊이 값은 16, 24, 32 비트 부동 소수점으로 저장된다..
Learn OpenGL - Model Loading : Model link : https://learnopengl.com/Model-Loading/Model Model 이제 Assimp로 손을 더럽히고 실제 로딩 및 변환 코드를 작성해라. 이 튜토리얼의 목표는 모델 전체를 나타내는 또 다른 클래스, 즉 다중 객체가 포함된 다중 메쉬를 포함하는 모델을 만드는 것이다. 목조 발코니, 타워 및 수영장이 포함된 집은 여전히 단일 모델로 로드될 수 있다. Assimp를 통해 모델을 로드하고, 마지막 튜토리얼에서 마든 여러 메쉬 객체로 변환한다. 더 이상 고민하지 않고 Model 클래스의 클래스 구조를 설명하겠다:class Model { public: /* Functions */ Model(char *path) { loadModel(path); } void Draw(Shader ..
Learn OpenGL - Model Loading : Mesh link : https://learnopengl.com/Model-Loading/Mesh Mesh Assimp를 사용하면 많은 다른 모델을 응용 프로그램에 로드할 수 있지만, 일단 로드되면 모두 Assimp의 데이터 구조에 저장된다. 우리가 결국 원하는 것은 OpenGL이 이해할 수 있는 형식으로 데이터를 변환해 객체를 렌더링 할 수 있게 하는 것이다. 이전 튜토리얼에서 메쉬는 하나의 drawable entity를 나타내므로 우리 자신의 메쉬 클래스를 정의해보겠다. 지금까지 배운 것들을 검토해 메쉬가 데이터로서 갖는 최소한의 역할에 대해 생각해보자. 메쉬에는 적어도 각 꼭지점에 위치 벡터, 법선 벡터, 텍스처 좌표 벡터가 포함된 일련의 꼭지점이 있어야한다. 메쉬에는 인덱스된 드로잉에 대한 인덱스와 텍스처..