Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/134.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++ Can';t使用OpenGL创建彩色三角形_C++_Opengl_Graphics - Fatal编程技术网

C++ Can';t使用OpenGL创建彩色三角形

C++ Can';t使用OpenGL创建彩色三角形,c++,opengl,graphics,C++,Opengl,Graphics,我正在跟随open.gl,我已经到达了渲染阶段,但是我的三角形没有出现在屏幕上。只有一个黑盒子 我使用的是Win7,最新的驱动程序和一切,VS2013 为了方便起见,我将代码放在这里: #define GLEW_STATIC #include <GL/glew.h> #include <GLFW/glfw3.h> #include <iostream> using namespace std; int main() { glfwInit();

我正在跟随open.gl,我已经到达了渲染阶段,但是我的三角形没有出现在屏幕上。只有一个黑盒子

我使用的是Win7,最新的驱动程序和一切,VS2013

为了方便起见,我将代码放在这里:

#define GLEW_STATIC

#include <GL/glew.h>
#include <GLFW/glfw3.h>
#include <iostream>

using namespace std;


int main() {
    glfwInit();

    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
    glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 2);
    glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
    glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);

    glfwWindowHint(GLFW_RESIZABLE, GL_FALSE);

    GLFWwindow* window = glfwCreateWindow(800, 600, "OpenGL", nullptr, nullptr);

    glfwMakeContextCurrent(window);

    glewExperimental = GL_TRUE;
    glewInit();

    float vertices[] = {
        0.0f, 0.5f,
        0.5f, -0.5f,
        -0.5f, -0.5f
    };

    GLuint vbo;
    glGenBuffers(1, &vbo);

    glBindBuffer(GL_ARRAY_BUFFER, vbo);

    glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);

    const char* vertexShaderCode =
        "#version 150\n"
        "in vec2 position;"
        "void main() {"
        "   gl_Position = vec4(position, 0.0, 1.0);"
        "}";

    const char* fragmentShaderCode =
        "#version 150\n"
        "out vec4 outColor;"
        "void main() {"
        "   outColor = vec4(1.0, 1.0, 1.0, 1.0);"
        "}";

    GLuint vertexShader = glCreateShader(GL_VERTEX_SHADER);
    glShaderSource(vertexShader, 1, &vertexShaderCode, NULL);
    glCompileShader(vertexShader);

    GLuint fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
    glShaderSource(fragmentShader, 1, &fragmentShaderCode, NULL);
    glCompileShader(fragmentShader);

    GLuint shaderProgram = glCreateProgram();
    glAttachShader(shaderProgram, vertexShader);
    glAttachShader(shaderProgram, fragmentShader);

    glBindFragDataLocation(shaderProgram, 0, "outColor");

    glLinkProgram(shaderProgram);
    glUseProgram(shaderProgram);

    GLint posAttrib = glGetAttribLocation(shaderProgram, "position");

    glVertexAttribPointer(posAttrib, 2, GL_FLOAT, GL_FALSE, 0, 0);

    glEnableVertexAttribArray(posAttrib);

    GLuint vao;
    glGenVertexArrays(1, &vao);

    glBindVertexArray(vao);

    while(!glfwWindowShouldClose(window)) {  
        glfwPollEvents();
        glfwSwapBuffers(window);

        glDrawArrays(GL_TRIANGLES, 0, 3);
    }

    glfwTerminate();
}
#定义GLEW#U静态
#包括
#包括
#包括
使用名称空间std;
int main(){
glfwInit();
glfwWindowHint(GLFW_上下文_版本_专业,3);
glfwWindowHint(GLFW_上下文_版本_小调,2);
glfwWindowHint(GLFW_OPENGL_配置文件、GLFW_OPENGL_核心配置文件);
glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT,GL_TRUE);
glfwWindowHint(GLFW_可调整大小,GL_为FALSE);
GLFWwindow*window=glfwCreateWindow(800600,“OpenGL”,nullptr,nullptr);
glfwMakeContextCurrent(窗口);
glewExperimental=GL_TRUE;
glewInit();
浮动顶点[]={
0.0f,0.5f,
0.5f,-0.5f,
-0.5f,-0.5f
};
GLuint vbo;
glGenBuffers(1,&vbo);
glBindBuffer(GL_数组_BUFFER,vbo);
glBufferData(GLU数组缓冲区、大小(顶点)、顶点、GLU静态图);
常量字符*vertexShaderCode=
“#版本150\n”
“处于vec2位置;”
“void main(){”
“gl_位置=向量4(位置,0.0,1.0);”
"}";
常量字符*fragmentShaderCode=
“#版本150\n”
“out vec4 OUTCLOR;”
“void main(){”
outColor=vec4(1.0,1.0,1.0,1.0)
"}";
GLuint vertexShader=glCreateShader(GL_VERTEX_SHADER);
glShaderSource(vertexShader,1和vertexShaderCode,NULL);
glCompileShader(顶点着色器);
GLuint fragmentShader=glCreateShader(GL\u fragmentShader);
glShaderSource(fragmentShader,1和fragmentShaderCode,NULL);
glCompileShader(fragmentShader);
GLuint shaderProgram=glCreateProgram();
glAttachShader(着色器程序、顶点着色器);
glAttachShader(着色器程序、碎片着色器);
glBindFragDataLocation(着色器程序,0,“outColor”);
GLLINK程序(着色器程序);
glUseProgram(shaderProgram);
GLint posAttrib=glGetAttribLocation(着色器程序,“位置”);
glvertexattributepointer(posAttrib,2,GL_FLOAT,GL_FALSE,0,0);
glEnableVertexAttribArray(posAttrib);
GLuint-vao;
glGenVertexArrays(1和vao);
glBindVertexArray(vao);
而(!glfwWindowShouldClose(window)){
glfwPollEvents();
glfwSwapBuffers(窗口);
gldrawArray(GL_三角形,0,3);
}
glfwTerminate();
}

检查所有glFw命令是否失败。要进行调试,请在每个OpenGL命令后检查glGetError。还要确保着色器已正确编译,如果未正确编译,请确保打印错误消息

最后,检查视口。

在指定顶点布局之前绑定VAO:

GLuint vao;
glGenVertexArrays(1, &vao);
glBindVertexArray(vao);

GLint posAttrib = glGetAttribLocation(shaderProgram, "position");
glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, 0);
glEnableVertexAttribArray(0);

谢谢!教程没有提到这一点。