전체 글
-
Opengl 지오메트리 쉐이더(geometry shader, 기하 쉐이더)3D웹 프로그래밍/opengl 2020. 11. 19. 16:26
지오메트리 쉐이더 지오메트리 쉐이더는 버텍스 스테이지와 테셀레이션 스테이지의 다음단계이며, 개념적으로는 마지막 쉐이더 스테이지다. 지오메트리 쉐이더는 프리미티브당 한 번 수행되며, 수행되는 프리미티브를 구성하는 모든 버텍스에 대한 입력 버텍스 데이터에 접근할수있다. 또한 데이터 흐름의 양을 증가시키거나 감소시킬수있는 유일한 쉐이더 스테이지다. 지오메트리는 EmitVertex()와 EndPrimitive()함수를통해 프리미티브 어셈블리 및 래스터라이제이션으로 보내는 버텍스를 명시적으로 생성할 수 있다. 지오메트리 쉐이더의 다른 고유한 기능으로 파이프라인 중간에 프리미티브의 모드를 변경하는 기능이 있다. 예를들면 삼각형들을 입력으로 하여 여러 점이나 선을 출력으로 만들어 낼수있다. 예를들면 static co..
-
Opengl 테셀레이션3D웹 프로그래밍/opengl 2020. 11. 19. 15:34
테셀레이션 테셀레이션은 고차 프리미티브(Opengl에서는 패치로 알려져 있다.)를 더 작고, 단순한 여러 개의 렌더링 가능한 프리미티브로 분할하는 작업이다. OpenGL은 고정 함수며 설정 가능한 테셀레이션 엔진을 포함하는데,이 테셀레이션 엔진은 사각형,삼각형,선들을 더 많고 더우우우욱 작은 점,선 삼각형등으로 분할한다!. 테셀레이션 컨트롤 쉐이더 세가지 테셀레이션 단계중 첫번째는 테셀레이션 컨트롤 쉐이더이다. 이 쉐이더는 버텍스 쉐이더로부터 입력을 받아 주로 두 가지 일을 수행한다. 하나는 테셀레이션 엔진에 보낼 테셀레이션의 레벨을 결정하는것이고, 두번째는 테셀레이션이 수행된 다음에 실행되는 테셀레이션 이벨류에이션 쉐이더에 보낼 데이터를 생성하는일이다. Opengl에서 테셀레이션은 패치라고 부르는 고차..
-
opengl 삼각형을 이용하여 타원그리기3D웹 프로그래밍/opengl 2020. 11. 19. 14:47
1.버텍스 쉐이더에 데이터 전달하기 버텍스 쉐이더는 OpenGL 파이프라인의 첫번째 프로그래밍 가능한 스테이지이다. 또한 유일한 필수 스테이지기도하다. 하지만 버텍스 쉐이더가 실행되기전에 버텍스 페칭 또는 버텍스 풀링이라는 고정 함수 스테이지가 실행된다. 버텍스 쉐이더에서 데이터를 가져오거나 내보내자는 작업은 in,out저장 지시어로 전역변수를 선언하는 방식으로 수행한다. Opengl파이프라인 시작 시 in 키워드를 사용하여 버텍스 쉐이더에 입력을 제공한다. in 저장 지시어를 사용하면, 해당 변수는 버텍스 쉐이더의 입력으로 설정되는데, 이는 고정 함수 버텍스 페치 스테이지에 의해 그 내용이 자동적으로 채워진다. 이 변수를 버텍스 속성이라고 부른다. #version 430 core layout (loca..
-
opengl 삼각형 그리기3D웹 프로그래밍/opengl 2020. 11. 19. 13:32
삼각형 그리기 Opengl은 많은 프리미티브 타입을 제공한다. 그중에서 점, 선 ,삼각형이 제일 중요하다. 앞의 글에서 한 점을 그릴때 GL_POINTS값을 glDrawArrays()함수에 제공했는데, 이제 선이나 삼각형을 넣어보자. glDrawArrays()에 GL_LINES나 GL_TRIANGLES를 전달할수있다. 하지만 여기에 한가지 문제가있다. #version 430 core void main(void){ gl_Position =vec4(0.0,0.0,0.5,1.0); } 위와 같이 그전에 그렸던 버텍스 쉐이더는 모든 버텍스를 같은 위치에 배치한다. 즉, 클립 공간의 한가운데에 점을 그려도 OpenGL이 그릴 영역을 확보해주므로 별문제가 없다. 하지만 선이나 삼각형의 경우에는 둘 이상의 버텍스가 ..
-
기본적인 Opengl 프로그램 만들기3D웹 프로그래밍/opengl 2020. 11. 18. 18:32
모든 Opengl 함수는 gl 로 시작한다. #include class simpleclear_app : public sb6::application { void init() { static const char title[] = "Simple Clear"; sb6::application::init(); memcpy(info.title, title, sizeof(title)); } virtual void render(double currentTime) { static const GLfloat red[] = { 1.0f, 0.0f, 0.0f, 1.0f }; glClearBufferfv(GL_COLOR, 0, red); } }; DECLARE_MAIN(simpleclear_app) ㅇ 해당 함수의 일부 인자타입을..
-
OpenGl sh6.h 환경설정 하는법3D웹 프로그래밍/opengl 2020. 11. 18. 17:37
Opengl super bible 개정 6판을 보면 코드 내용은 있는데 환경설정법이 없다... 이 불친절한 책이란.. 그래서 구글링하여 install 했다. 일단 한빛미디어 opengl super bible에는 예제 source를 다운받자. E:\download\source\sb6code-master\extern\glfw-2.7.6\support\msvc100 을 실행하자 ! visual studio 2010 초과 버전을 설치하면 소스 업데이트를 할거냐고 물어보는데 업데이트를 해주자 그후 GLFW.sln을 실행한뒤 GLFW 오른쪽클릭후 속성에 들어가자 그후 아래와 같이 설정을 해주자 그리고 여기서 중요한것은 Configuration을 release와 debug 둘다 해주길 바란다. 설정이 끝났으면 아래와..
-
opengl 개발 환경 만들기3D웹 프로그래밍/opengl 2020. 11. 18. 16:08
준비물 visual studio 2019 glfw 라이브러리 www.glfw.org/download.html GLFW - Download These packages contain the GLFW header files, documentation and release mode static libraries, DLLs and import libraries for Visual C++ 2010-2019, MinGW-w64 and plain MinGW. Binaries for Visual C++ 2010 and plain MinGW are only available in the 32-bit pack www.glfw.org glfw 64bit windows binaris 를 인스톨하자. 설치후 압축을 풀면 위 사진..
-
Opengl과 그래픽스 파이프라인 및 Opengl 기초3D웹 프로그래밍/opengl 2020. 11. 18. 14:57
OpengL opengl은 자동차공장에서 바퀴를 만드는곳 그리고 차체를 만드는곳 따로 이루어지다가 마지막에 조립하며 완성품을 만들듯이 opengl도 파이프라인 분할과 병렬화를 조합하여 사용한다. Opengl 목표 애플리케이션과 그 하부의 그래픽스 서브시스템의 추상화 레이어를 제공한다. 그래픽스 서브시스템은 여러 고성능 프로세서로 이루어져있으며, 전용 메모리,디스플레이 출력 등을 가진다. 이 추상화 레이어를 통해 그래픽스 프로세스 유닛(graphihcs processing unit)(GPU)제작사가 어디인지, 어떻게 동작하는지 ,성능이 어떤지 알 필요가없다. Opengl은 설계 원칙이 높지도 낮지도 않은 추상화수준의 균형을 이룬다. 아래는 그래픽스 파이프라인 순서이다. 둥근박스는 고정이고 사각박스는 개발자..