본문 바로가기

OpenGL

(53)
LearnOpenGL - Advanced OpenGL : Advanced Data link : https://learnopengl.com/Advanced-OpenGL/Advanced-Data Advanced Data OpenGL의 버퍼를 사용해 꽤 오랫동안 데이터를 저장했다. 텍스처를 통해 많은 양의 데이터를 쉐이더에 전달하는 버퍼 및 기타 흥미로운 메소드를 조작하는 더 흥미로운 방법이 있다. 이 튜토리얼에서는 보다 흥미로운 버퍼 함수와 텍스처 객체를 사용해 많은 양의 데이터를 저장하는 방법에 대해 설명한다. OpenGL의 버퍼는 특정 메모리와 그 이상을 관리하는 객체일 뿐이다. 버퍼를 특정 버퍼 대상에 바인딩 할 때 버퍼에 의미를 부여한다. 버퍼는 GL_ARRAY_BUFFER에 바인드 할 때 단지 정점 배열 버퍼일 뿐이지만 GL_ELEMENT_ARRAY_BUFFER에 쉽게 바인드 할..
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 - 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를 나타내므로 우리 자신의 메쉬 클래스를 정의해보겠다. 지금까지 배운 것들을 검토해 메쉬가 데이터로서 갖는 최소한의 역할에 대해 생각해보자. 메쉬에는 적어도 각 꼭지점에 위치 벡터, 법선 벡터, 텍스처 좌표 벡터가 포함된 일련의 꼭지점이 있어야한다. 메쉬에는 인덱스된 드로잉에 대한 인덱스와 텍스처..
Learn OpenGL - Model Loading : Assimp link : https://learnopengl.com/Model-Loading/Assimp Assimp 지금까지 모든 장면에서 우리는 다양한 방법으로 우리의 작은 컨테이너 친구를 광범위하게 학대했지만 시간이 지남에 따라 가장 친한 친구조차도 조금 지루할 수 있다. 실용적인 그래픽 응용 프로그램에는 일반적으로 정적 컨테이너보다 훨씬 더 보기 좋고, 복잡하고, 흥미로운 모델이 많이 있다. 그러나 컨테이너 객체와 달리 주택, 차량 또는 사람과 유사한 복잡한 모양의 모든 정점, 법선 및 텍스처 좌표를 실제로 수동으로 정의할 수는 없다. 우리가 원하는 것은 이 모델들을 어플리케이션으로 임포트하는 것이다.(Blender, 3DS Max 또는 Maya와 같은 도구에서 3D아티스트가 신중하게 설계한 모델) 이러한 소..