提示コードの////コメントの内部のコードです 正方形となる頂点座標を入力して単純なシェーダーを使って描画を行いたいのですが線が描画されてしまいます。この原因がわかりません。頂点情報の位置情報は変わっていないのですが**どうった原因で位置情報が変更されているのでしょうか?**頂点座標を変更するコードはこのプログラムにはありません
試したこと [ 頂点シェーダーファイルのvec4変数の第三引数や第四引数をいじりましたが表示は変わりません。またフラグメントシェーダーは単純に色を描画するだけなので問題ないです。また色が青になることシェーダーファイル適用されています。]
cpp
1 struct Vertex 2 { 3 GLfloat position[2]; 4 //GLfloat color[4]; 5 }; 6
cpp
1#include "DrawTest.hpp" 2 3//コンストラクタ 4DrawTest::DrawTest() 5{ 6 7//////////////////////////////////////////////////////////////////////////////////////////////////// 8 //頂点座標 9 Vertex rectangleVertex[4] = 10 { 11 //頂点、頂点色 12 {-0.5f,-0.5f}, 13 {0.5f,-0.5f }, 14 {0.5f,0.5f }, 15 {-0.5f,0.5f } 16 }; 17 18 /* 19 20 //頂点座標 21 Vertex rectangleVertex[4] = 22 { 23 //頂点、頂点色 24 {-0.5f,-0.5f, 0.0,0.0,1.0,1.0}, 25 {0.5f,-0.5f , 0.0,0.0,1.0,1.0}, 26 {0.5f,0.5f , 0.0,0.0,1.0,1.0}, 27 {-0.5f,0.5f , 0.0,0.0,1.0,1.0} 28 }; 29 30 */ 31 32 //vao 33 glGenVertexArrays(1, &vao); 34 glBindVertexArray(vao); 35 36 //vbo 37 glGenBuffers(1, &vbo); 38 glBindBuffer(GL_ARRAY_BUFFER, vbo); 39 40 41 42 //頂点 43 glBufferData(GL_ARRAY_BUFFER, 4 * sizeof(Vertex), rectangleVertex, GL_STATIC_DRAW); 44 glVertexAttribPointer(0, 2, GL_FLOAT,GL_FALSE, 4 * sizeof(Vertex), (GLvoid*)0); 45 glEnableVertexAttribArray(0); 46 47 48 /* 49 //頂点カラー 50 glBufferData(GL_ARRAY_BUFFER, 4 * sizeof(Vertex), rectangleVertex, GL_STATIC_DRAW); 51 glVertexAttribPointer(1, 4, GL_FLOAT, GL_FALSE, 4 * sizeof(Vertex),(GLvoid*)(2 * sizeof(GLfloat))); 52 glEnableVertexAttribArray(1); 53 */ 54 55/////////////////////////////////////////////////////////////////////////////////////////////// 56 57} 58 59//更新 60void DrawTest::Update() 61{ 62 63} 64 65//描画 66void DrawTest::Draw() 67{ 68 glBindVertexArray(vao); 69 glDrawArrays(GL_LINE_LOOP, 0, 4); 70} 71 72//デストラクタ 73DrawTest::~DrawTest() 74{ 75 glDeleteVertexArrays(1, &vao); 76 glDeleteBuffers(1, &vbo); 77 78} 79 80
cpp
1#include "Shader.hpp" 2#include "DrawTest.hpp" 3 4 5int main() 6{ 7 if (glfwInit() == GL_FALSE) 8 { 9 std::cerr << "glfw初期化失敗。" << std::endl; 10 return -1; 11 } 12 13 atexit(glfwTerminate); //プログラム終了時の処理を登録 14 Window window; //コンテキストを作成 15 16 //OpenGL Verison 3.2 Core Profile を選択する 17 glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR,3); 18 glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR,3); 19 glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT,GL_TRUE); 20 glfwWindowHint(GLFW_OPENGL_PROFILE,GLFW_OPENGL_CORE_PROFILE); 21 22 glClearColor(1.0, 0.0, 0.0, 1.0); //背景色 23// ############################################################################# 24 25 DrawTest test; 26 27 28 Shader shader("Test.vert","Test.frag"); 29 30 shader.setBindAttribVertex(0, "Position"); 31 shader.setBindAttribFragment(0, "fragment"); 32 33 34 while (window) 35 { 36 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); //カラーバッファをクリア 37 shader.Active(); 38 39 test.Draw(); 40 41 window.SwapBuffers(); //ダブルバッファリング 42 } 43 44} 45
glsl
1#version 330 core 2 3in vec2 position; 4 5 6void main() 7{ 8 gl_Position = vec4(position.x,position.y,1.0,1.0); //座標 9}
cpp
1#version 330 core 2 3out vec4 fragment; 4 5 6void main() 7{ 8 fragment = vec4(0.0,0.0,1.0,1.0); 9}
回答1件
あなたの回答
tips
プレビュー