#pragma once
#include "ofMain.h"
#include "ofxAssimpMeshHelper.h"
#include <assimp/cimport.h>
#include <assimp/scene.h>
#include <assimp/postprocess.h>
using namespace std;
inline ofFloatColor aiColorToOfColor(const aiColor4D& c){
return ofFloatColor(c.r,c.g,c.b,c.a);
}
inline ofFloatColor aiColorToOfColor(const aiColor3D& c){
return ofFloatColor(c.r,c.g,c.b,1);
}
inline ofDefaultVec3 aiVecToOfVec(const aiVector3D& v){
return ofDefaultVec3(v.x,v.y,v.z);
}
inline vector<ofDefaultVec3> aiVecVecToOfVecVec(const vector<aiVector3D>& v){
vector<ofDefaultVec3> ofv(v.size());
memcpy(ofv.data(),v.data(),v.size()*sizeof(ofDefaultVec3));
return ofv;
}
inline void aiMeshToOfMesh(const aiMesh* aim, ofMesh& ofm, ofxAssimpMeshHelper * helper = NULL){
ofm.setMode(OF_PRIMITIVE_TRIANGLES);
for (int i=0; i < (int)aim->mNumVertices;i++){
ofm.addVertex(ofVec3f(aim->mVertices[i].x,aim->mVertices[i].y,aim->mVertices[i].z));
}
if(aim->HasNormals()){
for (int i=0; i < (int)aim->mNumVertices;i++){
ofm.addNormal(ofVec3f(aim->mNormals[i].x,aim->mNormals[i].y,aim->mNormals[i].z));
}
}
if(aim->GetNumUVChannels()>0){
for (int i=0; i < (int)aim->mNumVertices;i++){
if(helper && helper->hasTexture()){
ofTexture & tex = helper->getTextureRef();
ofVec2f texCoord = tex.getCoordFromPercent(aim->mTextureCoords[0][i].x ,aim->mTextureCoords[0][i].y);
ofm.addTexCoord(texCoord);
}else{
ofm.addTexCoord(ofVec2f(aim->mTextureCoords[0][i].x ,aim->mTextureCoords[0][i].y));
}
}
}
if(aim->GetNumColorChannels()>0){
for (int i=0; i < (int)aim->mNumVertices;i++){
ofm.addColor(aiColorToOfColor(aim->mColors[0][i]));
}
}
for (int i=0; i <(int) aim->mNumFaces;i++){
if(aim->mFaces[i].mNumIndices>3){
ofLogWarning("ofxAssimpUtils") << "aiMeshToOfMesh(): non triangular face found: model face " << i;
}
for (int j=0; j<(int)aim->mFaces[i].mNumIndices; j++){
ofm.addIndex(aim->mFaces[i].mIndices[j]);
}
}
}
Comments