Go에서 OpenGL 정점 버퍼가 삼각형을 렌더링하지 않음
튜토리얼의 지침을 따랐음에도 불구하고 사용자는 Go 버전이 실패하는 문제에 직면했습니다. C 대응이 성공적으로 수행되는 동안 삼각형을 표시합니다. 이러한 불일치는 vertexAttrib.AttribPointer() 메서드에 인수를 제공할 때 잠재적인 불일치로 인해 발생합니다.
Go 코드에서는 다음 인수가 메서드에 전달됩니다.
<code class="go">vertexAttrib.AttribPointer( 3, // Size 0, // Normalized? 0, // Stride nil, // Array buffer offset )</code>
그러나 , C 코드에서는 동일한 메소드가 다른 인수 세트로 호출됩니다.
<code class="c">glVertexAttribPointer( 0, 3, // Size GL_FLOAT, // Type GL_FALSE, // Normalized? 0, // Stride (void*)0 // Array buffer offset )</code>
배열 버퍼 오프셋에 해당하는 인수는 Go 코드에 없기 때문에 눈에 띕니다. 이 인수는 버퍼 시작부터 지정된 속성에 대한 정점 데이터 시작까지의 오프셋을 바이트 단위로 지정합니다. Go 코드에서 이 인수를 생략하면 정점 데이터가 제대로 검색되지 않을 수 있습니다.
이 문제를 해결하려면 banthar 바인딩의 작업 분기를 사용해야 하며, 다음 인수를 vertexAttrib에 전달해야 합니다. .AttribPointer() 메서드:
<code class="go">vertexAttrib.AttribPointer( 3, // Size gl.FLOAT, // Type false, // Normalized? 0, // Stride nil // Array buffer offset )</code>
또한 서버로 전송된 데이터에 4를 곱하여 데이터를 나타내는 바이트 수를 나타내야 합니다. 예를 들어 데이터가 다음과 같이 설명된 경우:
<code class="go">data := []float32{0, 1, 0, -1, -1, 0, 1, -1, 0}</code>
다음과 같이 사용해야 합니다.
<code class="go">gl.BufferData(gl.ARRAY_BUFFER, len(data) * 4, data, gl.STATIC_DRAW)</code>
위 내용은 내 OpenGL 삼각형 렌더링이 Go에서는 작동하지 않지만 C에서는 작동하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!