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 和 target 向量(可选地更新),然后构建 lookAt Matrix

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 回答