Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.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_Opengl 3 - Fatal编程技术网

C Opengl什么也没画,只是告诉我没有错误

C Opengl什么也没画,只是告诉我没有错误,c,opengl,opengl-3,C,Opengl,Opengl 3,当我运行程序时,窗口是黑色的。我一直在使用这个教程。虽然我没有逐字复制glgeterror显示为0。我的代码有什么问题。我使用了9个数组元素,而不是教程中建议的6个,但弥补了这一不足 #include <stdio.h> #include <stdlib.h> #include <GL/glew.h> #include <GLFW/glfw3.h> int main(){ //window initalization if

当我运行程序时,窗口是黑色的。我一直在使用这个教程。虽然我没有逐字复制<代码>glgeterror显示为0。我的代码有什么问题。我使用了9个数组元素,而不是教程中建议的6个,但弥补了这一不足

#include <stdio.h>
#include <stdlib.h>
#include <GL/glew.h>
#include <GLFW/glfw3.h>

int main(){
    //window initalization
        if(!glfwInit()){
                fprintf(stderr,"failed glfw initialization");
                return -1;
        }

        GLFWwindow* window = glfwCreateWindow(800,800,"i hope this works",NULL,NULL);
        if (!window){
                fprintf(stderr,"window creation failed");
                return -1;
        }
        glfwMakeContextCurrent(window);
    //glew initialization
        glewExperimental = 1;
        if(glewInit() != GLEW_OK){
                fprintf(stderr,"glew failed to initialize");
                return -1;

    //vertex specification(vs)
    //vertex array object(vs)
    GLuint vao;
    glGenVertexArrays(1, &vao);
    glBindVertexArray(vao);

    //vertex buffer object(vs)
    GLuint vbo;
    glGenBuffers(1, &vbo);

    //vertex data(vs)
    const GLfloat tri_verts[] = {
        -1.0f,1.0f,0.0f,
        -1.0f,0.0f,0.0f,
         1.0f,0.0f,0.0f};
        //-west +east -south +north -farther +closer
        //{{x,y,z}{x,y,z}{x,y,z}}
        //just a nemonic to associate which direction each letter goes.

    //bind the vertices to the buffer(vs)
    glBindBuffer(GL_ARRAY_BUFFER, vbo);
    glBufferData(GL_ARRAY_BUFFER,sizeof(tri_verts),tri_verts,GL_STATIC_DRAW);

    //vertex processing(vp)
    //vertex shader(vp)
    const GLchar* Vshader_source = "\
    version 330 \
    in vec3 position; \
    void main() \
     \
    gl_Position = vec4(position,1.0); \
     \
    ";
    //fragment shader(vp)
    const GLchar* Fshader_source = "\
    #version 330\
    out vec4 outColor;\
    void main()\
    {\
        outColor = vec4(1.0, 1.0, 1.0, 1.0);\
    }";

    //shader compilation(vp)
    GLuint vertexShader = glCreateShader(GL_VERTEX_SHADER);
    glShaderSource(vertexShader, 1,&Vshader_source,NULL);
    glCompileShader(vertexShader);

    //vertex shader compilation status
    GLint Vstatus;      
    glGetShaderiv(vertexShader, GL_COMPILE_STATUS, &Vstatus);
    char Vbuffer[512];
    glGetShaderInfoLog(vertexShader, 512, NULL, Vbuffer);
    fprintf(stderr,"%s",Vbuffer);
    fprintf(stderr,"\n\n");

    //fragment shader compilation
    GLuint fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
    glShaderSource(fragmentShader, 1, &Fshader_source, NULL);
    glCompileShader(fragmentShader);

    //Fragment shader compilation status
    GLint Fstatus;         
        glGetShaderiv(fragmentShader, GL_COMPILE_STATUS, &Fstatus);
        char Fbuffer[512];
        glGetShaderInfoLog(fragmentShader, 512, NULL, Fbuffer);
    fprintf(stderr,"%s",Fbuffer);

    //shader program creation
    GLuint shaderProgram = glCreateProgram();
    glAttachShader(shaderProgram,vertexShader);
    glAttachShader(shaderProgram,fragmentShader);
    glBindFragDataLocation(shaderProgram,0,"outcolor");
    glLinkProgram(shaderProgram);
    glUseProgram(shaderProgram);

    //tell opengl how to interpret and format the vertices data
    GLint posAttrib = glGetAttribLocation(shaderProgram, "position");
    glVertexAttribPointer(posAttrib,3, GL_FLOAT,GL_FALSE,0,0);
    glEnableVertexAttribArray(posAttrib );

    //vertex post-processing(fixed)
    //Primitive assembly(fixed)
    //Rasterization(fixed)
    //Fragment Processing(fixed)
    //per-sample operations(fixed)

        }
    char error_num = 0;
        while(!glfwWindowShouldClose(window)){
        glClearColor(0.1f, 0.1f, 0.1f, 1.0f);
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
        if (!error_num){
                fprintf(stderr,"%d",glGetError());
                error_num++;
        }
        glDrawArrays(GL_TRIANGLES,0,3);
        glfwSwapBuffers(window);
        glfwPollEvents();
        }
}
#包括
#包括
#包括
#包括
int main(){
//窗口初始化
如果(!glfwInit()){
fprintf(stderr,“glfw初始化失败”);
返回-1;
}
GLFWwindow*window=glfwCreateWindow(800800,“我希望它能工作”,NULL,NULL);
如果(!窗口){
fprintf(stderr,“窗口创建失败”);
返回-1;
}
glfwMakeContextCurrent(窗口);
//glew初始化
glewExperimental=1;
如果(glewInit()!=GLEW\u确定){
fprintf(stderr,“glew未能初始化”);
返回-1;
//顶点规范(vs)
//顶点数组对象(vs)
GLuint-vao;
glGenVertexArrays(1和vao);
glBindVertexArray(vao);
//顶点缓冲区对象(vs)
GLuint vbo;
glGenBuffers(1,&vbo);
//顶点数据(vs)
常量GLfloat tri_verts[]={
-1.0f,1.0f,0.0f,
-1.0f,0.0f,0.0f,
1.0f,0.0f,0.0f};
//-西+东-南+北-更远+更近
//{{x,y,z}{x,y,z}{x,y,z}
//只需一个nemonic来关联每个字母的方向。
//将顶点绑定到缓冲区(vs)
glBindBuffer(GL_数组_BUFFER,vbo);
glBufferData(GL_数组_缓冲区、sizeof(tri_verts)、tri_verts、GL_静态_DRAW);
//顶点处理(vp)
//顶点着色器(vp)
常量GLchar*Vshader_源=”\
330版\
在vec3位置\
void main()\
\
gl_位置=vec4(位置,1.0)\
\
";
//片段着色器(vp)
常量GLchar*Fshader\u源=”\
#330版\
外显vec4外显色\
void main()\
{\
outColor=vec4(1.0,1.0,1.0,1.0)\
}";
//着色器编译(vp)
GLuint vertexShader=glCreateShader(GL_VERTEX_SHADER);
glShaderSource(顶点着色器,1,&Vshader_源,NULL);
glCompileShader(顶点着色器);
//顶点着色器编译状态
闪烁状态;
glGetShaderiv(顶点着色器、GL编译状态和Vstatus);
char-Vbuffer[512];
glGetShaderInfoLog(顶点着色器,512,NULL,Vbuffer);
fprintf(标准,“%s”,Vbuffer);
fprintf(stderr,“\n\n”);
//片段着色器编译
GLuint fragmentShader=glCreateShader(GL\u fragmentShader);
glShaderSource(fragmentShader,1和Fshader_源,NULL);
glCompileShader(fragmentShader);
//片段着色器编译状态
闪烁的状态;
glGetShaderiv(碎片着色器、GL\u编译状态和Fstatus);
char Fbuffer[512];
glGetShaderInfoLog(fragmentShader,512,NULL,Fbuffer);
fprintf(标准,“%s”,Fbuffer);
//着色器程序创建
GLuint shaderProgram=glCreateProgram();
glAttachShader(着色器程序、顶点着色器);
glAttachShader(着色器程序、碎片着色器);
glBindFragDataLocation(着色器程序,0,“outcolor”);
GLLINK程序(着色器程序);
glUseProgram(shaderProgram);
//告诉opengl如何解释和格式化顶点数据
GLint posAttrib=glGetAttribLocation(着色器程序,“位置”);
glvertexattributepointer(posAttrib,3,GL_FLOAT,GL_FALSE,0,0);
glEnableVertexAttribArray(posAttrib);
//顶点后处理(固定)
//基本部件(固定)
//光栅化(固定)
//片段处理(固定)
//每个样本操作(固定)
}
字符错误_num=0;
而(!glfwWindowShouldClose(窗口)){
glClearColor(0.1f、0.1f、0.1f、1.0f);
glClear(GL_颜色_缓冲_位| GL_深度_缓冲_位);
如果(!error_num){
fprintf(stderr,“%d”,glGetError());
错误_num++;
}
GLDRAW阵列(GLU三角形,0,3);
glfwSwapBuffers(窗口);
glfwPollEvents();
}
}
  • Vshader_source
    version 330
    !=<代码>#版本330。我强烈怀疑您的着色器未按原样编译/链接
  • #version
    指令后面需要实际的大写“
    \n
    换行符。线路延续不足
  • 使用
    GL\u COMPILE\u STATUS
    位执行某些操作(例如转储编译日志并退出),而不是盲目地在程序执行中蹒跚前行
  • 在glLinkProgram()之后检查
    GL\u LINK\u状态
    &如果需要,转储链接日志
  • 如果你想使用
    \VERSION 330
    ,现在你只是希望得到3.3版本,那么在窗口创建时显式地请求(通过
    glfwWindowHint()
    GLFW\u CONTEXT\u VERSION\u MINOR
    )3.3版本的上下文
  • 额外的防弹设置
