使用 glm::lookAt 时出现问题,不显示对象

问题描述 投票:0回答:1

这让我很头疼有一段时间了。我正在尝试使用

glm::lookAt
但似乎无法正确编写它。我正在使用 Opengl 330 核心。这是我的代码:

这就是我要画的物体:

float microwave[] = {
        // x y   r g b a   nx ny nz
        -0.7, -0.7, 0.0,   0.75, 0.75, 0.75, 1.0,   0.0, 0.0, 1.0, // left bottom
        -0.7, 0.7, 0.0,   0.75, 0.75, 0.75, 1.0,   0.0, 0.0, 1.0, // left up
        0.7, -0.7, 0.0,   0.75, 0.75, 0.75, 1.0,   0.0, 0.0, 1.0, // right bottom
        0.7, 0.7, 0.0,   0.75, 0.75, 0.75, 1.0,   0.0, 0.0, 1.0  // right up
    };

这就是我的设置方式:

unsigned int stride = (3 + 4 + 3) * sizeof(float);

glBindVertexArray(VAO[0]);
glBindBuffer(GL_ARRAY_BUFFER, VBO[0]);
glBufferData(GL_ARRAY_BUFFER, sizeof(microwave), microwave, GL_STATIC_DRAW);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, stride, (void*)0);
glEnableVertexAttribArray(0);
glVertexAttribPointer(1, 4, GL_FLOAT, GL_FALSE, stride, (void*)(3 * sizeof(float)));
glEnableVertexAttribArray(1);
glVertexAttribPointer(2, 3, GL_FLOAT, GL_FALSE, stride, (void*)(7 * sizeof(float)));
glEnableVertexAttribArray(2);

这就是我画的方式:

// drawing microwave
glBindVertexArray(VAO[0]);
glDrawArrays(GL_TRIANGLE_STRIP, 0, sizeof(microwave) / stride);

这就是我定义视图矩阵的方式:

glm::mat4 view = glm::mat4(1.0f);
view = glm::lookAt(glm::vec3(0.f, 0.0f, 5.0f), glm::vec3(0, 0, 0), glm::vec3(0, 0, 1));;
unsigned int viewLoc = glGetUniformLocation(basicShader, "uV");
glUniformMatrix4fv(viewLoc, 1, GL_FALSE, glm::value_ptr(view));

这是在顶点着色器中的

main

gl_Position = uV * vec4(inPos.x, inPos.y, inPos.z, 1.0);

如果

view
是单位矩阵,那么一切都可以正常工作,因此传递制服就可以了。我不知道会出现什么问题。看起来很简单。 我试图更改
eye
object location
up
向量,但没有任何效果。我做错了什么?

我有更多的代码和更多的对象,但我认为这足以定位问题。如果没有,请询问您需要什么。

c++ opengl glsl glm-math glulookat
1个回答
0
投票

我会设置一些键绑定,以便您可以在程序中修改这些变量,以便更好地了解它们是如何工作的(修改它们时登录到控制台)。

有一个非常简单易懂的教程:http://www.opengl-tutorial.org/beginners-tutorials/tutorial-3-matrices/

设置它,尝试一下以获得更好的直觉,然后回到你的代码,你会有一个更好的想法。

© www.soinside.com 2019 - 2024. All rights reserved.