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

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

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

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

C++

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

Q&A

0回答

1662閲覧

OpenGLオブジェクトを2つ表示させたい。

退会済みユーザー

退会済みユーザー

総合スコア0

OpenGL

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

C++

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

0グッド

0クリップ

投稿2020/10/03 05:07

編集2022/01/12 10:55

以下のコードですが2つのクラスのインスタンスを用意してコンストラクタで立方体と地面の板ポリ頂点を取得してそれを描画するプログラムなのですがdraw->Draw();のように2つ描画すると後に描画さらたオブジェクトこの場合では板ポリしか表示されませんこれはどうしたらいいのでしょ
うか?自分は2つのオブジェクト立方体と板ポリを適当なところに表示させて立方体を動かしたり板ポリを操作切り替えで動かしたいのですがその前にこの片方しか表示されない原因が知りたです。

またこのクラスのインスタンスが置いてあるGame.hppではシェーダーを使っています。

cpp

1#include "DrawVertex.hpp" 2#include <iostream> 3#include "stdio.h" 4 5#include <vector> 6#include "stb_image.h" 7//#include "Game.hpp" 8 9 10//コンストラクタ 11DrawVertex::DrawVertex(Game* Onwer, const char* texture, std::vector<Game::VertexAttribute> &vert, std::vector<unsigned int> &idx) 12{ 13 14 vertex = vert; //頂点 15 index = idx; //インデックス 16 17 printf("%d\n",index.size()); 18 19 //VAO 20 glGenVertexArrays(1, &vao); 21 glBindVertexArray(vao); 22 23 //VBO 24 glGenBuffers(1, &vbo); 25 glBindBuffer(GL_ARRAY_BUFFER, vbo); 26 glBufferData(GL_ARRAY_BUFFER, std::size(vertex) * sizeof(Game::VertexAttribute), std::data(vertex) ,GL_STATIC_DRAW); 27 28 //頂点座標 29 glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, sizeof(Game::VertexAttribute), NULL); 30 glEnableVertexAttribArray(0); 31 32 33 //UV座標 34 glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, sizeof(Game::VertexAttribute), (void*)(sizeof(GLfloat) * 3)); 35 glEnableVertexAttribArray(1); 36 37 38 //IBO 39 glGenBuffers(1, &ibo); 40 glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ibo); 41 glBufferData(GL_ELEMENT_ARRAY_BUFFER, std::size(index) * sizeof(unsigned int),std::data(index),GL_STATIC_DRAW); 42 43 44 45 46 //テクスチャを設定 47 const char* fileName = texture; 48 int width, height, numComponents; 49 50 unsigned char* data = stbi_load((fileName), &width, &height, &numComponents, 4); 51 52 if (data != NULL) { 53 glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, data); 54 } 55 else 56 { 57 std::cerr << "Unable to load texture: " << fileName << std::endl; 58 59 } 60 61 62 63 64 //ミニマップを設定 65 glGenerateMipmap(GL_TEXTURE_2D); 66 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); 67 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 68 69 70 //異方性フィルタリングを設定 71 GLfloat largest; 72 glGetFloatv(GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &largest); 73 74 glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, largest); 75 76 77 stbi_image_free(data); 78 79} 80 81 82void DrawVertex::Draw() 83{ 84// Onwer->CreateDrawMatrix(); 85 86 87 88 printf("%d\n", index.size()); 89// glBindTexture(GL_TEXTURE_2D, TextureID); 90 glDrawElements(GL_TRIANGLES, index.size(), GL_UNSIGNED_INT, NULL); 91 92}; 93```] 94```cpp 95 //メッシュ 96 draw = new DrawVertex(this, "Assets/sample.png", vertex, vertex_index); //立方体 97 98 // ground = new DrawVertex(this,"Assets/sample.png",Ground,Ground_index); //地面 99

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問