2016-11-24 2 views
0

私はOpenGLの世界の新しいですので、それは週のようです 私はどのようにOpenGLの仕事を理解しようとしている。だから私は私のコード 別の例を使用して私は問題なくコンパイルしました。 しかし、キューブは表示されず、私は理由を知らない。誰も私のミスを私に説明することはできますか? GLEWはINITこのコードを追加した後OpenGLのキューブが表示されていません

#define GL_GLEXT_PROTOTYPES 

#include <GL/glew.h> 
#include <iostream> 
#include <GL/gl.h> 
#include <GL/freeglut.h> 



using namespace std; 

void display(void); 

int main(int argc, char ** argv) 
{ 

    glutInit(&argc, argv); 
    glutInitDisplayMode(GLUT_RGBA); 
    glutInitWindowSize(512, 512); 

    glutCreateWindow(argv[0]); 


    glutInitContextVersion(4, 5); 
    glutInitContextProfile(GLUT_CORE_PROFILE); 
    cout<< glGetString(GL_VERSION)<< endl; 
    if (glewInit()) { 
     cerr << "Unable to initialize GLEW ... exiting" << endl; 
     exit(EXIT_FAILURE); 
    } 


    GLuint i; 
    GLuint vertex[1]; 

    glGenVertexArrays(3*12,vertex); 
    glBindVertexArray(vertex[0]); 
    static const GLfloat fl[] = { 
    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 
}; 

    glGenBuffers(1,&i); 
    glBindBuffer(GL_ARRAY_BUFFER,i); 
    glBufferData(GL_ARRAY_BUFFER,sizeof(fl),fl,GL_STATIC_DRAW); 
    glEnableVertexAttribArray(1); 

    const GLchar* vvs="#version 450\n" 
    "in vec3 vp;\n" 
    "void main() {\n" 
    " gl_Position = vec4(vp, 1.0);\n" 
    "}\n"; 
    const GLchar* gg= 
    "#version 450 core" 
    "out vec4 fColor;" 
    "void" 
    "main()" 
    "{" 
    "fColor = vec4(0.0, 0.0, 1.0, 1.0);" 
    "}"; 

    GLint sh= glCreateShader(GL_VERTEX_SHADER); 
    glShaderSource(sh,1,&vvs,NULL); 
    glShaderSource(sh,1,&gg,NULL); 
    glCompileShader(sh); 

    GLint program=glCreateProgram(); 
    glAttachShader(program,sh); 
    glLinkProgram(program); 

     glUseProgram(program); 
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 
    (void*)0       // array buffer offset 
); 

    glDisableVertexAttribArray(1); 
    glutDisplayFunc(display); 
    glutMainLoop(); 
} 


void display(void) 
{ 
    glClear(GL_COLOR_BUFFER_BIT); 



    glDrawArrays(GL_TRIANGLES,0,12*3); 
    glutSwapBuffers(); 
    glFlush(); 
} 

答えて

1

GLuint VBO; 
GLuint VAO; 

glGenVertexArrays(1, &VAO); 
glBindVertexArray(VAO); 

static const GLfloat fl[] = { 
    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 
}; 

glGenBuffers(1, &VBO); 
glBindBuffer(GL_ARRAY_BUFFER, VBO); 
glBufferData(GL_ARRAY_BUFFER, sizeof(fl), fl, GL_STATIC_DRAW); 

const GLchar* vertShaderSource = "#version 450 core\n" 
    "in vec3 vp;\n" 
    "void main() {\n" 
    " gl_Position = vec4(vp, 1.0);\n" 
    "}\n"; 

const GLchar* fragShaderSource = 
    "#version 450 core\n" 
    "out vec4 fColor;\n" 
    "void main()" 
    "{" 
    "fColor = vec4(0.0, 0.0, 1.0, 1.0);" 
    "}"; 

GLint vertShader = glCreateShader(GL_VERTEX_SHADER); 
glShaderSource(vertShader, 1, &vertShaderSource, NULL); 
glCompileShader(vertShader); 

GLint fragShader = glCreateShader(GL_FRAGMENT_SHADER); 
glShaderSource(fragShader, 1, &fragShaderSource, NULL); 
glCompileShader(fragShader); 

GLint program = glCreateProgram(); 
glAttachShader(program, vertShader); 
glAttachShader(program, fragShader); 
glLinkProgram(program); 

glUseProgram(program); 

glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(float), (void*)0); 
glEnableVertexAttribArray(0); 

が次に描く はここでコードがあります。

コードにはどこにでも問題がありました。コピーして貼り付けただけですか? いくつかのx値に負の値を追加する前後に取得します。私はそれがキューブだとは思わない、私はそれがランダムな点だと思う。その様子から、

enter image description here

+0

私はそれを得る特定のチュートリアルはありません。それは私のコードは、私は他の人を見て書き込み..懇願で私はarraybufferを生成せずに頂点を描画しようとしたが、私は何も描画しません。私のコードを修正できますか? –

1

、あなたはフラグメント文字列と頂点シェーダコードを上書きしています。 GL_VERTEX_SHADERGL_FRAGMENT_SHADERの2つのglCreateShaderコールがそれぞれ別のglAttachShader(同じプログラム)と一緒に必要です。

+0

私はそれをしましたが、何もしませんでした –

+1

それから質問を更新してください。そうでなければ、コードが現時点でどのように見えるかは誰も知りません。 – BDL

+0

母、36のVAOを作ったのではないかと心配していませんか? – Zebrafish

1

、他の2つの答えに加えて:

  • あなたは、フラグメントシェーダコードに改行を追加する必要があります。そして、コンパイルとリンクが正常に行われたかどうかを確認する必要があります。
  • vp属性にはロケーション1が割り当てられていると仮定していますが、それは保証されていません。レイアウト修飾子をシェーダに追加するか、属性の場所をクエリします。
関連する問題