Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ OpenGL glm::perspective()不';无法正常工作,对象为';t 3d_C++_Opengl_Glfw_Glm Math - Fatal编程技术网

C++ OpenGL glm::perspective()不';无法正常工作,对象为';t 3d

C++ OpenGL glm::perspective()不';无法正常工作,对象为';t 3d,c++,opengl,glfw,glm-math,C++,Opengl,Glfw,Glm Math,这是我的游戏循环。我知道我不需要两次声明这些变量,但我这样做只是为了以防万一: while (!glfwWindowShouldClose(window)) { GLfloat currentFrame = glfwGetTime(); deltaTime = currentFrame - lastFrame; lastFrame = currentFrame; glfwPollEvents();

这是我的游戏循环。我知道我不需要两次声明这些变量,但我这样做只是为了以防万一:

while (!glfwWindowShouldClose(window))
    {


        GLfloat currentFrame = glfwGetTime();
        deltaTime = currentFrame - lastFrame;
        lastFrame = currentFrame;


        glfwPollEvents();


        glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

        glUseProgram(shaderProgram);
        glm::mat4 view;
        view = glm::rotate(view, 50.0f, glm::vec3(0.0f, 0.0f, 1.0f));
        glm::mat4 projection;
        projection = glm::perspective(-45.0f, float(WIDTH / HEIGHT), 0.1f, 100.0f);

        GLint modelLoc = glGetUniformLocation(shaderProgram, "model");
        GLint viewLoc = glGetUniformLocation(shaderProgram, "view");
        GLint projLoc = glGetUniformLocation(shaderProgram, "projection");

        glUniformMatrix4fv(viewLoc, 1, GL_FALSE, glm::value_ptr(view));
        glUniformMatrix4fv(projLoc, 1, GL_FALSE, glm::value_ptr(projection));

        glBindVertexArray(VAO);
        glm::mat4 model;
        model = glm::scale(model, glm::vec3(0.5f, 0.5f, 0.5f));
        glUniformMatrix4fv(modelLoc, 1, GL_FALSE, glm::value_ptr(model));
        glDrawArrays(GL_TRIANGLES, 0, 36);
        glBindVertexArray(0);

        glUseProgram(shaderProgram2);
        glm::mat4 view2;
        view2 = translate(view2, glm::vec3(0.0f, 0.0f, -0.6f));

        GLint modelLoc2 = glGetUniformLocation(shaderProgram2, "lightmodel");
        GLint viewLoc2 = glGetUniformLocation(shaderProgram2, "lightview");
        GLint projLoc2 = glGetUniformLocation(shaderProgram2, "lightprojection");

        glm::mat4 model2;
        model2 = glm::scale(model2, glm::vec3(0.5f, 0.5f, 0.5f));


        glUniformMatrix4fv(viewLoc2, 1, GL_FALSE, glm::value_ptr(view2));
        glUniformMatrix4fv(projLoc2, 1, GL_FALSE, glm::value_ptr(projection));

        glUniformMatrix4fv(modelLoc2, 1, GL_FALSE, glm::value_ptr(model2));

        glBindVertexArray(lightVAO);
        glDrawArrays(GL_TRIANGLES, 0, 36);
        glBindVertexArray(0);

        glfwSwapBuffers(window);
    }
这就是输出:


我不清楚glm::perspective()输入应该是弧度还是度,但我尝试了两者,它们都给出了相同的放大非3D结果。我不知道我做错了什么。我是根据教程做这些的。我的代码体与教程中我自己创建的几个类的save完全相同。这里可能有什么问题?

尝试
float(WIDTH)/HEIGHT
而不是
float(WIDTH/HEIGHT)
glm的更新版本
glm
glm::perspective()取弧度。您正在通过度数,并且由于某种原因出现了一个负角度。@Tulon:没有解决这个问题。我得把它调高到90度。它修复了它,现在我看到了第二个矩形,但我没有看到第一个矩形,它也不是3D的。@Tulon:我修复了这个问题。这是第一张他们只是重叠的。但是它们都不是3D的:你知道为什么吗?我不知道你所说的“但它们都不是3D的”是什么意思。试着用
float(WIDTH)/HEIGHT
代替
float(WIDTH/HEIGHT)
glm
的新版本,用弧度表示
glm::perspective()
。您正在通过度数,并且由于某种原因出现了一个负角度。@Tulon:没有解决这个问题。我得把它调高到90度。它修复了它,现在我看到了第二个矩形,但我没有看到第一个矩形,它也不是3D的。@Tulon:我修复了这个问题。这是第一张他们只是重叠的。但它们都不是3D的:你知道为什么吗?我不知道你说的“但它们都不是3D的”是什么意思