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

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

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

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

C++

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

Q&A

0回答

576閲覧

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

退会済みユーザー

退会済みユーザー

総合スコア0

OpenGL

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

C++

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

0グッド

0クリップ

投稿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

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

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

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

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

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

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
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問