Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/161.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没有渲染我的多维数据集_C++_Opengl - Fatal编程技术网

C++ OpenGL没有渲染我的多维数据集

C++ OpenGL没有渲染我的多维数据集,c++,opengl,C++,Opengl,我最近开始学习OpenGL,并在上提供了教程。最初的几个教程进行得很顺利,我在屏幕上看到了我的三角形。现在我继续学习立方体教程,但我遇到了以下问题。为了渲染我的立方体,我只对三角形程序做了两大更改: 我通过添加更多顶点将三角形更改为立方体 我将所有初始化代码从主函数移到了其他不同的函数中 问题是,当我运行程序时,它编译得很好,并向我显示一个深蓝色屏幕(我为清除屏幕设置的颜色),但它不会渲染我的立方体 我的完整代码如下: #include "common/shader/loadShader.h

我最近开始学习OpenGL,并在上提供了教程。最初的几个教程进行得很顺利,我在屏幕上看到了我的三角形。现在我继续学习立方体教程,但我遇到了以下问题。为了渲染我的立方体,我只对三角形程序做了两大更改:

  • 我通过添加更多顶点将三角形更改为立方体
  • 我将所有初始化代码从主函数移到了其他不同的函数中
问题是,当我运行程序时,它编译得很好,并向我显示一个深蓝色屏幕(我为清除屏幕设置的颜色),但它不会渲染我的立方体

我的完整代码如下:

#include "common/shader/loadShader.h"
#include "common/logpp/log++.h"

#include <GL\glew.h>
#include <GL\glfw3.h>

#include <vector>

logpp::FileLog mainLog;

//Contains all functions for initializing OpenGL, GLEW and GLFW
namespace GLInit
{


    void SetGLFWWindowHints()
    {
        glfwWindowHint(GLFW_SAMPLES, 4);
        glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); /*OpenGL 3.3*/
        glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
#ifdef __APPLE__
        glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
#endif
        glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
    }

    void InitGLFW()
    {
        if (!glfwInit())
        {
            logpp::Console::error("Failed to initialize GLFW!");
            return;
        }


        SetGLFWWindowHints();
    }

    void InitGLEW()
    {
        glewExperimental = true; //Needed in core profile
        if (glewInit() != GLEW_OK)
        {
            logpp::Console::error("Failed to initialize GLEW!");
            return;
        }
    }

    GLuint CreateVAO()
    {
        GLuint VertexArrayID;
        glGenVertexArrays(1, &VertexArrayID);
        glBindVertexArray(VertexArrayID);

        return VertexArrayID;
    }

    GLFWwindow* CreateWin(int width, int height, char const* caption)
    {
        auto window = glfwCreateWindow(width, height, caption, nullptr, nullptr);
        if (window == nullptr)
        {
            std::string msg = "Failed to create window!";
            logpp::Console::error(msg);
            mainLog.write("[ERROR]: " + msg);
            glfwTerminate();
            return nullptr;
        }

        glfwMakeContextCurrent(window);

        return window;
    }

    GLFWwindow* Init(int width, int height, char const* caption)
    {

        InitGLFW();

        auto window = CreateWin(width, height, caption);

        InitGLEW();

        return window;
    }

}

using namespace GLInit;


