2011-10-13 3 views
0

OpenGL 및 쉐이더를 처음 사용했습니다. 큐브를 표시하기 위해 셰이더를 사용하는 프로젝트가 있습니다.쉐이더가있는 OpenGL에서 여러 큐브 표시

그래서 기본적으로 원점에서 (+ -10, + - 10, + - 10)의 원근 투영법을 사용하여 8 개의 큐브를 각각 다른 색상으로 표시해야합니다. 다른 말로하면 (10, 10, 10)에 중앙에 큐브가 있고, 다른 큐브에는 (10, 10, -10)에 가운데가있을 것입니다. (+ -10, + -10, + -10)에는 8 가지 조합이 있습니다. 그런 다음 키를 누를 때마다 모든 큐브의 색상을 변경하는 키 명령 'c'를 제공해야합니다.

지금까지 나는 원점에서 하나의 입방체를 만들 수있었습니다. 나는이 큐브를 사용하여 그것을 8 개의 큐브를 생성하기 위해 변환해야한다는 것을 알고 있지만, 나는 그것을 어떻게 할 것인지 잘 모르겠습니다. 아무도 내가 이것에 대해 어떻게 생각하는지 알아?

+0

이것은 스택 오버플로에 대한 너무 광범위한 질문이지만 사용자가 사용할 수있는 일련의 자습서를 유지합니다. 튜토리얼 7을 통해 필요한 모든 것을 배우게됩니다. –

+0

매트릭스를 버텍스 쉐이더에 전달하면됩니다. 그리려는 (변환) 각 큐브의 행렬을 변경하십시오. 또한 색상을 변경하려면 꼭지점 쉐이더로 전달할 색상 변수가 필요합니다. Nicol이 말했듯이 이런 종류의 튜토리얼이 많이 있습니다. – Robinson

답변

0

그 질문은 언급 한 바와 같이 너무 광범위합니다. 하지만 카메라와 창문을 설치할 수 있다고 가정 할 수 있다고 큐블릿 하나를 그렸다는군요. 그것은 우리에게 8 개의 큐브를 렌더링하는 방법을 부추 킵니다. 이 작업을 수행하는 방법은 여러 가지가 있지만 두 가지 매우 다른 것을 언급하겠습니다.

클래식 : 큐브 중심과 크기의 두 가지 매개 변수를 사용하는 함수를 만듭니다. Whit이 2 당신은 지금하고있는 것과 같은 방식으로 큐브를 만들 수 있지만, 고정 된 값 대신에 이러한 변수를 사용할 것입니다. 예를 들어, 앞면은 다음과 같습니다

glBegin(GL_TRIANGLE_STRIP); 
glVertex3f(center.x-size/2, center.y-size/2, center.z+size/2); 
glVertex3f(center.x+size/2, center.y-size/2, center.z+size/2); 
glVertex3f(center.x-size/2, center.y+size/2, center.z+size/2); 
glVertex3f(center.x+size/2, center.y+size/2, center.z+size/2); 
glEnd(); 

이 그냥 변수에서 그것을 만드는 방법 쇼케이스를 들어, 당신이 당신이 지금하고있는 같은 방법으로 할 수있다.

이제 셰이더를 사용하길 원한다고 언급했습니다. Shader 주제는 openGL 자체와 마찬가지로 매우 광범위하지만 아이디어를 알려줄 수 있습니다. OpenGL 3.2에서는 기하학이라는 특수한 셰이더가 추가되었습니다. 그 목적은 지오메트리 전체를 다루는 것입니다. 버텍스 쉐이더는 시간에 단지 하나의 버텍스로 동작하거나 프래그먼트 쉐이더는 한 번에 하나의 프래그먼트로 작동합니다. 기하학 쉐이더는 한 번에 하나의 기하학 조각을 처리합니다. 삼각형을 렌더링하는 경우 셰이더를 통과하는 단일 삼각형에 대한 모든 정보를 얻습니다. 이것은 심각한 것은 아니지만이 쉐이더는 이러한 지오메트리를 수정하지 않고 새로운 지오 메트릭을 생성 할 수 있습니다! 그래서 저는 셰이더 프로그램 중 하나에서 포인트를 렌더링하지만, 기하학 셰이더를 통과하면이 포인트가 원으로 변환됩니다. 마찬가지로 점만 렌더링 할 수 있지만 지오메트리 셰이더 내부에서는 전체 큐브를 렌더링 할 수 있습니다. 포인트 위치는이 큐브의 중심으로 작동하므로 큐브 크기를 유니폼으로 전달해야합니다. 큐브의 크기가 다를 수 있다면 꼭지 셰이더를 만들어 속성에서 변수까지 전달할 수 있어야하며이 셰이더는 지오메트리 셰이더에서 읽을 수 있습니다.

색상 문제는 조각 쉐이더를 구현하지 않으면 큐브 렌더링 전에 glColor3f을 호출해야합니다. 빨강, 녹색 및 파랑 값의 3 가지 매개 변수가 필요합니다. 이러한 값의 범위는 0에서 255까지는 아니지만 0에서 1까지입니다. 흰색 배경을 사용하는 경우 큐브가 렌더링되지 않으며 색상을 200,10,10으로 설정하면 빨간색 큐브를 보지만 아무 것도 보이지 않습니다. 사실 흰색 큐브를 렌더링하기 때문입니다. 이러한 오류를 방지하려면 회색 배경에 glClearColor과 같은 배경을 설정하는 것이 좋습니다.

관련 문제