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
> 複数のメッシュ
単純に自分が用語を知らないだけかもしれないですが、
立方体のデータの場合は、立方体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

あなたの回答
tips
プレビュー