int main()
{
    static const int VERTICES_IN_TRIANGLE = 3;


    PathConverter::setBase(R"(C:\Users\michi_000\Desktop\C++\OpenGL\A Colored Cube\x64\Debug\)");

    try
    {
        mainLog.open(PathConverter::convert("logs\\main.log"), false);

    }
    catch (logpp::FileLog::Exception e)
    {
        logpp::Console::error(e.what());
    }

    auto window = Init(800, 600, "A Colored Cube");
    auto VertexArrayID = CreateVAO();

    glfwSetInputMode(window, GLFW_STICKY_KEYS, GL_TRUE);

    static const std::vector<GLfloat> cube //Vertices for the cube
    {
        -1.0f,-1.0f,-1.0f, // triangle 1 : begin
        -1.0f,-1.0f, 1.0f,
        -1.0f, 1.0f, 1.0f, // triangle 1 : end
        1.0f, 1.0f,-1.0f, // triangle 2 : begin
        -1.0f,-1.0f,-1.0f,
        -1.0f, 1.0f,-1.0f, // triangle 2 : end
        1.0f,-1.0f, 1.0f,
        -1.0f,-1.0f,-1.0f,
        1.0f,-1.0f,-1.0f,
        1.0f, 1.0f,-1.0f,
        1.0f,-1.0f,-1.0f,
        -1.0f,-1.0f,-1.0f,
        -1.0f,-1.0f,-1.0f,
        -1.0f, 1.0f, 1.0f,
        -1.0f, 1.0f,-1.0f,
        1.0f,-1.0f, 1.0f,
        -1.0f,-1.0f, 1.0f,
        -1.0f,-1.0f,-1.0f,
        -1.0f, 1.0f, 1.0f,
        -1.0f,-1.0f, 1.0f,
        1.0f,-1.0f, 1.0f,
        1.0f, 1.0f, 1.0f,
        1.0f,-1.0f,-1.0f,
        1.0f, 1.0f,-1.0f,
        1.0f,-1.0f,-1.0f,
        1.0f, 1.0f, 1.0f,
        1.0f,-1.0f, 1.0f,
        1.0f, 1.0f, 1.0f,
        1.0f, 1.0f,-1.0f,
        -1.0f, 1.0f,-1.0f,
        1.0f, 1.0f, 1.0f,
        -1.0f, 1.0f,-1.0f,
        -1.0f, 1.0f, 1.0f,
        1.0f, 1.0f, 1.0f,
        -1.0f, 1.0f, 1.0f,
        1.0f,-1.0f, 1.0f
    }; 

    static const std::vector<GLfloat> cube_colors
    {
        0.583f,  0.771f,  0.014f,
        0.609f,  0.115f,  0.436f,
        0.327f,  0.483f,  0.844f,
        0.822f,  0.569f,  0.201f,
        0.435f,  0.602f,  0.223f,
        0.310f,  0.747f,  0.185f,
        0.597f,  0.770f,  0.761f,
        0.559f,  0.436f,  0.730f,
        0.359f,  0.583f,  0.152f,
        0.483f,  0.596f,  0.789f,
        0.559f,  0.861f,  0.639f,
        0.195f,  0.548f,  0.859f,
        0.014f,  0.184f,  0.576f,
        0.771f,  0.328f,  0.970f,
        0.406f,  0.615f,  0.116f,
        0.676f,  0.977f,  0.133f,
        0.971f,  0.572f,  0.833f,
        0.140f,  0.616f,  0.489f,
        0.997f,  0.513f,  0.064f,
        0.945f,  0.719f,  0.592f,
        0.543f,  0.021f,  0.978f,
        0.279f,  0.317f,  0.505f,
        0.167f,  0.620f,  0.077f,
        0.347f,  0.857f,  0.137f,
        0.055f,  0.953f,  0.042f,
        0.714f,  0.505f,  0.345f,
        0.783f,  0.290f,  0.734f,
        0.722f,  0.645f,  0.174f,
        0.302f,  0.455f,  0.848f,
        0.225f,  0.587f,  0.040f,
        0.517f,  0.713f,  0.338f,
        0.053f,  0.959f,  0.120f,
        0.393f,  0.621f,  0.362f,
        0.673f,  0.211f,  0.457f,
        0.820f,  0.883f,  0.371f,
        0.982f,  0.099f,  0.879f
    };

/*  static const std::vector<GLfloat> cube
    {
        1.0, -1.0, 0.0,
        -1.0, -1.0, 0.0,
        0.0, 1.0, 0.0
    };*/

    static const std::vector<GLfloat>::size_type triangleCount = cube.size() / VERTICES_IN_TRIANGLE;

    GLuint programID = LoadShaders(PathConverter::convert("shaders\\vertex.glsl").c_str(),
        PathConverter::convert("shaders\\fragment.glsl").c_str());

    GLuint vertexBuffer;
    glGenBuffers(1, &vertexBuffer);
    glBindBuffer(GL_ARRAY_BUFFER, vertexBuffer);
    glBufferData(GL_ARRAY_BUFFER, cube.size(), &cube, GL_STATIC_DRAW);

    GLuint colorbuffer;
    glGenBuffers(1, &colorbuffer);
    glBindBuffer(GL_ARRAY_BUFFER, colorbuffer);
    glBufferData(GL_ARRAY_BUFFER, cube_colors.size(), &cube_colors, GL_STATIC_DRAW);

    glClearColor(0.0f, 0.0f, 0.4f, 0.0f);

    do 
    {
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
        glUseProgram(programID);

        glEnableVertexAttribArray(0); //enable vertices
        glBindBuffer(GL_ARRAY_BUFFER, vertexBuffer);
        glVertexAttribPointer(0, triangleCount, GL_FLOAT, GL_FALSE, 0, nullptr);

        glDisableVertexAttribArray(0);

        // 2nd attribute buffer : colors
        glEnableVertexAttribArray(1);
        glBindBuffer(GL_ARRAY_BUFFER, colorbuffer);
        glVertexAttribPointer(
            1,                                // attribute. No particular reason for 1, but must match the layout in the shader.
            3,                                // size
            GL_FLOAT,                         // type
            GL_FALSE,                         // normalized?
            0,                                // stride
            nullptr                          // array buffer offset
        );

        glDisableVertexAttribArray(1);

        logpp::Console::debug("Drawing triangles");
        glDrawArrays(GL_TRIANGLES, 0, triangleCount);
//      glDisableVertexAttribArray(0);

        glfwSwapBuffers(window);
        glfwPollEvents();
    } while (glfwGetKey(window, GLFW_KEY_ESCAPE) != GLFW_PRESS
            && !glfwWindowShouldClose(window));

    glfwTerminate();

    return 0;
}
#包括“common/shader/loadShader.h”
#包括“common/logpp/log++.h”
#包括
#包括
#包括
logpp::FileLog mainLog;
//包含初始化OpenGL、GLEW和GLFW的所有函数
名称空间GLInit
{
void setglfwWindowHights()
{
glfwWindowHint(GLFW_样本,4个);
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR,3);/*OpenGL 3.3*/
glfwWindowHint(GLFW_上下文_版本_小调,3);
#苹果__
glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT,GL_TRUE);
#恩迪夫
glfwWindowHint(GLFW_OPENGL_配置文件、GLFW_OPENGL_核心配置文件);
}
void InitGLFW()
{
如果(!glfwInit())
{
logpp::Console::错误(“初始化GLFW失败!”);
返回;
}
setglfwWindowHits();
}
void InitGLEW()
{
glewExperimental=true;//核心配置文件中需要
如果(glewInit()!=GLEW\u确定)
{
logpp::Console::错误(“未能初始化GLEW!”);
返回;
}
}
GLuint CreateVAO()
{
胶合垂直排列;
glgenvertexarray(1和VertexArrayID);
glBindVertexArray(VertexArrayID);
返回VertexArrayID;
}
GLFWwindow*CreateWin(整数宽度、整数高度、字符常量*标题)
{
自动窗口=glfwCreateWindow(宽度、高度、标题、空PTR、空PTR);
如果(窗口==nullptr)
{
std::string msg=“创建窗口失败!”;
logpp::Console::error(msg);
mainLog.write(“[错误]:”+msg);
glfwTerminate();
返回空ptr;
}
glfwMakeContextCurrent(窗口);
返回窗口;
}
GLFWwindow*Init(整数宽度、整数高度、字符常量*标题)
{
InitGLFW();
自动窗口=CreateWin(宽度、高度、标题);
InitGLEW();
返回窗口;
}
}
使用名称空间GLInit;
int main()
{
三角形中顶点的静态常数=3;
PathConverter::setBase(R“(C:\Users\michi\u 000\Desktop\C++\OpenGL\A Colored Cube\x64\Debug\);
尝试
{
mainLog.open(PathConverter::convert(“logs\\main.log”),false);
}
捕获(logpp::FileLog::异常e)
{
logpp::Console::error(例如what());
}
自动窗口=Init(800600,“彩色立方体”);
auto VertexArrayID=CreateVAO();
glfwSetInputMode(窗口,GLFW_粘滞键,GL_真);
静态常量std::向量多维数据集//多维数据集的顶点
{
-1.0f,-1.0f,-1.0f,//三角形1:开始
-1.0f,-1.0f,1.0f,
-1.0f,1.0f,1.0f,//三角形1:结束
1.0f,1.0f,-1.0f,//三角形2:开始
-1.0f,-1.0f,-1.0f,
-1.0f,1.0f,-1.0f,//三角形2:结束
1.0f,-1.0f,1.0f,
-1.0f,-1.0f,-1.0f,
1.0f,-1.0f,-1.0f,
1.0f,1.0f,-1.0f,
1.0f,-1.0f,-1.0f,
-1.0f,-1.0f,-1.0f,
-1.0f,-1.0f,-1.0f,
-1.0f,1.0f,1.0f,
-1.0f,1.0f,-1.0f,
1.0f,-1.0f,1.0f,
-1.0f,-1.0f,1.0f,
-1.0f,-1.0f,-1.0f,
-1.0f,1.0f,1.0f,
-1.0f,-1.0f,1.0f,
1.0f,-1.0f,1.0f,
1.0f,1.0f,1.0f,
1.0f,-1.0f,-1.0f,
1.0f,1.0f,-1.0f,
1.0f,-1.0f,-1.0f,
1.0f,1.0f,1.0f,
1.0f,-1.0f,1.0f,
1.0f,1.0f,1.0f,
1.0f,1.0f,-1.0f,
-1.0f,1.0f,-1.0f,
1.0f,1.0f,1.0f,
-1.0f,1.0f,-1.0f,
-1.0f,1.0f,1.0f,
1.0f,1.0f,1.0f,
-1.0f,1.0f,1.0f,
1.0f,-1.0f,1.0f
}; 
静态常量标准::矢量立方体颜色
{
0.583f、0.771f、0.014f、,
0.609f、0.115f、0.436f、,
0.327f、0.483f、0.844f、,
0.822f、0.569f、0.201f、,
0.435f、0.602f、0.223f、,
0.310f、0.747f、0.185f、,
0.597f、0.770f、0.761f、,
0.559f、0.436f、0.730f、,
0.359f、0.583f、0.152f、,
0.483f、0.596f、0.789f、,
0.559f、0.861f、0.639f、,
0.195华氏度,0.548华氏度,0.859华氏度,
0.014f、0.184f、0.576f、,
0.771f、0.328f、0.970f、,
0.406f、0.615f、0.116f、,
0.676f、0.977f、0.133f、,
0.971f、0.572f、0.833f、,
0.140f、0.616f、0.489f、,
0.997f、0.513f、0.064f、,
0.945f、0.719f、0.592f、,
0.543f、0.021f、0.978f、,
0.279f、0.317f、0.505f、,
0.167华氏度,0.620华氏度,0.077华氏度,
0.347f,0.857f,0.137f,
0.055f、0.953f、0.042f、,
0.714f、0.505f、0.345f、,
0.783f、0.290f、0.734f、,
0.722f、0.645f、0.174f、,
0.302f、0.455f、0.848f、,
0.225f、0.587f、0.040f、,
0.517f、0.713f、0.338f、,
0.053f、0.959f、0.120f、,
0.393f、0.621f、0.362f、,
0.673f、0.211f、0.457f、,
0.820华氏度、0.883华氏度、0.371华氏度、,
0.982f、0.099f、0.879f
};
/*静态常量std::向量立方体
{
1.0, -1.0, 0.0,
-1.0, -1.0, 0.0,
0.0, 1.0, 0.0
};*/
静态常量std::vector::size\u type triangelcount=cube.size()/三角形中的顶点;
GLuint programID=LoadShaders(PathConverter::convert(“shaders\\vertex.glsl”).c_str(),
PathConverter::convert(“着色器\\fragment.glsl”).c_str();
GLuint顶点缓冲区;
glGenBuffers(1和vertexBuffer);
glBindBuffer(GL_数组_BUFFER,vertexBuffer);
glBufferData(GL_数组_BUFFER,cube.size(),&cube,G
glVertexAttribPointer(0, triangleCount, GL_FLOAT, GL_FALSE, 0, nullptr);
GLuint vertexBuffer;
glGenBuffers(1, &vertexBuffer);
glBindBuffer(GL_ARRAY_BUFFER, vertexBuffer);
glBufferData(GL_ARRAY_BUFFER,
   cube.size()*sizeof(GLfloat),
   cube.data(),
   GL_STATIC_DRAW);  

GLuint colorbuffer;
glGenBuffers(1, &colorbuffer);
glBindBuffer(GL_ARRAY_BUFFER, colorbuffer);
glBufferData(GL_ARRAY_BUFFER,
    cube_colors.size()*sizeof(GLfloat),
    cube_colors.data(),
    GL_STATIC_DRAW);
glEnableVertexAttribArray(0);
glBindBuffer(GL_ARRAY_BUFFER, vertexBuffer);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, nullptr);  

glEnableVertexAttribArray(1);
glBindBuffer(GL_ARRAY_BUFFER, colorbuffer);
glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 0, nullptr);

glDrawArrays(GL_TRIANGLES, 0, triangleCount);

glDisableVertexAttribArray(0);
glDisableVertexAttribArray(1);