-1

vbo に含まれる単一のオブジェクトを実際に翻訳する方法がわかりません。まず、vao と vbo を設定し、バインドして立方体の頂点を入力します...

    glGenVertexArrays(1, &_vertexArray1); //Bind to first VAO
    glBindVertexArray(_vertexArray1);
    glGenBuffers(1, &_vertexBufferCube1);
    glBindBuffer(GL_ARRAY_BUFFER, _vertexBufferCube1);
    glBufferData(GL_ARRAY_BUFFER, g_point_count * 3 * sizeof (float), &g_vp[0], GL_STATIC_DRAW);

glEnableVertexAttribArray(loc1);
glVertexAttribPointer(loc1, 3, GL_FLOAT, GL_FALSE, 0, NULL);
glEnableVertexAttribArray(loc2);
glVertexAttribPointer(loc2, 3, GL_FLOAT, GL_FALSE, 0, NULL);`

次に、私の表示機能で...

    // tell GL to only draw onto a pixel if the shape is closer to the viewer
glEnable (GL_DEPTH_TEST); // enable depth-testing
glDepthFunc (GL_LESS); // depth-testing interprets a smaller value as "closer"
glClearColor (0.5f, 0.5f, 0.5f, 1.0f);
glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glUseProgram (shaderProgramID);


//Declare your uniform variables that will be used in your shader
int matrix_location = glGetUniformLocation (shaderProgramID, "model");
int view_mat_location = glGetUniformLocation (shaderProgramID, "view");
int proj_mat_location = glGetUniformLocation (shaderProgramID, "proj");

mat4 view = identity_mat4 ();
mat4 persp_proj = perspective(45.0, (float)width/(float)height, 0.1, 100.0);
mat4 model = identity_mat4 ();
view = translate (view, vec3 (0.0, 0.0, -5.0f));

glUniformMatrix4fv (proj_mat_location, 1, GL_FALSE, persp_proj.m);
glUniformMatrix4fv (view_mat_location, 1, GL_FALSE, view.m);
glUniformMatrix4fv (matrix_location, 1, GL_FALSE, model.m);


glBindVertexArray(_vertexArray1);
//model = translate (view, vec3 (0.0, -3.0F, 0.0));

glDrawArrays (GL_TRIANGLES, 0, g_point_count);
glBindVertexArray(0);

今私の問題は、あるvaoでオブジェクトを別のvaoとは独立して移動したいということです。これをどのように行う必要がありますか?モデル マトリックスを翻訳してから、vao のバインドを解除し、別のモデル マトリックスをバインドして、同じモデル マトリックスを再度翻訳する必要がありますか? しばらくグーグルで調べた後、glPushMatrix と glTranslatef を使用する必要があると思いますが、どのマトリックスをプッシュすればよいでしょうか?

基本的に、VAO 内のオブジェクトを移動するために変換する必要がある VAO のマトリックスはどこにありますか?

4

1 に答える 1

0

Redditであなたに答えたことを繰り返します:

変換マトリックスと VBO は相互作用しません。もう一方に何もしなくても、どちらかを変更できます。基本的な経験則: モデルが変形せずに動き回るだけの場合は、変換 (つまり、モデル ビュー マトリックス) を変更します。モデルが一握りのユニフォーム (スケルトン アニメーション) で説明できる方法で変形する場合は、それらを変更します。モデルのトポロジが変更された場合、または変形がスケルトンで実行できる範囲を超えている場合にのみ、VBO のデータを変更します。

于 2013-12-09T12:44:24.910 に答える