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

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

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

OpenGLは、プラットフォームから独立した、デスクトップやワークステーション、モバイルサービスで使用可能な映像処理用のAPIです。

C++

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

Q&A

解決済

1回答

858閲覧

OpenGL 2つのテクスチャを読み込むと最後に読み込んだテクスチャのみが全体に表示されてしまうバグの対処方法が知りたい。

退会済みユーザー

退会済みユーザー

総合スコア0

OpenGL

OpenGLは、プラットフォームから独立した、デスクトップやワークステーション、モバイルサービスで使用可能な映像処理用のAPIです。

C++

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

0グッド

0クリップ

投稿2020/10/05 07:41

提示画像ですが地面インスタンスを一つだと下の緑のテクスチャが読み込まます。が2つのインスタンスでテクスチャをそれぞれ別のテクスチャにすると最後に読み込まれたテクスチャのみが表示さるのですが何をしていないのでしょうか?

イメージ説明
イメージ説明

cpp

1 2 //--------------------------------------------------------------------------------メッシュ 3 4 ground = new DrawVertex(this, "Assets/Ground.png", Ground, Ground_index); //地面 5 6 draw = new DrawVertex(this, "Assets/sample.png", vertex, vertex_index); //立方体 7 8 9 10 //---------------------------------------------------------------------------------

cpp

1 2//コンストラクタ 3DrawVertex::DrawVertex(Game* g, const char* texture, std::vector<Game::VertexAttribute> vert, std::vector<unsigned int> idx) : Transform() 4{ 5 Onwer = g; 6 key = KeyState::Rotate; // 7 keyMode = KeyState::Rotate; //現在のモード 8 9 10 11 12 if (LoadShader("Basic.vert", "Basic.frag") == false)//シェーダーを読み込む 13 { 14 printf("シェーダー読み込み失敗\n"); 15 } 16 17 18 //シェーダーでの画面描画配列を計算 19 mMove = glm::vec3(0,0,-7); 20 mScale = glm::vec3(1,1,1); 21 22 setMove(mMove); 23 setRotate_X(0); 24 setRotate_Y(0); 25 setRotate_Z(0); 26 setScale(mScale); 27 28 29 vertex = vert; //頂点 30 index = idx; //インデックス 31 32// printf("%d\n",index.size()); 33 34 //VAO 35 glGenVertexArrays(1, &vao); 36 glBindVertexArray(vao); 37 38 //VBO 39 glGenBuffers(1, &vbo); 40 glBindBuffer(GL_ARRAY_BUFFER, vbo); 41 glBufferData(GL_ARRAY_BUFFER, std::size(vertex) * sizeof(Game::VertexAttribute), std::data(vertex) ,GL_STATIC_DRAW); 42 43 //頂点座標 44 glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, sizeof(Game::VertexAttribute), NULL); 45 glEnableVertexAttribArray(0); 46 47 48 //UV座標 49 glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, sizeof(Game::VertexAttribute), (void*)(sizeof(GLfloat) * 3)); 50 glEnableVertexAttribArray(1); 51 52 53 //IBO 54 glGenBuffers(1, &ibo); 55 glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ibo); 56 glBufferData(GL_ELEMENT_ARRAY_BUFFER, std::size(index) * sizeof(unsigned int),std::data(index),GL_STATIC_DRAW); 57 58 59 //テクスチャを設定 60 glGenTextures(1,&TextureID); 61 glBindTexture(GL_TEXTURE_2D, TextureID); 62 63 const char* fileName = texture; 64 int width, height, numComponents; 65 66 unsigned char* data = stbi_load((fileName), &width, &height, &numComponents, 4); 67 68 if (data != NULL) { 69 glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, data); 70 } 71 else{ 72 std::cerr << "Unable to load texture: " << fileName << std::endl; 73 } 74 75 76 //ミニマップを設定 77 glGenerateMipmap(GL_TEXTURE_2D); 78 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); 79 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 80 81 82 //異方性フィルタリングを設定 83 GLfloat largest; 84 glGetFloatv(GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &largest); 85 86 glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, largest); 87 88 89 stbi_image_free(data); 90 91}

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

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

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

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

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

guest

回答1

0

ベストアンサー

提示コードにはありませんが.draw();関数で以下のコードを置いていなかったせいでしたOpenGLは最後に通達したテクスチャを使うため最後が別の画像だったためでした。

cpp

1glBindTexture(GL_TEXTURE_2D, TextureID);

投稿2020/10/05 07:49

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問