OpenGL 23

[OpenGL] 후면 컬링(back face culling)와 CCW(오른손법칙)

후면 컬링(Back-face culling)은 카메라를 향하지 않는 즉 화면에 보이지 않는 뒷면을 렌더링 하지 않고 건너뛰는 것을 말합니다. 이 기법은 뒷면이 보이지 않는 객체의 렌더링 성능을 향상하는 데 사용됩니다.일반적으로 3D 객체는 양면을 가지며, 이것은 객체의 정면과 후면을 의미합니다. 정면은 관찰자나 카메라 쪽으로 향하는 면이고, 후면은 그 반대쪽 면입니다. 보통 우리는 정면만을 보고 객체를 관찰하게 됩니다. 후면은 보이지 않기 때문에 렌더링 할 필요가 없습니다.후면 컬링은 다음과 같은 단계로 이루어집니다: 후면컬링은 오른손법칙(CCW)에 따라서 전면과 후면을 나눈다. 화면 공간 변환: 객체의 모든 정점은 모델 좌표계에서 월드 좌표계, 뷰 좌표계를 거쳐 화면 좌표계로 변환됩니다.폴리곤의 정면과..

OpenGL 2024.04.17

[OpenGL] ※Depth와 Z 버퍼 알고리즘

Deopth Concepts의 OpenGL에서의 Z 축은 관찰자(카메라)에서 물체까지의 거리를 나타내는 데 사용됩니다. Z 축의 값이 작을수록 물체가 관찰자에 가깝고, 값이 클수록 물체가 관찰자에서 멀어집니다. OpenGL에서 Z 축을 사용하여 깊이 버퍼(Depth Buffer)를 구현합니다. 깊이 버퍼는 각 픽셀의 깊이(즉, Z 값)를 저장하는 버퍼로, 렌더링 되는 모든 물체의 깊이를 추적합니다. 이를 통해 OpenGL은 후속 렌더링 프로세스에서 각 픽셀의 깊이를 확인하여 깊이 테스트를 수행하고, 화면에 가장 가까운 물체만을 표시할 수 있습니다. 3차원 장면에서 관찰자에게 보이는 표면 또는 표면의 일부를 결정하고, 다른 표면에 의해 가려진 표면을 식별합니다. 이를 통해 최종 이미지에 기여하는 표면만 렌..

OpenGL 2024.04.17

[OpenGL] GLFW time 함수

