setDrawTextureID(unsigned char id);関数部ですがなぜglActiveTexture関数を使ってテクスチャIDを設定しているにも関わらず表示されるテクスチャが1のままなのでしょうか?
参考サイト(テクスチャユニット説明部): https://learnopengl.com/Getting-started/Textures
cpp
1#include "Sprite_2D.hpp" 2 3#include <iostream> 4#include <fstream> 5 6#include <glm/glm.hpp> 7#include <glm/gtc/matrix_Transform.hpp> 8#include <glm/gtx/Transform.hpp> 9 10 11#include "Shader.hpp" 12 13 14//コンストラクタ 15Sprite_2D::Sprite_2D(const char* vert,const char* frag) : Transform_2D(),Shader() 16{ 17 //シェーダー読み込み 18 LoadShader(vert, frag); 19 selectID = -1; 20 21 //頂点情報 22 Vertex rectangleVertex[6] = 23 { 24 //頂点、頂点色 25 {-0.5f,0.5f, 0.0f,1.0f}, 26 {-0.5f,-0.5f, 0.0f,0.0f}, 27 {0.5f,0.5f, 1.0f,1.0f}, 28 29 {0.5f,0.5f, 1.0f,1.0f}, 30 {-0.5f,-0.5f, 0.0f,0.0f}, 31 {0.5f,-0.5f, 1.0f,0.0f}, 32 }; 33 34 //vao 35 glGenVertexArrays(1, &vao); 36 glBindVertexArray(vao); 37 38 //vbo 39 glGenBuffers(1, &vbo); 40 glBindBuffer(GL_ARRAY_BUFFER, vbo); 41 42 //頂点 43 GLint attrib = getAttribLocation("vertexPosition"); 44 glEnableVertexAttribArray(attrib); 45 glBufferData(GL_ARRAY_BUFFER, 6 * sizeof(Vertex), rectangleVertex, GL_STATIC_DRAW); 46 glVertexAttribPointer(attrib, 2, GL_FLOAT, GL_FALSE, 4 * sizeof(GLfloat), (GLvoid*)0); 47 setBindAttribVertex("vertexPosition"); 48 49 attrib = getAttribLocation("vertexUV"); 50 glEnableVertexAttribArray(attrib); 51 glBufferData(GL_ARRAY_BUFFER, 6 * sizeof(Vertex), rectangleVertex, GL_STATIC_DRAW); 52 glVertexAttribPointer(attrib, 2, GL_FLOAT, GL_FALSE, 4 * sizeof(GLfloat), (GLvoid*)(sizeof(GLfloat) * 2)); 53 setBindAttribVertex("vertexUV"); 54 55 56 //アルファブレンド有効 57 glEnable(GL_BLEND); 58 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 59} 60 61 62// ###################### メンバ関数 ###################### 63 64//テクスチャ設定 65void Sprite_2D::setTexture(TextureData tex) 66{ 67 68 textureID.push_back(tex); 69 70 71 glGenTextures(1, &textureID.back().ID); //テクスチャIDの生成 72 73 //バインド 74 glPixelStorei(GL_UNPACK_ALIGNMENT, 1); 75 glBindTexture(GL_TEXTURE_2D, textureID.back().ID); 76 glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, textureID.back().size.x, textureID.back().size.y, 0, GL_RGBA, GL_UNSIGNED_BYTE, textureID.back().fileData); 77 78 // テクスチャの補間設定 79 glPixelStorei(GL_UNPACK_ALIGNMENT, 1); 80 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); 81 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); 82 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); 83 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); 84 85 setSizeScale(glm::vec3(textureID.back().size.x, textureID.back().size.y, 1.0f)); //スプライトサイズを設定 86 87 //自動で最後にロードしてテクスチャを描画するように設定 88 //glActiveTexture(textureID.back().ID); 89 selectID++; 90 91} 92 93// ###################### メンバ関数 ###################### 94 95//描画するテクスチャ番号を指定 96void Sprite_2D::setDrawTextureID(unsigned char id) 97{ 98 assert(id < textureID.size()); 99 selectID = id; 100 glActiveTexture(textureID.at(id).ID); 101 glBindTexture(GL_TEXTURE_2D, textureID.at(id).ID); 102 103} 104 105//描画 106void Sprite_2D::DrawGraph(glm::vec2 pos,glm::mat4 projection) 107{ 108 glBindVertexArray(vao); 109 glBindTexture(GL_TEXTURE_2D, textureID.at(selectID).ID); 110 111 setTranslate(glm::vec3(pos.x + (textureID.at(selectID).size.x / 2.0f), pos.y + (textureID.at(selectID).size.y / 2.0f), 0.0f)); //平行移動 112 113 //uniform 114 setUniformMatrix4fv("uTranslate", translate); 115 setUniformMatrix4fv("uRotate", rotate); 116 setUniformMatrix4fv("uScale", scale); 117 setUniformMatrix4fv("uViewProjection",projection); 118 119 glDrawArrays(GL_TRIANGLES, 0, 6); 120 121 122 glBindVertexArray(0); 123 glBindTexture(GL_TEXTURE_2D, 0); 124} 125 126//回転描画 127void Sprite_2D::DrawRotateGraph(glm::vec2 pos, float angle, glm::mat4 projection) 128{ 129 130 glBindVertexArray(vao); 131 glBindTexture(GL_TEXTURE_2D, textureID.at(selectID).ID); 132 133 setRotate(angle); //回転 134 setTranslate(glm::vec3(pos.x + (textureID.at(selectID).size.x / 2.0f), pos.y + (textureID.at(selectID).size.y / 2.0f), 0.0f)); //平行移動 135 136 //uniform 137 setUniformMatrix4fv("uTranslate", translate); 138 setUniformMatrix4fv("uRotate", rotate); 139 setUniformMatrix4fv("uScale", scale); 140 setUniformMatrix4fv("uViewProjection", projection); 141 142 glDrawArrays(GL_TRIANGLES, 0, 6); 143 144 glBindVertexArray(0); 145 glBindTexture(GL_TEXTURE_2D, 0); 146 147} 148 149//スケール描画 150void Sprite_2D::DrawExtendGraph(glm::vec2 pos, glm::vec2 s, glm::mat4 projection) 151{ 152 153 glBindVertexArray(vao); 154 glBindTexture(GL_TEXTURE_2D, textureID.at(selectID).ID); 155 156 setScale(s); //スケール 157 setTranslate(glm::vec3(pos.x + (textureID.at(selectID).size.x / 2.0f), pos.y + (textureID.at(selectID).size.y / 2.0f), 0.0f)); //平行移動 158 159 //Uniform 160 setUniformMatrix4fv("uTranslate", translate); 161 setUniformMatrix4fv("uRotate", rotate); 162 setUniformMatrix4fv("uScale", scale); 163 setUniformMatrix4fv("uViewProjection", projection); 164 165 166 glDrawArrays(GL_TRIANGLES, 0, 6); 167 168 glBindVertexArray(0); 169 glBindTexture(GL_TEXTURE_2D, 0); 170} 171 172 173 174//デストラクタ 175Sprite_2D::~Sprite_2D() 176{ 177 glDeleteVertexArrays(1, &vao); 178 glDeleteBuffers(1, &vbo); 179} 180 181
cpp
1 Sprite_2D sprite("Shader/BasicTexture_2D.vert","Shader/BasicTexture_2D.frag"); //表示オブジェクト 2 sprite.setTexture(LoadTexture("texture_1.png")); 3 sprite.setTexture(LoadTexture("texture_2.png")); 4 //sprite.Load("Shader/BasicMono_2D.vert", "Shader/BasicMono_2D.frag"); 5 6 7 8 glm::vec2 pos = glm::vec2(0, 0); 9 glm::vec2 scale = glm::vec2(0,0); 10 float angle = 0.0f; 11 12 while (*window) 13 { 14 glClearColor(0.0, 0.0, 1.0, 1.0); //カラーバッファのクリア色を設定 15 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); //カラーバッファ指定色でクリア 16 17 sprite.setEnable(); 18 sprite.setDrawTextureID(1); 19 20 21 22 23 24 //sprite.setUniform4f("uFragment", glm::vec4(0.0, 0.0, 1.0, 1.0)); 25 26 sprite.DrawGraph(pos,camera->getProjection_2D()); 27 sprite.DrawRotateGraph(pos, angle, camera->getProjection_2D()); 28 sprite.DrawExtendGraph(pos,scale,camera->getProjection_2D()); 29 30 31 32 33 sprite.setDisable(); 34 35 36 window->SwapBuffers(); //ダブルバッファリング 37 } 38 39} 40
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2021/05/04 04:40
退会済みユーザー
2021/05/04 07:14
退会済みユーザー
2021/05/04 07:57