2013-05-13 3 views
0

OpenGL es 2.0에서 꼭지점의 색상을 어떻게 설정할 수 있습니까?정점의 색상을 지정하는 방법은 무엇입니까?

float[] TriangleColors = new float[]{ 
          1.0f, 1.0f, 0.0f, 
          1.0f, 1.0f, 0.0f, 
          1.0f, 1.0f, 0.0f, 
         }; 

GL.EnableVertexAttribArray((int)GLKVertexAttrib.Color); 
GL.VertexAttribPointer((int)GLKVertexAttrib.Color, 
         3, VertexAttribPointerType.Float, 
         false, 0, 0); 

GL.GenBuffers(1, out colorBuffer); 
GL.BindBuffer(BufferTarget.ArrayBuffer, colorBuffer); 

GL.BufferData (BufferTarget.ArrayBuffer, 
       (IntPtr)(TriangleColors.Length * sizeof(float)), 
       TriangleColors, 
       BufferUsage.StaticDraw); 

이 코드는 나를 위해 작동하지 않습니다

는 지금은 색상 배열을 사용합니다.

답변

0

& 배열 버퍼 대상 에 정점 색상을 저장하는 VBO를 생성해야합니다. glVertexAttribPointer 함수를 호출하기 전에.

glVertexAttribPointer 2 가지 방법으로 작업 할 수있는 기능 (귀하의 경우 TriangleColors) 속성 데이터를

  • 가 직접 정점에 대한 포인터를 제공하기 위해 마지막 인수를 사용할 수 있습니다 - 당신은 필요가 없습니다 모든 VBO는 있지만, 함수를 호출 할 때 배열 버퍼에 바인드 된 버퍼가 없는지 확인해야합니다.

  • 반면에 정점 버퍼 객체를 사용하려는 경우 함수를 호출 할 때 올바른 VBO가 배열 버퍼 대상에 바인딩되어 있는지 확인해야합니다. 이는 마지막 인수의 의미를 변경합니다 ; 현재는 현재 바인드 된 버퍼로의 바이트 오프셋이됩니다. 마지막 인수 (즉이없이 오프셋) 배열 버퍼 타겟 오프셋 바이트로 취급 있도록 포인터를 제공하지

    GL.VertexAttribPointer((int)GLKVertexAttrib.Color, 
              3, VertexAttribPointerType.Float, 
              false, 0, 0); 
    

    케이스에

; VBO가 그 시점에 바인딩되어 있는지 여부는 코드에 표시되지 않습니다. VBO 이후의 코드는에 바인딩합니다.

+0

예를 들어 주시겠습니까? 정점 배열과 색상 배열이 있지만 인덱스 배열이 없습니다. –

+0

확인. 어쩌면 예제 C# (C++) + OpenGL es 2.0이 있습니까? 나는 셰이더로 일한 적이 없다. –

관련 문제