0

コンピュータグラフィックスの割り当てを行うだけです。適切なサイコロを形成するために、テクスチャ(異なる番号の600x400ビットマップ)を立方体に配置します。私は「古典的な」テクスチャマッピングを使用してそれを行うことができました:頂点を作成し、それに対応するテクスチャ座標を追加します:

int arrayindex = 0;
float xpos = 0.0f;
float xposEnd = 0.32f;
float ypos = 0.0f;
float yposEnd = 0.49f;
int count = 0;
void quad( int a, int b, int c, int d ) {
    colors[arrayindex] = vertex_colors[a];
    points[arrayindex] = vertices[a];
    tex_coord[arrayindex] = new Point2(xpos, ypos);
    arrayindex++;
    colors[arrayindex] = vertex_colors[b];
    points[arrayindex] = vertices[b];
    tex_coord[arrayindex] = new Point2(xpos, yposEnd);
    arrayindex++;
    colors[arrayindex] = vertex_colors[c];
    points[arrayindex] = vertices[c];
    tex_coord[arrayindex] = new Point2(xposEnd, yposEnd);
    arrayindex++;
    colors[arrayindex] = vertex_colors[a];
    points[arrayindex] = vertices[a];
    tex_coord[arrayindex] = new Point2(xpos, ypos);
    arrayindex++;
    colors[arrayindex] = vertex_colors[c];
    points[arrayindex] = vertices[c];
    tex_coord[arrayindex] = new Point2(xposEnd, yposEnd);
    arrayindex++;
    colors[arrayindex] = vertex_colors[d];
    points[arrayindex] = vertices[d]; 
    tex_coord[arrayindex] = new Point2(xposEnd, ypos);
    arrayindex++;
    xpos = xpos + 0.34f;
    xposEnd = xpos + 0.32f;
    count++;
    if (count == 3) {
        xpos = 0.0f;
        xposEnd = 0.33f;
        ypos = 0.51f;
        yposEnd = 1.0f;
    }
}

void colorcube() {
    quad( 1, 0, 3, 2 );
    quad( 2, 3, 7, 6 );
    quad( 3, 0, 4, 7 );
    quad( 6, 5, 1, 2 );
    quad( 5, 4, 0, 1 );
    quad( 4, 5, 6, 7 );

    pointsBuf = VectorMath.toBuffer(points);
    colorsBuf = VectorMath.toBuffer(colors);
    texcoord = VectorMath.toBuffer(tex_coord);
}

これらすべてのものをシェーダーに渡し、それをまとめるだけです。

しかし、スライドを確認すると、このメソッドは「preopengl3」であることに気づきました。このようなことをする他の方法はありますか?

講義の例では、頂点シェーダーにまとめていることに気づきましたが、これは3Dキューブではなく、単純な2D平面用でした。

tex_coords = vec2(vPosition.x+0.5,vPosition.z+0.5);

その後、フラグメントシェーダーに渡されて、テクスチャが作成されます。

4

1 に答える 1

1

しかし、スライドを確認すると、この方法は「pre opengl3」であると考えられていることに気付きました。

あなたのスライドは古い即時モードを参照していると思います。即時モードでは、各頂点とその属性は、それらを即座に描画する関数を呼び出すことによって OpenGL に送信されます。

ただし、コードでは、頂点データでバッファーを初期化しています。このバッファ、全体として OpenGL に渡され、単一の OpenGL 呼び出しだけでバッチとして描画されます。あなたの質問には OpenGL 呼び出しが 1 つも含まれていないため、 「かもしれません」と書きました。

于 2012-12-16T22:11:17.997 に答える