월드버텍 블로그

내일을 향한 준비~~

gldrawarrays 예제

under Uncategorized

예를 들어 전면에는 v0-v1-v2 및 v2-v3-v0 삼각형이 있는 경우와 같은 2개의 삼각형을 만들기 위해 각 얼굴에 6번의 glVertex*() 호출이 필요합니다. 큐브에는 6개의 면이 있으므로 총 glVertex*() 호출 수는 36개입니다. 또한 법선, 텍스처 좌표 및 색상을 해당 정점으로 지정하면 OpenGL 함수 호출 수가 증가합니다. IFS의 데이터에는 메시에 나타나는 모든 정점 목록이 포함되어 각 정점의 좌표를 제공합니다. 그런 다음 정점을 목록에서 인덱스 또는 위치를 지정하는 정수로 식별할 수 있습니다. 예를 들어, 10개의 정점과 9개의 면이 있는 다면체인 이 “집”을 생각해 보십시오: 집과 여러 개의 다른 다면체를 그릴 수 있는 샘플 프로그램이 있습니다. 다각형 오프셋을 포함하여 여기에서 살펴본 것과 매우 유사한 그리기 코드를 사용합니다. 이 프로그램은 또한 사용자가 마우스로 드래그하여 다면체를 회전 할 수 있도록, 하위 섹션 3.3.5에서 논의 된 카메라와 트랙볼 API를 사용하는 예입니다. 이 프로그램에는 사용자가 가장자리와 얼굴의 렌더링을 켜고 끌 수있는 메뉴와 다른 옵션이 있습니다. 프로그램의 자바 버전은 조글 / IFSPolyhedronViewer.java이며, C 버전은 glut / ifs 다면체 – 뷰어.c입니다. C 버전의 메뉴를 보려면 디스플레이를 마우스 오른쪽 단추로 클릭합니다. 다면체에 대한 데이터는 jogl/Polyhedron.java 및 glut/polyhedron.c에서 생성됩니다. 그리고 여기에 당신이 시도 할 수있는 프로그램의 라이브 데모 버전입니다 : 당신이 고려해야 할 또 다른 것은 공유 정점의 일반 벡터입니다.

공유 정점의 인접 폴리곤의 법선이 모두 다른 경우 법선 벡터는 각 면에 대해 한 번씩 면 수만큼 지정해야 합니다. 예를 들어 정점 v0은 앞면, 오른쪽 및 위쪽 면과 공유되지만 법선에서는 v0에서 공유할 수 없습니다. 앞면의 법선이 n0이고, 오른쪽 면법은 n1이고, 위쪽 면은 n2입니다. 이 경우 법선이 공유 정점에서 동일하지 않으며 정점 배열에서 한 번만 정의할 수 없습니다. 일반 배열의 동일한 양의 요소와 일치하려면 정점 좌표에 대해 배열에서 여러 번 정의해야 합니다. 적절한 법선이 있는 일반적인 큐브에는 24개의 고유한 정점이 필요합니다: 측면당 6면 × 4정점. 예제 코드에서 실제 구현을 참조하십시오. 대부분의 경우 IFS에 대한 추가 데이터가 있을 것입니다. 예를 들어 각 면에 대해 다른 색상으로 다면체의 면에 색상을 지정하려면 다른 배열인 faceColors를 추가하여 색상 데이터를 보유할 수 있습니다. faceColors의 각 요소는 0.0에서 1.0 범위의 세 가지 이중 값배열로, 면 중 하나에 대한 RGB 색상 구성 요소를 제공합니다. 이 설정을 사용하면 다음 코드를 사용하여 Java 및 JOGL을 사용하여 다면체를 그릴 수 있습니다.

예를 들어 &faceColors[i*3]는 faceColors 배열의 요소 번호 i*3에 대한 포인터입니다. 해당 요소는 면 번호 i에 대한 세 가지 색상 구성 요소 값 중 첫 번째 요소입니다. 매개 변수는 포인터 형식이므로 C의 glColor3dv에 대한 매개 변수 형식과 일치합니다. 일반 Java 배열은 glDrawElements 및 glDrawArrays와 함께 사용하기에 적합하지 않으며, 일부는 데이터가 저장되는 형식과 Java 배열과 그래픽 처리 장치 간의 데이터 전송의 효율성이 비효율적이기 때문입니다. 이러한 문제는 직접 nio 버퍼를 사용하여 해결됩니다. 여기서 “nio”라는 용어는 입력/출력에 대한 클래스를 포함하는 패키지 java.nio를 나타냅니다. 이 경우 “버퍼”는 java.nio.Buffer 클래스의 개체 또는 FloatBuffer 또는 IntBuffer와 같은 하위 클래스 중 하나입니다. 마지막으로 “직접”은 버퍼가 메모리와 GPU와 같은 다른 장치 간의 데이터를 직접 전송하기 위해 최적화되어 있음을 의미합니다.

Comments are closed.

Subscribe to 월드버텍 블로그