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

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

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

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

C++

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

Q&A

受付中

[OpenGL] 複数のメッシュがあるモデルを正しく描画する方法が知りたい。

退会済みユーザー

退会済みユーザー

総合スコア0

OpenGL

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

C++

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

0回答

0グッド

0クリップ

372閲覧

投稿2022/11/02 01:41

編集2022/11/02 02:12

Model.cppのRender()部ですが複数のメッシュを個別にドローコールするには処理が重たいので一つにまとめてるのですがこれは描画の仕方が間違えなのでしょうか?正しくはどうやるのでしょうか?
メッシュ事に個別にドローコールするのでしょうか?

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

Player.cpp

cpp

1 2void Player::Render(const glm::mat4 view) 3{ 4 shader->setEnable(); 5 6 shader->setUniformSampler2D("uImage", 0, texture.getID()); 7 shader->setUniformMatrix4x4fv("uViewProjection", view); 8 shader->setUniformMatrix4x4fv("uScale", transform.getMatScale()); 9 shader->setUniformMatrix4x4fv("uTranslate", transform.getMatPosition()); 10 shader->setUniformMatrix4x4fv("uRotate", transform.getMatRotate()); 11 12 model->Render(); 13 14 shader->setDisable(); 15} 16
Model.cpp

cpp

1#include "Model.hpp" 2#include <string> 3#include <vector> 4 5#include <iostream> 6 7#include <glm/glm.hpp> 8#include <assimp/Importer.hpp> 9#include <assimp/scene.h> 10#include <assimp/postprocess.h> 11 12 13FrameWork::Model::Model(std::vector<Mesh> m,std::string p) 14{ 15 mesh = m; 16 path = p; 17 glGenVertexArrays(1, &vao); 18 glGenBuffers(1, &vbo); 19 glGenBuffers(1, &ebo); 20 21 glBindVertexArray(vao); 22 glBindBuffer(GL_ARRAY_BUFFER, vbo); 23 glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ebo); 24 25 indexNum = 0; 26 for (int i = 0; i < mesh.size(); i++) 27 { 28 glBufferData(GL_ARRAY_BUFFER, mesh.at(i).vertex.size() * sizeof(VertexAttribute), mesh.at(i).vertex.data(), GL_STATIC_DRAW); 29 glBufferData(GL_ELEMENT_ARRAY_BUFFER, mesh.at(i).index.size() * sizeof(unsigned int), mesh.at(i).index.data(), GL_STATIC_DRAW); 30 indexNum += mesh.at(i).index.size(); 31 } 32 33 glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); 34 glBindVertexArray(0); 35 glBindBuffer(GL_ARRAY_BUFFER, 0); 36 37} 38 39 40std::string FrameWork::Model::getPath() 41{ 42 return path; 43} 44 45std::vector<FrameWork::Mesh> FrameWork::Model::getMesh() 46{ 47 return mesh; 48} 49 50 51void FrameWork::Model::Render() 52{ 53 glBindVertexArray(vao); 54 glBindBuffer(GL_ARRAY_BUFFER, vbo); 55 glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ebo); 56 57 glDrawElements(GL_TRIANGLES,indexNum,GL_UNSIGNED_INT,(void*)0); 58 59 glBindVertexArray(0); 60 glBindBuffer(GL_ARRAY_BUFFER, 0); 61 glBindTexture(GL_TEXTURE_2D, 0); 62 63} 64 65void FrameWork::Model::Update() 66{ 67 68}
Mesh.hpp

cpp

1#ifndef ___MESH_HPP___ 2#define ___MESH_HPP___ 3 4#include <vector> 5#include "glew/glew.h" 6#include "Transform.hpp" 7#include "Texture.hpp" 8namespace FrameWork 9{ 10 struct VertexAttribute 11 { 12 GLfloat position[3]; 13 GLfloat uv[2]; 14 //GLfloat normal[3]; 15 //GLfloat color[4]; 16 17 }; 18 19 20 21 class Mesh 22 { 23 public: 24 Mesh(std::vector<VertexAttribute> vert,std::vector<unsigned int> idx,std::vector<Texture> tex); 25 26 27 28 std::vector<Texture> texture; 29 std::vector<VertexAttribute> vertex; 30 std::vector<unsigned int> index; 31 32 33 private: 34 35 36 37 38 }; 39} 40 41 42#endif 43 44 45

以下のような質問にはグッドを送りましょう

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

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

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

cx20

2022/11/02 03:11

> 複数のメッシュ 単純に自分が用語を知らないだけかもしれないですが、 立方体のデータの場合は、立方体1つで1メッシュということではないのでしょうか? (何をもって複数メッシュと表現しているのかが知りたいです。) あと、可能であればモデルデータも共有頂けると認識齟齬が少なくなるのでは、と思います。 <参考> ■ ポリゴンメッシュ - Wikipedia https://ja.wikipedia.org/wiki/%E3%83%9D%E3%83%AA%E3%82%B4%E3%83%B3%E3%83%A1%E3%83%83%E3%82%B7%E3%83%A5

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

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

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

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

ただいまの回答率
86.02%

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

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

質問する

関連した質問

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

OpenGL

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

C++

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