请随意使用来自的着色器加载程序类。

  • Vshader_source
    version 330
    !=<代码>#版本330。我强烈怀疑您的着色器未按原样编译/链接
  • #version
    指令后面需要实际的大写“
    \n
    换行符。线路延续不足
  • 使用
    GL\u COMPILE\u STATUS
    位执行某些操作(例如转储编译日志并退出),而不是盲目地在程序执行中蹒跚前行
  • 在glLinkProgram()之后检查
    GL\u LINK\u状态
    &如果需要,转储链接日志
  • 如果你想使用
    \VERSION 330
    ,现在你只是希望得到3.3版本,那么在窗口创建时显式地请求(通过
    glfwWindowHint()
    GLFW\u CONTEXT\u VERSION\u MINOR
    )3.3版本的上下文
  • 额外的防弹设置
请随意使用中的着色器加载程序类。

看起来像
if(glewInit() != GLEW_OK){
    fprintf(stderr,"glew failed to initialize");
    return -1;
version 330
in vec3 position;
void main()
  gl_Position = vec4(position,1.0);
#version 330
in vec3 position;
void main() {
  gl_Position = vec4(position,1.0);
}
const GLchar* Vshader_source =
    "#version 330\n"
    "in vec3 position;"
    "void main() {"
    "  gl_Position = vec4(position,1.0);"
    "}";
glBindFragDataLocation(shaderProgram,0,"outcolor");