質問ですが、なぜ提示コードの頂点バッファーコメント部のような頂点を与えてもシェーダーで描画しようととすると提示画像のようなバグが発生するのでしょうか?自分は正規化デバイス座標で真ん中に表示するよう頂点座標を正規化デバイス座標で設定しましたこれができないのは異常に変なのですが自分は一体何をしているのでしょか?
glVertex3f();などといった確認用の簡易頂点関数などでの描画ではちゃんと正方形が表示されるためやはり何かおかしいと思うのですがOpenglは初心者ですのでどうしてもわかりません。
GLSL
1#version 400 2//フラグメントシェーダー 3out vec4 fragment; 4 5void main() 6{ 7 fragment = vec4(0.0,0.0,1.0,1.0); 8 9 10}
GLSL
1#version 400 2//頂点シェーダー 3 4layout(Location = 0) in vec3 position;//頂点座標 5 6 7void main() 8{ 9 gl_Position = vec4( position,1.0); 10} 11 12
cpp
1//シェーダを実装する 2void Game::Shader() 3{ 4 5 6 7//シェーダーの読み込みコードは長くてそれtに必要ないので割愛 8/* 9 10 11*/ 12 13 14 //フラグメントシェーダー 15 glBindAttribLocation(program, 0, "Vertex"); 16 17 //頂点シェーダー 18 glBindAttribLocation(program,1,"Vertex"); 19 20//***************************************************************************** 21 22 glLinkProgram(program); 23 24 //使わなくなったシェーダーオブジェクトを削除 25 glDeleteShader(out_frag); 26 glDeleteShader(out_vert); 27} 28 29 30//初期化 31bool Game::Initialization() 32{ 33 34//////////////////////////////////////////////////////////////////// 35 //頂点バッファー 36/* 37 const GLfloat Vertex[18] = 38 { 39 -0.5, 0.5, 1.0, 40 -0.5, -0.5, 1.0 , 41 +0.5, -0.5, 1.0, 42 43 -0.5, 0.5, 1.0, 44 0.5, 0.5, 1.0 , 45 +0.5, -0.5, 1.0 46 47 48 }; 49*/ 50////////////////////////////////////////////////////////////////// 51 Shader();//シェーダーを読み込む 52 53 glGenVertexArrays(1, &vbo); 54 glBindVertexArray(vbo); 55 glGenBuffers(1,&vbo); 56 glBindBuffer(GL_ARRAY_BUFFER, vbo); 57 glBufferData(GL_ARRAY_BUFFER, sizeof(Vertex), Vertex, GL_STATIC_DRAW);/////// 58 glVertexAttribPointer(0, 4, GL_FLOAT, GL_FALSE, 0, 0); 59 glEnableVertexAttribArray(0); 60 glBindVertexArray(vbo); 61 62 63 64 mIsRunLoop = true; 65 return mIsRunLoop; 66} 67 68//アップデート 69void Game::Update() 70{ 71 72} 73 74//描画アップデート 75void Game::GenerateOutput() 76{ 77 glClearColor(1.0f, 0.0f, 0.0f, 1.0f); 78 glClear(GL_COLOR_BUFFER_BIT); 79 80 glUseProgram(program);//シェーダーを有効にする 81 82 83 glDrawArrays(GL_POLYGON, 0,6); 84 85 glViewport(0,0,WIDTH,HEIGHT); 86} 87
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。