質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

GLSL

GLSL (OpenGL Shading Language) はC言語をベースとしたシェーディング言語です。

Q&A

0回答

1091閲覧

頂点シェーダから入れた色をフラグメントシェーダーで指定できない。

退会済みユーザー

退会済みユーザー

総合スコア0

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

GLSL

GLSL (OpenGL Shading Language) はC言語をベースとしたシェーディング言語です。

0グッド

1クリップ

投稿2020/12/26 09:41

編集2020/12/26 10:16

以下の提示コードですが下のシェーダーコードですがなぜ色が適用されないのでしょうか?
フラグメントシェーダー部で = vec4(1,0,0,0.5);などと指定すると色が変えられますが。頂点に色を設定するやり方だと色が適用されません。
どうすればいいのでしょうか?
変数名を確認
エラーログは出ない。
コンパイルは成功している。
色々デバッグしましたがどう考えても場所はここです。何をしていないのでしょうか?

hpp

1#ifndef ___LINE_HPP_ 2#define ___LINE_HPP_ 3 4//自作ヘッダー 5#include "Transform_2D_Component.hpp" 6#include "ShaderComponent.hpp" 7//標準ヘッダー関係 8#include "stdio.h" 9#include <fstream> 10#include <sstream> 11#include <iostream> 12#include <vector> 13 14//OpenGL関係 15#include "GLEW/include/GL/glew.h" 16#include "gl/GL.h" 17#include "GLFW/include/GLFW/glfw3.h" 18 19//数学ライブラリ 20#include "glm/ext.hpp" 21#include "glm/glm.hpp" 22 23/*################################################################################################################ 24# 単色 線 描画クラス 25##################################################################################################################*/ 26 27class Line : public Transform_2D 28{ 29public: 30 31 Line(class Game* g, glm::ivec4 clr, glm::vec2 size); 32 33 34 void DrawGraph(int x, int y); //描画 35 36 37private: 38 39 //頂点属性 40 struct attribute 41 { 42 GLfloat position[2]; 43 GLfloat Color[4]; 44 }; 45 46 47 attribute vertex[2]; 48// attribute vertex[4]; 49 glm::vec2 mSize; 50 51 52 Game* game; 53 54 55 //インデックス配列 56 unsigned int index[2] = { 57 0,1 58 59 }; 60 /* 61 unsigned int index[6] = { 62 0,1,2, 63 0,3,2 64 }; 65 */ 66 67 //OpenGL 関係 68 GLuint VAO; 69 GLuint VBO; 70 GLuint IBO; 71 72 73 Shader* shader; //シェーダープログラム 74 75}; 76 77#endif

cpp

1#include "../Header/ShaderComponent.hpp" 2#include "../Header/Game.hpp" 3 4 5/*################################################################################################################ 6# 単色 矩形 描画クラス 7##################################################################################################################*/ 8//コンストラクタ 9Line::Line(class Game* g, glm::ivec4 clr, glm::vec2 size) : Transform_2D() 10{ 11 shader = new Shader(g, "Shader/2D/Line.vert", "Shader/2D/Line.frag"); 12// shader = new Shader(g, "Shader/2D/Rectangle.vert", "Shader/2D/Rectangle.frag"); 13 14 game = g;//Gameクラス 15 16 vertex[0] = attribute{ 100,100,1,0,0,0.5 }; 17 vertex[1] = attribute{ 200,-200,1,0,0,0.5 }; 18 19 20 mSize = size; 21 //VAO 22 glGenVertexArrays(1, &VAO); 23 glBindVertexArray(VAO); 24 25 //VBO 26 glGenBuffers(1, &VBO); 27 glBindBuffer(GL_ARRAY_BUFFER, VBO); 28 glBufferData(GL_ARRAY_BUFFER, (sizeof(vertex) / sizeof(vertex[0])) * sizeof(attribute), vertex, GL_STATIC_DRAW); 29 30 //頂点座標 31 glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, sizeof(attribute), NULL); 32 glEnableVertexAttribArray(0); 33 34 glVertexAttribPointer(1, 4, GL_FLOAT, GL_FALSE, 2, NULL); 35 glEnableVertexAttribArray(1); 36 37 38 //IBO 39 glGenBuffers(1, &IBO); 40 glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, IBO); 41 glBufferData(GL_ELEMENT_ARRAY_BUFFER, (sizeof(index) / sizeof(index[0])) * sizeof(unsigned int), index, GL_STATIC_DRAW); 42 43} 44 45//描画 46void Line::DrawGraph(int x, int y) 47{ 48 shader->Enable(); 49 50 51 int xx = (int)((-SCREEN_WIDTH / 2) + (mSize.x / 2.0)) + x; 52 int yy = (int)((SCREEN_HEIGHT / 2) - (mSize.y / 2.0)) - y; 53 54 55 setTransform_Move(glm::ivec2(xx, yy)); 56 57 58 59 shader->SetFloatUniform_3m("ViewMatrix", getViewMatrix()); 60 shader->SetFloatUniform_3m("WorldMatrix", getWorldMatrix()); 61 //shader->SetFloatUniform_4f("fragColor", glm::vec4(1.0f, 0.0f, 0.0f, 0.5f)); 62 63 64 glBindVertexArray(VAO); 65 glDrawElements(GL_LINES, sizeof(index), GL_UNSIGNED_INT, NULL); 66 67}
/*############################################################################################################### * 2D 線 描画  .vert ###############################################################################################################*/ #version 400 layout (location = 0) in vec2 pos; layout (location = 1) in vec4 fragColor; uniform mat3 ViewMatrix; uniform mat3 WorldMatrix; out vec4 out_Color; void main() { out_Color = fragColor;//色情報をフラグメントに渡す vec3 position = vec3(pos,1.0); gl_Position = vec4(position * WorldMatrix * ViewMatrix ,1.0); }
/*############################################################################################################### * 2D 線 描画  .frag ###############################################################################################################*/ #version 400 out vec4 Color; in vec4 out_Color; void main() { //Color = out_Color; float r = (1.0f / 255.0 ) * 192; float g = (1.0f / 255.0 ) * 48; float b = (1.0f / 255.0 ) * 192; // Color = out_Color; Color = vec4(r,g,b,1); }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hoshi-takanori

2020/12/26 11:29 編集

頂点座標の設定のところ、glVertexAttribPointer の引数が微妙におかしい気がします。 glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, sizeof(attribute), 0); glVertexAttribPointer(1, 4, GL_FLOAT, GL_FALSE, sizeof(attribute), (void*) (sizeof(GLfloat) * 2)); のような。 訂正: glVertexAttribPointer と glEnableVertexAttribArray の順番は関係ない気がしてきました…。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問