glvertexattribpointer 예제

요구 사항 중 하나는 샤더를 사용하는 것입니다. 다음은 GLSL 예제입니다. 그래서 두 샤더 사이의 통신 채널입니다. 보간된 이유를 이해하기 위해 예제를 살펴보겠습니다. 그리고 이 예제에서는 VNT(정점, 법선 및 texcoord0)만 있기 때문에 정점 구조는 다음과 같이 보이지만,이 경우 glBindAttribLocation 호출 후 그늘기를 연결해야합니다 : 우리는 두 샤더에서 f_color를 말해야합니다. 또한 필요한 배열을 활성화하고 필요하지 않은 배열을 사용하지 않도록 설정하는 것을 잊지 마십시오. 활성화는 glEnableVertexAttribArray (인덱스)로 수행되고 비활성화는 glDisableVertexAttribArray (인덱스)로 수행됩니다. 추가 : glGetIntegerv (GL_MAX_VERTEX_ATTRIBS, 및 MaxVertexAttribs)는 구현이 지원하는 최대 수를 알려주며 일반적으로 16입니다. 이제 조각 쉐이더에서 이 변수를 사용할 수 있습니다. OpenGL의 초기 버전에서는 버퍼 개체가 아닌 C 배열에 포인터를 직접 전달할 수 있었습니다.

이것은 이제 더 이상 사용되지 않지만 glVertexAttribPointer 프로토 타입은 변경되지 않은 상태로 유지되었으므로 포인터를 전달한 것처럼 수행하지만 실제로 오프셋을 전달합니다. 당신은 물론 glVertexPointer, glTexCoord포인터, glNormalPointer, glColorPointer를 계속 사용할 수 있습니다. 다른 방법은 위치를 직접 지정하는 것입니다: 예를 들어 lowp는 종종 색상에 사용할 수 있으며 정점의 경우 highp를 사용하는 것이 좋습니다. 이전 섹션에서는 GLES2에 정밀 힌트가 필요하다고 언급했습니다. 이러한 힌트는 OpenGL이 데이터에 대해 얼마나 정밀도를 원하는지 알려줍니다. 정밀도: OpenGL 구현은 물리적 화면의 버퍼를 업데이트하기 전에 화면의 세로 새로 고침을 기다리는 것이 일반적입니다. 이 경우 삼각형은 초당 약 60회(60FPS)로 렌더링됩니다. 세로 동기화를 사용하지 않도록 설정하면 프로그램이 삼각형을 계속 업데이트하여 CPU 사용량이 증가합니다. 원근 변경이 있는 응용 프로그램을 만들 때 세로 동기화를 다시 만나게 됩니다. 특성을 사용하여 좌표를 전달했기 때문에 색상에 대한 새 속성을 추가할 수 있습니다. 전역을 수정해 보겠습니다: 문제는 정점 쉐이더가 아니라 조각 쉐이더에 색상을 지정하려는 것입니다.

이제 방법을 보자 … . 이 경우 일반 버전을 사용해야 합니다: glVertexAttribPointer 렌더링을 위해 OpenGL에는 즉각적인 모드, 표시 목록, 표준 정점 배열, VBO등 많은 메서드가 있습니다. 참고: “my_array[1]”와 같이 uniform_name을 가진 쉐이더 코드의 특정 배열 요소를 대상으로 지정할 수도 있습니다. (참고: GLES2를 사용하는 경우 아래의 이식성 섹션을 확인하십시오.) 조각 샤이더만 부동 부동 에 대한 명시적 정밀도가 필요합니다. 정점 샤더의 정밀도는 암시적으로 높은 것입니다. 조각 샤더의 경우 GL_FRAGMENT_PRECISION_HIGH 매크로[2]를 사용하여 테스트할 수 있는 highp를 사용하지 못할 수 있습니다. GLSL은 C 전처리기와 유사한 전처리기를 포함한다. #define 또는 #ifdef 등의 지시문을 사용할 수 있습니다.

이제 투명성이 앞뒤로 다를 수 있다면 아주 좋을 것입니다. 이를 달성하기 위해 glVertexAttribPointer의 5 번째 요소는 OpenGL에게 각 속성 집합의 길이를 알려주는 보폭입니다 – 우리의 경우 5 부동 부동 : 이제 렌더링 절차에서 3 개의 정점 각각에 대해 1 RGB 색상을 전달할 수 있습니다. 옐로우, 블루, 레드를 선택했습니다만, 좋아하는 색상을 자유롭게 사용하세요:) glVertexAttribPointer 함수를 더 잘 이해하기 위해 두 특성을 단일 C 배열에 혼합해 보겠습니다. 렌더링에서 삼각형이 불투명하지 않도록 요청해 보겠습니다: 오프셋을 사용하여 첫 번째 색상 오프셋을 지정합니다. 슬프게도 이러한 정밀 힌트는 전통적인 OpenGL 2.1에서는 작동하지 않으므로 GLES2에 있는 경우에만 이를 포함시켜야 합니다. 특성 변수의 반대는 균일한 변수입니다: 모든 정점마다 동일합니다. C 코드에서 정기적으로 변경할 수 있지만 정점 집합이 화면에 표시될 때마다 균일은 일정합니다. OpenGL은 각 픽셀의 정점 값을 보간합니다.

© 2019 A MarketPress.com Theme