我正试图从不同的相机视角显示我的三角形。要做到这一点,我正在使用glm::lookAt()
函数创建一个4x4矩阵,您可以使用它来转换您的积分。当我指定摄像机位置(arg1)时,这似乎工作得很好,其中x,y和z都是< = 1.0,例如view = glm::lookAt(glm::vec3(0.0, 0.0f, 1.0), glm::vec3(0.0f, 0.0f, 0.0f), glm::vec3(0.0f, 1.0f, 0.0f));
。
但是,如果我指定相机位置,例如view = glm::lookAt(glm::vec3(0.0, 0.0f, 2.0), glm::vec3(0.0f, 0.0f, 0.0f), glm::vec3(0.0f, 1.0f, 0.0f));
,相机稍远一些,则根本不会显示形状。为什么会出现这种情况,所有tutorials I am following形状仍然显示?
我的抽奖代码(循环中):
//bind buffers and stuff
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glm::mat4 view;
view = glm::lookAt(glm::vec3(2.0, 1.0f, 1.0), glm::vec3(0.0f, 0.0f, 0.0f), glm::vec3(0.0f, 1.0f, 0.0f));
GLint viewLoc = glGetUniformLocation(sp, "view");
glUniformMatrix4fv(viewLoc, 1, GL_FALSE, glm::value_ptr(view));
glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0);
我的顶点着色器代码:(注意:在字符串中并从此字符串加载)
const char* vertexShaderData =
"#version 450 \n"
"layout(location = 0) in vec3 vp;"
"layout(location = 1) in vec3 color;"
"layout (location = 2) in vec2 texCoord;\n"
"out vec3 Color;"
"out vec2 TexCoords;\n"
"uniform mat4 view;\n"
"void main(){"
"Color=color;"
"TexCoords = texCoord;"
"gl_Position = view * vec4(vp, 1.0);"
"}";
积分数据:(每行中前3个浮点数是实际的顶点)
static GLfloat data[] = {
0.75f, 0.75f, 0.0f, 1.0f, 0.0f, 0.0f, 0.75f, 0.75f,
0.75f, -0.75f, 0.0f, 0.0f, 1.0f, 0.0f, 0.75f, -0.75f,
-0.75f, -0.75f, 0.0f, 0.0f, 0.0f, 1.0f, -0.75f, -0.75f,
-0.75f, 0.75f, 0.0f, 1.0f, 0.0f, 0.0f, -0.75f, 0.75f,
-0.75f, -0.75f, 0.0f, 0.0f, 1.0f, 0.0f, -0.75f, -0.75f,
0.75f, 0.75f, 0.0f, 0.0f, 0.0f, 1.0f, 0.75f, 0.75f,
};
我知道其他一切都在工作,着色器都在工作/链接。具有旋转/平移矩阵的正常变换正在起作用。没有任何变换,正在正确绘制形状。