topical media & game development
lib-of-vs-addons-ofx3DModelLoader-src-ofx3dModelLoader.cpp / cpp
include <ofx3DModelLoader.h>
//-------------------------------------------
static string getExtension( string filename ){
std::string::size_type idx;
idx = filename.rfind('.');
if(idx != std::string::npos){
return filename.substr(idx+1);
}
else{
return "";
}
}
//-------------------------------------------
ofx3DModelLoader::ofx3DModelLoader(){
numRotations = 0;
rotAngle.clear();
rotAxis.clear();
scale = ofPoint(1, 1, 1);
model = NULL;
}
//------------------------------------------
void ofx3DModelLoader::loadModel(string modelName, float scale){
if( model != NULL)delete model;
string ext = getExtension( modelName );
if( ext == "3ds" || ext == "3DS" ){
model = new model3DS();
model->loadModel( modelName.c_str(), scale);
}
}
//-------------------------------------------
ofx3DModelLoader::~ofx3DModelLoader(){
if( model != NULL )delete model;
}
//-------------------------------------------
void ofx3DModelLoader::setPosition(float x, float y, float z){
pos.x = x;
pos.y = y;
pos.z = z;
}
void ofx3DModelLoader::setScale(float x, float y, float z){
scale.x = x;
scale.y = y;
scale.z = z;
}
//-------------------------------------------
void ofx3DModelLoader::setRotation(int which, float angle, float rot_x, float rot_y, float rot_z){
if(which + 1 > numRotations){
int diff = 1 + (which - numRotations);
for(int i = 0; i < diff; i++){
rotAngle.push_back(0);
rotAxis.push_back(ofPoint());
}
numRotations = rotAngle.size();
}
rotAngle[which] = angle;
rotAxis[which].x = rot_x;
rotAxis[which].y = rot_y;
rotAxis[which].z = rot_z;
}
//-------------------------------------------
void ofx3DModelLoader::draw(){
glPushMatrix();
glTranslatef(pos.x, pos.y, pos.z);
glScalef(scale.x, scale.y, scale.z);
for(int i = 0; i < numRotations; i++){
glRotatef(rotAngle[i], rotAxis[i].x, rotAxis[i].y, rotAxis[i].z);
}
glShadeModel(GL_SMOOTH);
if( model->hasTexture)glEnable(GL_TEXTURE_2D);
model->draw();
if( model->hasTexture)glDisable(GL_TEXTURE_2D);
glPopMatrix();
}
(C) Æliens
04/09/2009
You may not copy or print any of this material without explicit permission of the author or the publisher.
In case of other copyright issues, contact the author.