ウィンドウと背景のセットアップが成功したにもかかわらず、go-gl/glfw および github.com/banthar/gl を使用して三角形を表示できないのはなぜですか?

DDD
リリース: 2024-11-01 18:13:02
オリジナル
321 人が閲覧しました

Why Can't I Display a Triangle Using go-gl/glfw and github.com/banthar/gl Despite Successful Window and Background Setup?

Go での頂点バッファーと三角形の表示

質問:

Go github.com/banthar/gl パッケージの使用http://www.opengl-tutorial.org/beginners-tutorials/tutorial-2-the-first-triangle/ のチュートリアル コードは、ウィンドウの作成と背景色の設定に成功しましたが、三角形の表示に失敗しました。同等の C コードでは三角形が表示されます。なぜですか?

答え:

エラーは、AttribPointer 関数に渡された引数が正しくないことが原因である可能性があります。この問題を解決するために次の調整が確認されました:

  • AttribPointer 引数: (void*)0 の代わりに配列バッファー オフセットに nil を渡します。これは、現在のバッファ バインディングを頂点属性の開始点として使用するように OpenGL ライブラリに指示します。
  • BufferData Size: 頂点バッファのサイズを要素数ではなくバイト単位で指定します。 。たとえば、頂点バッファーに n 個の 32 ビット浮動小数点値が含まれる場合、4 * n を BufferData に渡します。

修正された Go コード:

package main

import (
    "github.com/banthar/gl"
    "github.com/go-gl/glfw/v3.2/glfw"
    "log"
)

func main() {
    // ... ( GLFW window setup, GL initialization code) ...

    // Create vertex buffer
    gVertexBufferData := []float32{-1.0, -1.0, 0.0, 1.0, -1.0, 0.0, 0.0, 1.0, 0.0}
    vertexBuffer := gl.GenBuffer()
    vertexBuffer.Bind(gl.ARRAY_BUFFER)
    gl.BufferData(gl.ARRAY_BUFFER, len(gVertexBufferData)*4, gVertexBufferData, gl.STATIC_DRAW)

    for {
        // ... (Clear screen, enable/disable vertex attrib, draw triangle) ...
        vertexAttrib.AttribPointer(
            3,     // Size
            gl.FLOAT, // Type
            false, // Normalized?
            0,     // Stride
            nil)   // Array buffer offset

        // ... (Continue drawing loop) ...
    }
}
ログイン後にコピー

以上がウィンドウと背景のセットアップが成功したにもかかわらず、go-gl/glfw および github.com/banthar/gl を使用して三角形を表示できないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!