2

部屋の中で「歩くカメラ」のシーンを作ろうとしています。

今のところ、回転や平行移動はもちろん、何も見えません。その理由がわかりません。

ルックアット関数を使用する前は、必要なものをすべて見ることができたことに注意してください。

しかし、私は常に定義された軸に従って移動したため、平行移動と回転は間違っていました。

そして、私がすべきようなカメラ軸ではありません。

これは今のところ私のコードです:

展望と見て-

mat4 Projection = perspective(45.0f, 1.0f, 0.1f, 100.0f);

vec3 pos = vec3(0.0f, 0.0f, 0.0f);
vec3 target = vec3(0.0f, 0.0f, -99.0f);
vec3 up = vec3(0.0f, 1.0f, 0.0f);

wvp *= Projection;
wvp = lookAt(pos, target, up);

いくつかのキーを押した後の平行移動と回転:

glfwSwapBuffers();
    if(glfwGetKey( 'W' ))
    {
        wvp = translate(wvp, vec3(0,0,0.01));
    }
    if(glfwGetKey( 'S' ))
    {
        wvp = translate(wvp, vec3(0,0,-0.01));
    }
    if(glfwGetKey( 'A' ))
    {
        wvp = rotate(wvp,-1.0f, vec3(0.0f, 1.0f, 0.0f));
    }
    if(glfwGetKey( 'D' ))
    {
        wvp = rotate(wvp,1.0f, vec3(0.0f, 1.0f, 0.0f));
    }

今のところ定義された頂点:

static const GLfloat vertices[] = {
 //Given square
 0.0f,  0.0f, 2.0f,
 1.0f,  0.0f, 2.0f,
 0.0f,  1.0f, 2.0f,
 1.0f,  1.0f, 2.0f,
}

それらを接続する理由:

static const GLubyte indices[] = {
   0,1,3,
   0,2,3,
}

いくつかのバッファリング:

GLuint vertexbuffer;
glGenBuffers(1, &vertexbuffer);
glBindBuffer(GL_ARRAY_BUFFER, vertexbuffer);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);


GLuint indexbuffer;
glGenBuffers(1, &indexbuffer);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, indexbuffer);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), indices, GL_STATIC_DRAW);

必要に応じてカメラを定義し、平行移動と回転を使用してカメラに合わせる方法について何かアイデアはありますか?

4

1 に答える 1

1

posとターゲットベクトルを更新し(オプションで更新)、lookAtMatrixをビルドする必要があります

vec3 pos, target, forward
update() {
    if (key_up)
        pos += forward
    ...
}

render() {
    camMatrix = lookat(pos, target, up)

    mvp = modelMatrix * camMatrix * projMatrix;
    render_geometry
}

forward移動方向を意味するベクトルです。

于 2013-03-22T12:34:56.320 に答える