버퍼를 쉐이더의 속성에 바인드 할 때 쉐이더의 속성이 뒤집혀 진 것 같습니다.꼭지점 속성 버퍼가 잘못된 속성에 바인딩되고 있습니다.
precision highp float; uniform mat4 projection_matrix; uniform mat4 modelview_matrix; in vec3 in_position; in vec3 in_color; out vec3 ex_Color; void main(void) { gl_Position = projection_matrix * modelview_matrix * vec4(in_position, 1); ex_Color = in_color; }
및 픽셀 쉐이더 너무 복잡
precision highp float; in vec3 ex_Color; out vec4 out_frag_color; void main(void) { out_frag_color = vec4(ex_Color, 1.0); }
아무것도 :
그래서 저는 버텍스 쉐이더를 가지고있다. 두 개의 입력이 있습니다. 하나는 정점 위치 용이고 다른 하나는 색상 용입니다. (newb로는 질감이나 빛을 다루고 싶지 않습니다.)
이제 클라이언트 코드에서 positionVboData와 colorVboData라는 두 개의 벡터 배열에 데이터를 저장하고 VBO를 만듭니다. .
GL.GenBuffers(1, out positionVboHandle); GL.BindBuffer(BufferTarget.ArrayBuffer, positionVboHandle); GL.BufferData<Vector3>(BufferTarget.ArrayBuffer, new IntPtr(positionVboData.Length * Vector3.SizeInBytes), positionVboData, BufferUsageHint.StaticDraw); GL.GenBuffers(1, out colorVboHandle); GL.BindBuffer(BufferTarget.ArrayBuffer, colorVboHandle); GL.BufferData<Vector3>(BufferTarget.ArrayBuffer, new IntPtr(colorVboData.Length * Vector3.SizeInBytes), colorVboData, BufferUsageHint.StaticDraw);
후, 나는 쉐이더의 속성에 vbos을 결합하는 작업을 다음 코드를 기대 :
GL.EnableVertexAttribArray(0); GL.BindBuffer(BufferTarget.ArrayBuffer, positionVboHandle); GL.VertexAttribPointer(0, 3, VertexAttribPointerType.Float, true, Vector3.SizeInBytes, 0); GL.BindAttribLocation(shaderProgramHandle, 0, "in_position"); GL.EnableVertexAttribArray(1); GL.BindBuffer(BufferTarget.ArrayBuffer, colorVboHandle); GL.VertexAttribPointer(1, 3, VertexAttribPointerType.Float, true, Vector3.SizeInBytes, 0); GL.BindAttribLocation(shaderProgramHandle, 1, "in_color");
사실, 마지막 코드 샘플에서는 positionVboHandle과 colorVboHandle을 바꿔야하고 완벽하게 작동합니다. 그러나 그것은 나에게 거꾸로 보인다. 내가 뭘 놓치고 있니? 뭔가 이상한 일이 벌어지고
업데이트. 나는이에 버텍스 쉐이더 변경하는 경우 :
precision highp float; uniform mat4 projection_matrix; uniform mat4 modelview_matrix; in vec3 in_position; in vec3 in_color; out vec3 ex_Color; void main(void) { gl_Position = projection_matrix * modelview_matrix * vec4(in_position, 1); //ex_Color = in_color; ex_Color = vec3(1.0, 1.0, 1.0); }"
을 그리고 수 있도록 수정 이외의 다른 변경 (설정은, 정점 올바른 속성을로드하는 모든 후 프로그램 링크를 이동하는 제안하지 ..을 In_Position에보다는 in_color에 위치,
모든 OpenGL 호출을 glGetError 함수로 확인해야합니다. 잘못된 함수 호출을 즉시 나타냅니다. –