我正试图在一个房间里制作一个“行走相机”的场景。
现在,我看不到任何东西,更不用说轮换和翻译了,我无法弄清楚原因。
请注意,在我使用功能之前,我可以看到所有我想要的,
但是翻译和旋转是错误的,因为我总是根据定义的轴移动,
而不是我应该的相机轴。
这是我现在的代码:
透视并看看 -
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);
如何根据需要定义相机并使用平移和旋转来配合相机?
答案 0 :(得分:1)
你应该更新pos和目标向量(可选择更新),然后构建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
是向量,表示移动方向。