CelestiaContent/src/3dsmodel.cpp

258 lines
4.3 KiB
C++

// 3dsmodel.cpp
//
// Copyright (C) 2000, Chris Laurel <claurel@shatters.net>
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
#include "3dsmodel.h"
using namespace std;
M3DColor::M3DColor() :
red(0), green(0), blue(0)
{
}
M3DColor::M3DColor(float _red, float _green, float _blue) :
red(_red), green(_green), blue(_blue)
{
}
M3DMaterial::M3DMaterial() :
ambient(0, 0, 0),
diffuse(0, 0, 0),
specular(0, 0, 0)
{
}
string M3DMaterial::getName() const
{
return name;
}
void M3DMaterial::setName(string _name)
{
name = _name;
}
M3DColor M3DMaterial::getDiffuseColor() const
{
return diffuse;
}
void M3DMaterial::setDiffuseColor(M3DColor color)
{
diffuse = color;
}
M3DColor M3DMaterial::getAmbientColor() const
{
return ambient;
}
void M3DMaterial::setAmbientColor(M3DColor color)
{
ambient = color;
}
M3DColor M3DMaterial::getSpecularColor() const
{
return specular;
}
void M3DMaterial::setSpecularColor(M3DColor color)
{
specular = color;
}
M3DTriangleMesh::M3DTriangleMesh()
{
matrix = Mat4f::identity();
}
M3DTriangleMesh::~M3DTriangleMesh()
{
}
Mat4f M3DTriangleMesh::getMatrix() const
{
return matrix;
}
void M3DTriangleMesh::setMatrix(const Mat4f& m)
{
matrix = m;
}
Point3f M3DTriangleMesh::getVertex(uint16 n) const
{
return points[n];
}
uint16 M3DTriangleMesh::getVertexCount() const
{
return (uint16) (points.size());
}
void M3DTriangleMesh::addVertex(Point3f p)
{
points.insert(points.end(), p);
}
void M3DTriangleMesh::getFace(uint16 n, uint16& v0, uint16& v1, uint16& v2) const
{
int m = (int) n * 3;
v0 = faces[m];
v1 = faces[m + 1];
v2 = faces[m + 2];
}
uint16 M3DTriangleMesh::getFaceCount() const
{
return (uint16) (faces.size() / 3);
}
void M3DTriangleMesh::addFace(uint16 v0, uint16 v1, uint16 v2)
{
faces.insert(faces.end(), v0);
faces.insert(faces.end(), v1);
faces.insert(faces.end(), v2);
}
uint32 M3DTriangleMesh::getSmoothingGroups(uint16 face) const
{
if (face < smoothingGroups.size())
return smoothingGroups[face];
else
return 0;
}
void M3DTriangleMesh::addSmoothingGroups(uint32 smGroups)
{
smoothingGroups.insert(smoothingGroups.end(), smGroups);
}
uint16 M3DTriangleMesh::getSmoothingGroupCount() const
{
return (uint16) (smoothingGroups.size());
}
string M3DTriangleMesh::getMaterialName() const
{
return materialName;
}
void M3DTriangleMesh::setMaterialName(string _materialName)
{
materialName = _materialName;
}
M3DModel::M3DModel()
{
}
M3DModel::~M3DModel()
{
for (int i = 0; i < triMeshes.size(); i++)
if (triMeshes[i] != NULL)
delete triMeshes[i];
}
M3DTriangleMesh* M3DModel::getTriMesh(uint32 n)
{
if (n < triMeshes.size())
return triMeshes[n];
else
return NULL;
}
uint32 M3DModel::getTriMeshCount()
{
return triMeshes.size();
}
void M3DModel::addTriMesh(M3DTriangleMesh* triMesh)
{
triMeshes.insert(triMeshes.end(), triMesh);
}
void M3DModel::setName(const string _name)
{
name = _name;
}
const string M3DModel::getName() const
{
return name;
}
M3DScene::M3DScene()
{
}
M3DScene::~M3DScene()
{
int i;
for (i = 0; i < models.size(); i++)
if (models[i] != NULL)
delete models[i];
for (i = 0; i < materials.size(); i++)
if (materials[i] != NULL)
delete materials[i];
}
M3DModel* M3DScene::getModel(uint32 n) const
{
if (n < models.size())
return models[n];
else
return NULL;
}
uint32 M3DScene::getModelCount() const
{
return models.size();
}
void M3DScene::addModel(M3DModel* model)
{
models.insert(models.end(), model);
}
M3DMaterial* M3DScene::getMaterial(uint32 n) const
{
if (n < materials.size())
return materials[n];
else
return NULL;
}
uint32 M3DScene::getMaterialCount() const
{
return materials.size();
}
void M3DScene::addMaterial(M3DMaterial* material)
{
materials.insert(materials.end(), material);
}
M3DColor M3DScene::getBackgroundColor() const
{
return backgroundColor;
}
void M3DScene::setBackgroundColor(M3DColor color)
{
backgroundColor = color;
}