double glfwGetTime(void) 실행 초기 0.0초로 reset되어 실행시간을 second로 알려준다. void glfwSetTime(double time) GLFW 내부 TIMER를 주어진 시간 time으로 변경한다. 보통 reset용도로 사용한다. void updateFunc(void) { float elapsedTime = (float)glfwGetTime(); theta = elapsedTime * (float)M_PI_2; // in , M_PI_2 = pi/2 } void keyFunc(GLFWwindow* window, int key, int scancode, int action, int mods) { switch (key) { case GLFW_KEY_ESCAPE: if (ac..

OpenGL 2024.04.16

[OpenGL] OpenGL와 GLM(OpenGL Mathematics)

GLM이란 OpenGL을 위한 수학 라이브러리로 대부분 vector와 matrix를 계산하는 기하학으로 이루어져 있다. OpenGL에서 사용하기 위한 수학 라이브러리입니다. 이 라이브러리는 벡터, 행렬, 쿼터니언 등을 다루는 함수와 클래스를 제공하여 OpenGL 애플리케이션에서 수학적 연산을 수행할 때 편리하게 사용할 수 있도록 돕습니다. GLM은 C++ 템플릿 라이브러리로 구현되어 있으며, OpenGL에서 자주 사용되는 데이터 형식과 연산을 지원합니다. 주로 변환, 투영, 회전 등의 그래픽 관련 수학적 계산에 사용됩니다. 또한 DLSL에서는 Vertex shader나 Fragment shader의 vector연산과 matrix연산을 c++에서도 사용가능하게 해준다 하지만 차이점으론 DLSL에서는 Ver..

OpenGL 2024.04.16

[OpenGL] ※그래픽 파이프라인과 GLSL(ShaderProgram)

전통적인 그래픽스 파이프라인 예전에는 모두 fixed vlsi칩으로 구현했기 때문에 수정할 수 없다. Vertex input Vertex Processing primitive assembly rasterization fragment processing blend framebuffer fixed hardware Vertex Processing 입력받은 Vertex의 좌표 변환(transform) 필요하다면 위치를 조금씩 수정한다. Primitive assembly vertex(꼭지점)를 결합한다. (graphics primitive) 1vertex(점), 2vertex(선), 3vertex(삼각형) 컴퓨터 테크픽스 관점에서는 다른 다각형들을 모두 삼각형으로 분해할 수 있다. 그래서 삼각형으로 최적화하려는 ..

OpenGL 2024.04.03

[OpenGL] 래스터 저장방식과 컬러

래스터 저장방식 이는 기본적으로 3D 모델을 화면에 픽셀로 렌더링하는 프로세스를 의미합니다. 래스터화란, 3차원 공간에서의 객체들을 2차원 화면에 표현하기 위해 필요한 작업들을 의미합니다. OpenGL에서 래스터화는 다음과 같은 단계로 이루어집니다: 정점 처리(Vertex Processing): 래스터화 프로세스는 우선 3D 모델의 정점들을 처리합니다. 이 과정에서는 정점의 좌표를 변환하고, 조명, 텍스처, 카메라의 시점 등과 같은 다양한 효과들이 적용됩니다. 기하 처리(Geometry Processing): 정점 처리 이후, OpenGL은 이들 정점을 기하적으로 처리합니다. 이 과정에서는 정점들을 선, 삼각형 등의 기본 기하 요소들로 결합하고, 클리핑(화면 영역 밖의 기하 요소들을 제거) 등의 작업을 ..

OpenGL 2024.04.03

[OpenGL] Delayed execution 지연실행와 glFlush, glFinish

OpenGl 함수는 효율성을 높이기 위해 명령어 큐에 기록하고 바로 retrun한다. OpenGL에서의 delayed execution은 일반적으로 OpenGL 명령이 실제로 그래픽 처리 장치인 GPU에 의해 처리될 때까지 실행이 지연되는 것을 의미합니다. OpenGL에서 그래픽 명령을 호출하면 이러한 명령들은 일반적으로 버퍼에 쌓이게 됩니다. 그러나 이들 명령이 실제로 그래픽 처리 장치인 GPU에 의해 실행되는 시점은 보장되지 않습니다. OpenGL은 이들 명령을 GPU에 보내고, GPU가 이들을 처리할 때까지 기다리지 않습니다. 따라서 OpenGL 명령이 실제로 실행되는 지점은 명령을 호출한 다음 프레임 버퍼를 사용하거나 명령의 결과를 읽어들일 때까지 알 수 없습니다. 이러한 delayed execu..

OpenGL 2024.04.02

[OpenGL] Double buffering와 glfwSwapBuffers

화면을 업데이트하다가 생기는 문제 때문에 하드웨어적인 해결처를 찾은 게 double buffering이다. 우선 프레임버퍼는 그래픽스 카드상에 있는 특별한 2D Array를 의미한다. 쉐도우 프레임을 이용하여 2D Array인 프레임 버퍼 에다 어떤 내용을 업데이트한다. 그러면 그래픽 카드에 하드로 구현되어 있는 디스플레이 프로세서가 이 2d Array를 계속 무한 반복해서 모니터에 그대로 보여준다. 디스플레이 프로세서는 1초에 60~ 120번 정도에 굉장히 빠른 속도로 화면을 업데이트하고 있는 게 문제가 될 수 있다. Partial Update Problem이라는 문제로 어떤 경우는 처음에 OpenGL 프로그램에서 쉐이드 프로그램이 프레임 버퍼에 그림을 다 그려놓은 상황에서는 문제가 없다. 하지만 Op..

OpenGL 2024.04.02

[OpenGL] GLAD 설치 및 사용법

GLAD는 라이브러리를 인스톨 하는것이아닌 필요한 소스 코드를 생성해서 내 프로젝트에 가져가는 개념이다. Url : https://glad.dav1d.de/ https://glad.dav1d.de/ Extensions... glad.dav1d.de 생성 원하는 버전 선택 후 생성 include 복사 다운받은 glad폴더의 include폴더안 glad, KHR폴더를 C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\xx.yy.zzzzz\include 안에 복사해준다. glad.c 사용 glad.c는 직접 소스코드에 포함시킨다. #include #include #pragma comment(lib, "glew32.lib") #pragm..

OpenGL 2024.04.01

[OpenGL] GLEW 설치 및 적용 방법 (glew32.dll 오류해결)

GLEW는 크로스플랫폼으로 서로 다른 플랫폼에서 사용하여 서로다른 플랫폼간의 호환성 문제를 해결할 수 있습니다. 확장 로딩: GLEW는 OpenGL 확장 로딩을 자동으로 처리하여 개발자의 프로세스를 단순화합니다.이식성: Windows, macOS 및 Linux와 같은 여러 플랫폼과 호환됩니다.확장 쿼리: 애플리케이션이 실행되는 컴퓨터에서 OpenGL 확장이 지원되는지 쉽게 확인할 수 있습니다. 다운로드 URL : https://glew.sourceforge.net/ GLEW: The OpenGL Extension Wrangler LibraryThe OpenGL Extension Wrangler Library The OpenGL Extension Wrangler Library (GLEW) is a cros..

OpenGL 2024.03.29