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

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

ただいまの
回答率

87.77%

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

受付中

回答 0

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 509
退会済みユーザー

退会済みユーザー

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

#ifndef ___LINE_HPP_
#define ___LINE_HPP_

//自作ヘッダー
#include "Transform_2D_Component.hpp"
#include "ShaderComponent.hpp"
//標準ヘッダー関係
#include "stdio.h"
#include <fstream>
#include <sstream>
#include <iostream>
#include <vector>

//OpenGL関係
#include "GLEW/include/GL/glew.h"
#include "gl/GL.h"
#include "GLFW/include/GLFW/glfw3.h"

//数学ライブラリ
#include "glm/ext.hpp"
#include "glm/glm.hpp"

/*################################################################################################################
# 単色 線 描画クラス
##################################################################################################################*/

class Line : public Transform_2D
{
public:

    Line(class Game* g, glm::ivec4 clr, glm::vec2 size);


    void DrawGraph(int x, int y);    //描画


private:

    //頂点属性
    struct attribute
    {
        GLfloat position[2];
        GLfloat Color[4];
    };


    attribute vertex[2];
//    attribute vertex[4];
    glm::vec2 mSize;


    Game* game;


    //インデックス配列
    unsigned int index[2] = {
        0,1

    };
    /*
    unsigned int index[6] = {
        0,1,2,
        0,3,2
    };
    */

    //OpenGL 関係
    GLuint VAO;
    GLuint VBO;
    GLuint IBO;


    Shader* shader;     //シェーダープログラム

};

#endif
#include "../Header/ShaderComponent.hpp"
#include "../Header/Game.hpp"


/*################################################################################################################
# 単色 矩形 描画クラス
##################################################################################################################*/
//コンストラクタ
Line::Line(class Game* g, glm::ivec4 clr, glm::vec2 size) : Transform_2D()
{    
    shader = new Shader(g, "Shader/2D/Line.vert", "Shader/2D/Line.frag");
//    shader = new Shader(g, "Shader/2D/Rectangle.vert", "Shader/2D/Rectangle.frag");

    game = g;//Gameクラス

    vertex[0] = attribute{ 100,100,1,0,0,0.5 };
    vertex[1] = attribute{ 200,-200,1,0,0,0.5 };


    mSize = size;
    //VAO
    glGenVertexArrays(1, &VAO);
    glBindVertexArray(VAO);

    //VBO
    glGenBuffers(1, &VBO);
    glBindBuffer(GL_ARRAY_BUFFER, VBO);
    glBufferData(GL_ARRAY_BUFFER, (sizeof(vertex) / sizeof(vertex[0])) * sizeof(attribute), vertex, GL_STATIC_DRAW);

    //頂点座標
    glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, sizeof(attribute), NULL);
    glEnableVertexAttribArray(0);

    glVertexAttribPointer(1, 4, GL_FLOAT, GL_FALSE, 2, NULL);
    glEnableVertexAttribArray(1);


    //IBO
    glGenBuffers(1, &IBO);
    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, IBO);
    glBufferData(GL_ELEMENT_ARRAY_BUFFER, (sizeof(index) / sizeof(index[0])) * sizeof(unsigned int), index, GL_STATIC_DRAW);

}

//描画
void Line::DrawGraph(int x, int y)
{
    shader->Enable();


    int xx = (int)((-SCREEN_WIDTH / 2) + (mSize.x / 2.0)) + x;
    int yy = (int)((SCREEN_HEIGHT / 2) - (mSize.y / 2.0)) - y;


    setTransform_Move(glm::ivec2(xx, yy));



    shader->SetFloatUniform_3m("ViewMatrix", getViewMatrix());
    shader->SetFloatUniform_3m("WorldMatrix", getWorldMatrix());
    //shader->SetFloatUniform_4f("fragColor", glm::vec4(1.0f, 0.0f, 0.0f, 0.5f));


    glBindVertexArray(VAO);
    glDrawElements(GL_LINES, sizeof(index), GL_UNSIGNED_INT, NULL);

}
/*###############################################################################################################
* 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);
}
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正の依頼

  • hoshi-takanori

    2020/12/26 19:57 編集

    頂点座標の設定のところ、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 の順番は関係ない気がしてきました…。

    キャンセル

  • 退会済みユーザー

    2020/12/26 22:45

    複数のユーザーから「やってほしいことだけを記載した丸投げの質問」という意見がありました
    「質問を編集する」ボタンから編集を行い、調査したこと・試したことを記入していただくと、回答が得られやすくなります。

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

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

  • ただいまの回答率 87.77%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る