본문 바로가기
728x90
반응형

3D웹 프로그래밍15

OPENGL 클리핑 및 뷰포트 변환 클리핑 버텍스들이 버텍스 쉐이더를 떠날 때 그 위치는 클립 공간에 있다고한다. 이것은 위치를 나타내주는 좌표계중 하나이다. 버텍스,테셀레이션,지오메트리 쉐이더 등에서 gl_Position 변수를 저장할 때는 vec4 타입으로 4요소 벡터로 저장한다. 이 좌표는 동차 좌표라고 부른다. hipdizzy.tistory.com/50 3D에서 사용하는 동차 좌표계란 무엇인가? 투영변환이란 무엇일까? 실세계의 한점 Q =(X,Y,Z)는 3차원의 점이다. 이점이 투영 스크린 상의 한점 (X,Y)로 즉 2차원점으로 변환되는 관계를 투영 변환이라한다. 이렇게 투영변환을 사용할 때는 동 hipdizzy.tistory.com 동차좌표계는 투영된 지오메트리에 사용되는데, 많은 수학 계산이 일반적인 카테시안 공간보다 더 단순해.. 2020. 11. 25.
Opengl 지오메트리 쉐이더(geometry shader, 기하 쉐이더) 지오메트리 쉐이더 지오메트리 쉐이더는 버텍스 스테이지와 테셀레이션 스테이지의 다음단계이며, 개념적으로는 마지막 쉐이더 스테이지다. 지오메트리 쉐이더는 프리미티브당 한 번 수행되며, 수행되는 프리미티브를 구성하는 모든 버텍스에 대한 입력 버텍스 데이터에 접근할수있다. 또한 데이터 흐름의 양을 증가시키거나 감소시킬수있는 유일한 쉐이더 스테이지다. 지오메트리는 EmitVertex()와 EndPrimitive()함수를통해 프리미티브 어셈블리 및 래스터라이제이션으로 보내는 버텍스를 명시적으로 생성할 수 있다. 지오메트리 쉐이더의 다른 고유한 기능으로 파이프라인 중간에 프리미티브의 모드를 변경하는 기능이 있다. 예를들면 삼각형들을 입력으로 하여 여러 점이나 선을 출력으로 만들어 낼수있다. 예를들면 static co.. 2020. 11. 19.
Opengl 테셀레이션 테셀레이션 테셀레이션은 고차 프리미티브(Opengl에서는 패치로 알려져 있다.)를 더 작고, 단순한 여러 개의 렌더링 가능한 프리미티브로 분할하는 작업이다. OpenGL은 고정 함수며 설정 가능한 테셀레이션 엔진을 포함하는데,이 테셀레이션 엔진은 사각형,삼각형,선들을 더 많고 더우우우욱 작은 점,선 삼각형등으로 분할한다!. 테셀레이션 컨트롤 쉐이더 세가지 테셀레이션 단계중 첫번째는 테셀레이션 컨트롤 쉐이더이다. 이 쉐이더는 버텍스 쉐이더로부터 입력을 받아 주로 두 가지 일을 수행한다. 하나는 테셀레이션 엔진에 보낼 테셀레이션의 레벨을 결정하는것이고, 두번째는 테셀레이션이 수행된 다음에 실행되는 테셀레이션 이벨류에이션 쉐이더에 보낼 데이터를 생성하는일이다. Opengl에서 테셀레이션은 패치라고 부르는 고차.. 2020. 11. 19.
opengl 삼각형을 이용하여 타원그리기 1.버텍스 쉐이더에 데이터 전달하기 버텍스 쉐이더는 OpenGL 파이프라인의 첫번째 프로그래밍 가능한 스테이지이다. 또한 유일한 필수 스테이지기도하다. 하지만 버텍스 쉐이더가 실행되기전에 버텍스 페칭 또는 버텍스 풀링이라는 고정 함수 스테이지가 실행된다. 버텍스 쉐이더에서 데이터를 가져오거나 내보내자는 작업은 in,out저장 지시어로 전역변수를 선언하는 방식으로 수행한다. Opengl파이프라인 시작 시 in 키워드를 사용하여 버텍스 쉐이더에 입력을 제공한다. in 저장 지시어를 사용하면, 해당 변수는 버텍스 쉐이더의 입력으로 설정되는데, 이는 고정 함수 버텍스 페치 스테이지에 의해 그 내용이 자동적으로 채워진다. 이 변수를 버텍스 속성이라고 부른다. #version 430 core layout (loca.. 2020. 11. 19.
opengl 삼각형 그리기 삼각형 그리기 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이 그릴 영역을 확보해주므로 별문제가 없다. 하지만 선이나 삼각형의 경우에는 둘 이상의 버텍스가 .. 2020. 11. 19.
기본적인 Opengl 프로그램 만들기 모든 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) ㅇ 해당 함수의 일부 인자타입을.. 2020. 11. 18.
728x90
반응형