mirror of
https://github.com/OpenMW/openmw.git
synced 2025-04-01 12:36:40 +00:00
Cleanup; warnings
This commit is contained in:
parent
c2fa82326d
commit
595d0b1192
7 changed files with 53 additions and 364 deletions
|
@ -77,7 +77,7 @@ namespace MWRender{
|
||||||
}
|
}
|
||||||
if(time >= copy.morph.getStartTime() && time <= copy.morph.getStopTime()){
|
if(time >= copy.morph.getStartTime() && time <= copy.morph.getStopTime()){
|
||||||
float x;
|
float x;
|
||||||
for (int i = 0; i < copy.morph.getAdditionalVertices().size(); i++){
|
for (unsigned int i = 0; i < copy.morph.getAdditionalVertices().size(); i++){
|
||||||
int j = 0;
|
int j = 0;
|
||||||
if(shapeIndexI[shapeNumber].size() <= i)
|
if(shapeIndexI[shapeNumber].size() <= i)
|
||||||
shapeIndexI[shapeNumber].push_back(0);
|
shapeIndexI[shapeNumber].push_back(0);
|
||||||
|
@ -93,7 +93,7 @@ namespace MWRender{
|
||||||
if ( t > 1 ) t = 1;
|
if ( t > 1 ) t = 1;
|
||||||
if( t != 0 && initialVertices.size() == copy.morph.getAdditionalVertices()[i].size())
|
if( t != 0 && initialVertices.size() == copy.morph.getAdditionalVertices()[i].size())
|
||||||
{
|
{
|
||||||
for (int v = 0; v < initialVertices.size(); v++){
|
for (unsigned int v = 0; v < initialVertices.size(); v++){
|
||||||
initialVertices[v] += ((copy.morph.getAdditionalVertices()[i])[v]) * t;
|
initialVertices[v] += ((copy.morph.getAdditionalVertices()[i])[v]) * t;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -103,17 +103,7 @@ namespace MWRender{
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
//After everything, write everything out
|
|
||||||
|
|
||||||
/*
|
|
||||||
for(int i = 0; i < initialVertices.size(); i++){
|
|
||||||
Ogre::Vector3 current = initialVertices[i];
|
|
||||||
Ogre::Real* addr = pReal + i * 3;
|
|
||||||
*addr = current.x;
|
|
||||||
*(addr+1) = current.y;
|
|
||||||
*(addr + 2) = current.z;
|
|
||||||
|
|
||||||
}*/
|
|
||||||
allvertices = initialVertices;
|
allvertices = initialVertices;
|
||||||
}
|
}
|
||||||
shapeNumber++;
|
shapeNumber++;
|
||||||
|
@ -124,14 +114,14 @@ namespace MWRender{
|
||||||
if(boneinfovector.size() > 0){
|
if(boneinfovector.size() > 0){
|
||||||
|
|
||||||
|
|
||||||
for (int i = 0; i < boneinfovector.size(); i++)
|
for (unsigned int i = 0; i < boneinfovector.size(); i++)
|
||||||
{
|
{
|
||||||
Nif::NiSkinData::BoneInfoCopy boneinfo = boneinfovector[i];
|
Nif::NiSkinData::BoneInfoCopy boneinfo = boneinfovector[i];
|
||||||
if(skel->hasBone(boneinfo.bonename)){
|
if(skel->hasBone(boneinfo.bonename)){
|
||||||
Ogre::Bone *bonePtr = skel->getBone(boneinfo.bonename);
|
Ogre::Bone *bonePtr = skel->getBone(boneinfo.bonename);
|
||||||
Ogre::Vector3 vecPos = bonePtr->_getDerivedPosition() + bonePtr->_getDerivedOrientation() * boneinfo.trafo.trans;
|
Ogre::Vector3 vecPos = bonePtr->_getDerivedPosition() + bonePtr->_getDerivedOrientation() * boneinfo.trafo.trans;
|
||||||
Ogre::Quaternion vecRot = bonePtr->_getDerivedOrientation() * boneinfo.trafo.rotation;
|
Ogre::Quaternion vecRot = bonePtr->_getDerivedOrientation() * boneinfo.trafo.rotation;
|
||||||
//std::cout << "Bone" << bonePtr->getName() << "\n";
|
|
||||||
for (unsigned int j=0; j < boneinfo.weights.size(); j++)
|
for (unsigned int j=0; j < boneinfo.weights.size(); j++)
|
||||||
{
|
{
|
||||||
unsigned int verIndex = boneinfo.weights[j].vertex;
|
unsigned int verIndex = boneinfo.weights[j].vertex;
|
||||||
|
@ -146,7 +136,6 @@ namespace MWRender{
|
||||||
*(addr+2) = absVertPos.z;
|
*(addr+2) = absVertPos.z;
|
||||||
|
|
||||||
|
|
||||||
//std::cout << "Vertex" << vertices[verIndex] << "\n";
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -247,7 +236,7 @@ namespace MWRender{
|
||||||
// Computes C = B + AxC*scale
|
// Computes C = B + AxC*scale
|
||||||
// final_vector = old_vector + old_rotation*new_vector*old_scale/
|
// final_vector = old_vector + old_rotation*new_vector*old_scale/
|
||||||
|
|
||||||
for(int i = 0; i < allvertices.size(); i++){
|
for(unsigned int i = 0; i < allvertices.size(); i++){
|
||||||
Ogre::Vector3 current = transmult + rotmult * allvertices[i];
|
Ogre::Vector3 current = transmult + rotmult * allvertices[i];
|
||||||
Ogre::Real* addr = pReal + i * 3;
|
Ogre::Real* addr = pReal + i * 3;
|
||||||
*addr = current.x;
|
*addr = current.x;
|
||||||
|
@ -332,7 +321,7 @@ namespace MWRender{
|
||||||
|
|
||||||
|
|
||||||
Ogre::Bone* b = skel->getRootBone();
|
Ogre::Bone* b = skel->getRootBone();
|
||||||
b->setOrientation(.3,.3,.3,.3); //This is a trick
|
b->setOrientation(Ogre::Real(.3),Ogre::Real(.3),Ogre::Real(.3), Ogre::Real(.3)); //This is a trick
|
||||||
skel->getManualBonesDirty();
|
skel->getManualBonesDirty();
|
||||||
skel->_updateTransforms();
|
skel->_updateTransforms();
|
||||||
skel->_notifyManualBonesDirty();
|
skel->_notifyManualBonesDirty();
|
||||||
|
@ -341,11 +330,11 @@ namespace MWRender{
|
||||||
base->_updateAnimation();
|
base->_updateAnimation();
|
||||||
base->_notifyMoved();
|
base->_notifyMoved();
|
||||||
|
|
||||||
for(int i = 0; i < entityparts.size(); i++){
|
for(unsigned int i = 0; i < entityparts.size(); i++){
|
||||||
Ogre::SkeletonInstance* skel = entityparts[i]->getSkeleton();
|
Ogre::SkeletonInstance* skel = entityparts[i]->getSkeleton();
|
||||||
|
|
||||||
Ogre::Bone* b = skel->getRootBone();
|
Ogre::Bone* b = skel->getRootBone();
|
||||||
b->setOrientation(.3,.3,.3,.3); //This is a trick
|
b->setOrientation(Ogre::Real(.3),Ogre::Real(.3),Ogre::Real(.3), Ogre::Real(.3));//This is a trick
|
||||||
skel->getManualBonesDirty();
|
skel->getManualBonesDirty();
|
||||||
skel->_updateTransforms();
|
skel->_updateTransforms();
|
||||||
skel->_notifyManualBonesDirty();
|
skel->_notifyManualBonesDirty();
|
||||||
|
|
|
@ -15,32 +15,29 @@ namespace MWRender{
|
||||||
class Animation{
|
class Animation{
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
Ogre::SceneNode* insert;
|
||||||
OEngine::Physic::PhysicEngine* engine;
|
|
||||||
OEngine::Render::OgreRenderer &mRend;
|
OEngine::Render::OgreRenderer &mRend;
|
||||||
MWWorld::Environment& mEnvironment;
|
MWWorld::Environment& mEnvironment;
|
||||||
static std::map<std::string, int> mUniqueIDs;
|
static std::map<std::string, int> mUniqueIDs;
|
||||||
|
|
||||||
Ogre::Vector3 originalpos;
|
|
||||||
Ogre::Vector3 originalscenenode;
|
|
||||||
std::vector<std::vector<Nif::NiTriShapeCopy>* > shapeparts; //All the NiTriShape data that we need for animating an npc
|
std::vector<std::vector<Nif::NiTriShapeCopy>* > shapeparts; //All the NiTriShape data that we need for animating an npc
|
||||||
|
|
||||||
float time;
|
float time;
|
||||||
float startTime;
|
float startTime;
|
||||||
float stopTime;
|
float stopTime;
|
||||||
bool loop;
|
|
||||||
int animate;
|
int animate;
|
||||||
//Represents a rotation index for each bone
|
//Represents a rotation index for each bone
|
||||||
std::vector<int>rindexI;
|
std::vector<int>rindexI;
|
||||||
//Represents a translation index for each bone
|
//Represents a translation index for each bone
|
||||||
std::vector<int>tindexI;
|
std::vector<int>tindexI;
|
||||||
|
|
||||||
//Only shapes with morphing data will need a shape number
|
//Only shapes with morphing data will use a shape number
|
||||||
int shapeNumber;
|
int shapeNumber;
|
||||||
std::vector<std::vector<int> > shapeIndexI;
|
std::vector<std::vector<int> > shapeIndexI;
|
||||||
|
|
||||||
//Ogre::SkeletonInstance* skel;
|
//Ogre::SkeletonInstance* skel;
|
||||||
std::vector<Nif::NiTriShapeCopy>* shapes; //All the NiTriShapeData for this creature
|
std::vector<Nif::NiTriShapeCopy>* shapes; //All the NiTriShapeData for a creature
|
||||||
std::vector<Ogre::Entity*> entityparts;
|
std::vector<Ogre::Entity*> entityparts;
|
||||||
|
|
||||||
|
|
||||||
|
@ -53,7 +50,7 @@ class Animation{
|
||||||
std::string getUniqueID(std::string mesh);
|
std::string getUniqueID(std::string mesh);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Animation(MWWorld::Environment& _env, OEngine::Render::OgreRenderer& _rend): mRend(_rend), mEnvironment(_env), loop(false), animate(0){};
|
Animation(MWWorld::Environment& _env, OEngine::Render::OgreRenderer& _rend): mRend(_rend), mEnvironment(_env), animate(0){};
|
||||||
virtual void runAnimation(float timepassed) = 0;
|
virtual void runAnimation(float timepassed) = 0;
|
||||||
void startScript(std::string groupname, int mode, int loops);
|
void startScript(std::string groupname, int mode, int loops);
|
||||||
void stopScript();
|
void stopScript();
|
||||||
|
|
|
@ -10,8 +10,7 @@ CreatureAnimation::~CreatureAnimation(){
|
||||||
|
|
||||||
}
|
}
|
||||||
CreatureAnimation::CreatureAnimation(const MWWorld::Ptr& ptr, MWWorld::Environment& _env,OEngine::Render::OgreRenderer& _rend): Animation(_env,_rend){
|
CreatureAnimation::CreatureAnimation(const MWWorld::Ptr& ptr, MWWorld::Environment& _env,OEngine::Render::OgreRenderer& _rend): Animation(_env,_rend){
|
||||||
Ogre::SceneNode* insert = ptr.getRefData().getBaseNode();
|
insert = ptr.getRefData().getBaseNode();
|
||||||
assert(insert);
|
|
||||||
ESMS::LiveCellRef<ESM::Creature, MWWorld::RefData> *ref =
|
ESMS::LiveCellRef<ESM::Creature, MWWorld::RefData> *ref =
|
||||||
ptr.get<ESM::Creature>();
|
ptr.get<ESM::Creature>();
|
||||||
|
|
||||||
|
@ -27,13 +26,9 @@ CreatureAnimation::CreatureAnimation(const MWWorld::Ptr& ptr, MWWorld::Environme
|
||||||
|
|
||||||
for(int init = 0; init < transformations->size(); init++){
|
for(int init = 0; init < transformations->size(); init++){
|
||||||
rindexI.push_back(0);
|
rindexI.push_back(0);
|
||||||
//a.rindexJ.push_back(0);
|
|
||||||
tindexI.push_back(0);
|
tindexI.push_back(0);
|
||||||
//a.tindexJ.push_back(0);
|
|
||||||
}
|
}
|
||||||
loop = false;
|
|
||||||
stopTime = transformations->begin()->getStopTime();
|
stopTime = transformations->begin()->getStopTime();
|
||||||
//a.startTime = NIFLoader::getSingletonPtr()->getTime(item.smodel, "IdleSneak: Start");
|
|
||||||
startTime = transformations->begin()->getStartTime();
|
startTime = transformations->begin()->getStartTime();
|
||||||
shapes = (NIFLoader::getSingletonPtr())->getShapes(meshZero);
|
shapes = (NIFLoader::getSingletonPtr())->getShapes(meshZero);
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,9 +13,6 @@ NpcAnimation::~NpcAnimation(){
|
||||||
NpcAnimation::NpcAnimation(const MWWorld::Ptr& ptr, MWWorld::Environment& _env,OEngine::Render::OgreRenderer& _rend): Animation(_env,_rend){
|
NpcAnimation::NpcAnimation(const MWWorld::Ptr& ptr, MWWorld::Environment& _env,OEngine::Render::OgreRenderer& _rend): Animation(_env,_rend){
|
||||||
ESMS::LiveCellRef<ESM::NPC, MWWorld::RefData> *ref =
|
ESMS::LiveCellRef<ESM::NPC, MWWorld::RefData> *ref =
|
||||||
ptr.get<ESM::NPC>();
|
ptr.get<ESM::NPC>();
|
||||||
//assert (ref->base != NULL);
|
|
||||||
|
|
||||||
//insertBegin(ptr, true, true);
|
|
||||||
|
|
||||||
//Part selection on last character of the file string
|
//Part selection on last character of the file string
|
||||||
// " Tri Chest
|
// " Tri Chest
|
||||||
|
@ -46,13 +43,13 @@ NpcAnimation::NpcAnimation(const MWWorld::Ptr& ptr, MWWorld::Environment& _env,O
|
||||||
char secondtolast = bodyRaceID.at(bodyRaceID.length() - 2);
|
char secondtolast = bodyRaceID.at(bodyRaceID.length() - 2);
|
||||||
bool female = tolower(secondtolast) == 'f';
|
bool female = tolower(secondtolast) == 'f';
|
||||||
bool beast = bodyRaceID == "b_n_khajiit_m_" || bodyRaceID == "b_n_khajiit_f_" || bodyRaceID == "b_n_argonian_m_" || bodyRaceID == "b_n_argonian_f_";
|
bool beast = bodyRaceID == "b_n_khajiit_m_" || bodyRaceID == "b_n_khajiit_f_" || bodyRaceID == "b_n_argonian_m_" || bodyRaceID == "b_n_argonian_f_";
|
||||||
std::cout << "Race: " << ref->base->race ;
|
/*std::cout << "Race: " << ref->base->race ;
|
||||||
if(female){
|
if(female){
|
||||||
std::cout << " Sex: Female" << " Height: " << race->data.height.female << "\n";
|
std::cout << " Sex: Female" << " Height: " << race->data.height.female << "\n";
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
std::cout << " Sex: Male" << " Height: " << race->data.height.male << "\n";
|
std::cout << " Sex: Male" << " Height: " << race->data.height.male << "\n";
|
||||||
}
|
}*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -72,16 +69,12 @@ NpcAnimation::NpcAnimation(const MWWorld::Ptr& ptr, MWWorld::Environment& _env,O
|
||||||
|
|
||||||
if(transformations = (NIFLoader::getSingletonPtr())->getAnim(smodel)){
|
if(transformations = (NIFLoader::getSingletonPtr())->getAnim(smodel)){
|
||||||
|
|
||||||
for(int init = 0; init < transformations->size(); init++){
|
for(unsigned int init = 0; init < transformations->size(); init++){
|
||||||
rindexI.push_back(0);
|
rindexI.push_back(0);
|
||||||
//a.rindexJ.push_back(0);
|
|
||||||
tindexI.push_back(0);
|
tindexI.push_back(0);
|
||||||
//a.tindexJ.push_back(0);
|
|
||||||
}
|
}
|
||||||
loop = false;
|
|
||||||
|
|
||||||
stopTime = transformations->begin()->getStopTime();
|
stopTime = transformations->begin()->getStopTime();
|
||||||
//a.startTime = NIFLoader::getSingletonPtr()->getTime(item.smodel, "IdleSneak: Start");
|
|
||||||
startTime = transformations->begin()->getStartTime();
|
startTime = transformations->begin()->getStartTime();
|
||||||
}
|
}
|
||||||
insert->attachObject(base);
|
insert->attachObject(base);
|
||||||
|
@ -214,8 +207,8 @@ NpcAnimation::NpcAnimation(const MWWorld::Ptr& ptr, MWWorld::Environment& _env,O
|
||||||
insertFreePart("meshes\\" + feet->model,"><", insert);
|
insertFreePart("meshes\\" + feet->model,"><", insert);
|
||||||
insertFreePart("meshes\\" + feet->model,">:", insert);
|
insertFreePart("meshes\\" + feet->model,">:", insert);
|
||||||
}
|
}
|
||||||
originalpos = insert->_getWorldAABB().getCenter();
|
//originalpos = insert->_getWorldAABB().getCenter();
|
||||||
originalscenenode = insert->getPosition();
|
//originalscenenode = insert->getPosition();
|
||||||
}
|
}
|
||||||
|
|
||||||
Ogre::Entity* NpcAnimation::insertBoundedPart(const std::string &mesh, std::string bonename){
|
Ogre::Entity* NpcAnimation::insertBoundedPart(const std::string &mesh, std::string bonename){
|
||||||
|
@ -243,17 +236,17 @@ void NpcAnimation::insertFreePart(const std::string &mesh, const std::string suf
|
||||||
|
|
||||||
|
|
||||||
void NpcAnimation::runAnimation(float timepassed){
|
void NpcAnimation::runAnimation(float timepassed){
|
||||||
//Add the amount of time passed to time
|
//1. Add the amount of time passed to time
|
||||||
|
|
||||||
//Handle the animation transforms dependent on time
|
//2. Handle the animation transforms dependent on time
|
||||||
|
|
||||||
//Handle the shapes dependent on animation transforms
|
//3. Handle the shapes dependent on animation transforms
|
||||||
if(animate > 0){
|
if(animate > 0){
|
||||||
time += timepassed;
|
time += timepassed;
|
||||||
|
|
||||||
if(time > stopTime){
|
if(time > stopTime){
|
||||||
animate--;
|
animate--;
|
||||||
//std::cout << "Stopping the animation\n";
|
|
||||||
if(animate == 0)
|
if(animate == 0)
|
||||||
time = stopTime;
|
time = stopTime;
|
||||||
else
|
else
|
||||||
|
@ -277,17 +270,12 @@ void NpcAnimation::runAnimation(float timepassed){
|
||||||
//mEnvironment.mWorld->setObjectPhysicsRotation(insert->getName(), boneQuat * insert->getOrientation());
|
//mEnvironment.mWorld->setObjectPhysicsRotation(insert->getName(), boneQuat * insert->getOrientation());
|
||||||
|
|
||||||
}*/
|
}*/
|
||||||
// handleAnimationTransforms(base);
|
|
||||||
//handleAnimationTransforms(hand);
|
|
||||||
//
|
|
||||||
std::vector<std::vector<Nif::NiTriShapeCopy>*>::iterator shapepartsiter = shapeparts.begin();
|
std::vector<std::vector<Nif::NiTriShapeCopy>*>::iterator shapepartsiter = shapeparts.begin();
|
||||||
std::vector<Ogre::Entity*>::iterator entitypartsiter = entityparts.begin();
|
std::vector<Ogre::Entity*>::iterator entitypartsiter = entityparts.begin();
|
||||||
//int i = 0;
|
|
||||||
while(shapepartsiter != shapeparts.end())
|
while(shapepartsiter != shapeparts.end())
|
||||||
{
|
{
|
||||||
std::vector<Nif::NiTriShapeCopy>* shapes = *shapepartsiter;
|
std::vector<Nif::NiTriShapeCopy>* shapes = *shapepartsiter;
|
||||||
//insert->
|
|
||||||
//insert->detachObject(hand->getName());
|
|
||||||
Ogre::Entity* theentity = *entitypartsiter;
|
Ogre::Entity* theentity = *entitypartsiter;
|
||||||
/*
|
/*
|
||||||
Pass* pass = theentity->getSubEntity(0)->getMaterial()->getBestTechnique()->getPass(0);
|
Pass* pass = theentity->getSubEntity(0)->getMaterial()->getBestTechnique()->getPass(0);
|
||||||
|
@ -295,16 +283,8 @@ void NpcAnimation::runAnimation(float timepassed){
|
||||||
std::cout << "It's hardware\n";
|
std::cout << "It's hardware\n";
|
||||||
else
|
else
|
||||||
std::cout << "It's software\n";*/
|
std::cout << "It's software\n";*/
|
||||||
//std::cout << "Techniques:" << theentity->getSubEntity(0)->getMaterial()->getNumTechniques() << "\n";
|
|
||||||
/*if (pass->hasVertexProgram())// && pass->getVertexProgram()->isSkeletalAnimationIncluded()) value = "Hardware"
|
|
||||||
std::cout << "Its hardware\n";
|
|
||||||
else
|
|
||||||
std::cout << "Its software\n";*/
|
|
||||||
|
|
||||||
// handleAnimationTransforms(theentity);
|
|
||||||
handleShapes(shapes, theentity, theentity->getSkeleton());
|
handleShapes(shapes, theentity, theentity->getSkeleton());
|
||||||
//insert->attachObject(hand);
|
|
||||||
//std::cout << "Shape part size" << shapes->size() << "\n";
|
|
||||||
shapepartsiter++;
|
shapepartsiter++;
|
||||||
entitypartsiter++;
|
entitypartsiter++;
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,7 +16,7 @@ namespace MWRender{
|
||||||
|
|
||||||
class NpcAnimation: public Animation{
|
class NpcAnimation: public Animation{
|
||||||
|
|
||||||
Ogre::SceneNode* insert;
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
NpcAnimation(const MWWorld::Ptr& ptr, MWWorld::Environment& _env, OEngine::Render::OgreRenderer& _rend);
|
NpcAnimation(const MWWorld::Ptr& ptr, MWWorld::Environment& _env, OEngine::Render::OgreRenderer& _rend);
|
||||||
|
|
|
@ -212,13 +212,9 @@ void NIFLoader::createMaterial(const String &name,
|
||||||
{
|
{
|
||||||
MaterialPtr material = MaterialManager::getSingleton().create(name, resourceGroup);
|
MaterialPtr material = MaterialManager::getSingleton().create(name, resourceGroup);
|
||||||
|
|
||||||
// This assigns the texture to this material. If the texture name is
|
|
||||||
// a file name, and this file exists (in a resource directory), it
|
//Hardware Skinning code, textures may be the wrong color if enabled
|
||||||
// will automatically be loaded when needed. If not (such as for
|
/*if(!mSkel.isNull()){
|
||||||
// internal NIF textures that we might support later), we should
|
|
||||||
// already have inserted a manual loader for the texture.
|
|
||||||
/*
|
|
||||||
if(!mSkel.isNull()){
|
|
||||||
material->removeAllTechniques();
|
material->removeAllTechniques();
|
||||||
|
|
||||||
Ogre::Technique* tech = material->createTechnique();
|
Ogre::Technique* tech = material->createTechnique();
|
||||||
|
@ -226,6 +222,14 @@ void NIFLoader::createMaterial(const String &name,
|
||||||
Pass* pass = tech->createPass();
|
Pass* pass = tech->createPass();
|
||||||
pass->setVertexProgram("Ogre/HardwareSkinningFourWeights");
|
pass->setVertexProgram("Ogre/HardwareSkinningFourWeights");
|
||||||
}*/
|
}*/
|
||||||
|
|
||||||
|
// This assigns the texture to this material. If the texture name is
|
||||||
|
// a file name, and this file exists (in a resource directory), it
|
||||||
|
// will automatically be loaded when needed. If not (such as for
|
||||||
|
// internal NIF textures that we might support later), we should
|
||||||
|
// already have inserted a manual loader for the texture.
|
||||||
|
|
||||||
|
|
||||||
if (!texName.empty())
|
if (!texName.empty())
|
||||||
{
|
{
|
||||||
Pass *pass = material->getTechnique(0)->getPass(0);
|
Pass *pass = material->getTechnique(0)->getPass(0);
|
||||||
|
@ -359,22 +363,16 @@ void NIFLoader::createOgreSubMesh(NiTriShape *shape, const String &material, std
|
||||||
int index = i * 3;
|
int index = i * 3;
|
||||||
const float *pos = data->vertices.ptr + index;
|
const float *pos = data->vertices.ptr + index;
|
||||||
Ogre::Vector3 original = Ogre::Vector3(*pos ,*(pos+1), *(pos+2));
|
Ogre::Vector3 original = Ogre::Vector3(*pos ,*(pos+1), *(pos+2));
|
||||||
//std::cout << "Original: " << original;
|
|
||||||
//rstd::cout << "vectorfirst" << original << "\n";
|
|
||||||
original = mTransform * original;
|
original = mTransform * original;
|
||||||
mBoundingBox.merge(original);
|
mBoundingBox.merge(original);
|
||||||
//std::cout <<" New: " << original << "\n";
|
|
||||||
datamod[index] = original.x;
|
datamod[index] = original.x;
|
||||||
datamod[index+1] = original.y;
|
datamod[index+1] = original.y;
|
||||||
datamod[index+2] = original.z;
|
datamod[index+2] = original.z;
|
||||||
//std::cout << "vector " << original << "\n";
|
|
||||||
//std::cout << "datamod: " << datamod[index+1] << "datamod2: " << *(pos+1) << "\n";
|
|
||||||
}
|
}
|
||||||
vbuf->writeData(0, vbuf->getSizeInBytes(), datamod, false);
|
vbuf->writeData(0, vbuf->getSizeInBytes(), datamod, false);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
//std::cout << "X " << data->vertices.ptr[0] << "Y " << data->vertices.ptr[1] << "Z " << data->vertices.ptr[2] << "NIFLOADER" << "\n";
|
|
||||||
vbuf->writeData(0, vbuf->getSizeInBytes(), data->vertices.ptr, false);
|
vbuf->writeData(0, vbuf->getSizeInBytes(), data->vertices.ptr, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -382,7 +380,6 @@ void NIFLoader::createOgreSubMesh(NiTriShape *shape, const String &material, std
|
||||||
VertexBufferBinding* bind = sub->vertexData->vertexBufferBinding;
|
VertexBufferBinding* bind = sub->vertexData->vertexBufferBinding;
|
||||||
bind->setBinding(nextBuf++, vbuf);
|
bind->setBinding(nextBuf++, vbuf);
|
||||||
|
|
||||||
// Vertex normals
|
|
||||||
if (data->normals.length)
|
if (data->normals.length)
|
||||||
{
|
{
|
||||||
decl->addElement(nextBuf, 0, VET_FLOAT3, VES_NORMAL);
|
decl->addElement(nextBuf, 0, VET_FLOAT3, VES_NORMAL);
|
||||||
|
@ -445,8 +442,6 @@ void NIFLoader::createOgreSubMesh(NiTriShape *shape, const String &material, std
|
||||||
if (data->uvlist.length)
|
if (data->uvlist.length)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
decl->addElement(nextBuf, 0, VET_FLOAT2, VES_TEXTURE_COORDINATES);
|
decl->addElement(nextBuf, 0, VET_FLOAT2, VES_TEXTURE_COORDINATES);
|
||||||
vbuf = HardwareBufferManager::getSingleton().createVertexBuffer(
|
vbuf = HardwareBufferManager::getSingleton().createVertexBuffer(
|
||||||
VertexElement::getTypeSize(VET_FLOAT2),
|
VertexElement::getTypeSize(VET_FLOAT2),
|
||||||
|
@ -456,7 +451,7 @@ void NIFLoader::createOgreSubMesh(NiTriShape *shape, const String &material, std
|
||||||
{
|
{
|
||||||
float *datamod = new float[data->uvlist.length];
|
float *datamod = new float[data->uvlist.length];
|
||||||
|
|
||||||
for(int i = 0; i < data->uvlist.length; i+=2){
|
for(unsigned int i = 0; i < data->uvlist.length; i+=2){
|
||||||
float x = *(data->uvlist.ptr + i);
|
float x = *(data->uvlist.ptr + i);
|
||||||
|
|
||||||
float y = *(data->uvlist.ptr + i + 1);
|
float y = *(data->uvlist.ptr + i + 1);
|
||||||
|
@ -739,7 +734,6 @@ void NIFLoader::handleNiTriShape(NiTriShape *shape, int flags, BoundsFinder &bou
|
||||||
Nif::NiTriShapeCopy copy = shape->clone();
|
Nif::NiTriShapeCopy copy = shape->clone();
|
||||||
if(!shape->controller.empty())
|
if(!shape->controller.empty())
|
||||||
{
|
{
|
||||||
//Nif::NiGeomMorpherController* cont = dynamic_cast<Nif::NiGeomMorpherController*> (shape->controller.getPtr());
|
|
||||||
Nif::Controller* cont = shape->controller.getPtr();
|
Nif::Controller* cont = shape->controller.getPtr();
|
||||||
if(cont->recType == RC_NiGeomMorpherController)
|
if(cont->recType == RC_NiGeomMorpherController)
|
||||||
{
|
{
|
||||||
|
@ -747,25 +741,17 @@ void NIFLoader::handleNiTriShape(NiTriShape *shape, int flags, BoundsFinder &bou
|
||||||
copy.morph = morph->data.get();
|
copy.morph = morph->data.get();
|
||||||
copy.morph.setStartTime(morph->timeStart);
|
copy.morph.setStartTime(morph->timeStart);
|
||||||
copy.morph.setStopTime(morph->timeStop);
|
copy.morph.setStopTime(morph->timeStop);
|
||||||
//std::cout << "Size" << morph->data->getInitialVertices().size() << "\n";
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//std::cout << "We have a controller";
|
|
||||||
}
|
}
|
||||||
//use niskindata for the position of vertices.
|
//use niskindata for the position of vertices.
|
||||||
if (!shape->skin.empty())
|
if (!shape->skin.empty())
|
||||||
{
|
{
|
||||||
|
|
||||||
//std::cout << "Skin is not empty\n";
|
|
||||||
//Bone assignments are stored in submeshes, so we don't need to copy them
|
//Bone assignments are stored in submeshes, so we don't need to copy them
|
||||||
//std::string triname
|
|
||||||
//std::vector<Ogre::Vector3> vertices;
|
|
||||||
//std::vector<Ogre::Vector3> normals;
|
|
||||||
//std::vector<Nif::NiSkinData::BoneInfoCopy> boneinfo;
|
|
||||||
|
|
||||||
|
|
||||||
// vector that stores if the position if a vertex is absolute
|
// vector that stores if the position of a vertex is absolute
|
||||||
std::vector<bool> vertexPosAbsolut(numVerts,false);
|
std::vector<bool> vertexPosAbsolut(numVerts,false);
|
||||||
std::vector<Ogre::Vector3> vertexPosOriginal(numVerts, Ogre::Vector3::ZERO);
|
std::vector<Ogre::Vector3> vertexPosOriginal(numVerts, Ogre::Vector3::ZERO);
|
||||||
std::vector<Ogre::Vector3> vertexNormalOriginal(numVerts, Ogre::Vector3::ZERO);
|
std::vector<Ogre::Vector3> vertexNormalOriginal(numVerts, Ogre::Vector3::ZERO);
|
||||||
|
@ -967,8 +953,6 @@ void NIFLoader::calculateTransform()
|
||||||
void NIFLoader::handleNode(Nif::Node *node, int flags,
|
void NIFLoader::handleNode(Nif::Node *node, int flags,
|
||||||
const Transformation *trafo, BoundsFinder &bounds, Ogre::Bone *parentBone, std::vector<std::string> boneSequence)
|
const Transformation *trafo, BoundsFinder &bounds, Ogre::Bone *parentBone, std::vector<std::string> boneSequence)
|
||||||
{
|
{
|
||||||
//if( MWClass::isChest)
|
|
||||||
// cout << "u:" << node << "\n";
|
|
||||||
// Accumulate the flags from all the child nodes. This works for all
|
// Accumulate the flags from all the child nodes. This works for all
|
||||||
// the flags we currently use, at least.
|
// the flags we currently use, at least.
|
||||||
flags |= node->flags;
|
flags |= node->flags;
|
||||||
|
@ -1000,33 +984,23 @@ void NIFLoader::handleNode(Nif::Node *node, int flags,
|
||||||
if (e->recType == RC_NiTextKeyExtraData){
|
if (e->recType == RC_NiTextKeyExtraData){
|
||||||
Nif::NiTextKeyExtraData* extra = dynamic_cast<Nif::NiTextKeyExtraData*> (e);
|
Nif::NiTextKeyExtraData* extra = dynamic_cast<Nif::NiTextKeyExtraData*> (e);
|
||||||
|
|
||||||
std::vector<Nif::NiTextKeyExtraData::TextKey>::iterator textiter = extra->list.begin();
|
|
||||||
//std::ofstream File("Indices" + name + ".txt");
|
|
||||||
|
|
||||||
//std::string sample = "uy";
|
|
||||||
|
|
||||||
std::string cut = "";
|
std::string cut = "";
|
||||||
for(int i = 0; i < name.length(); i++)
|
for(unsigned int i = 0; i < name.length(); i++)
|
||||||
{
|
{
|
||||||
if(!(name.at(i) == '\\' || name.at(i) == '/' || name.at(i) == '>' || name.at(i) == '<' || name.at(i) == '?' || name.at(i) == '*' || name.at(i) == '|' || name.at(i) == ':' || name.at(i) == '"'))
|
if(!(name.at(i) == '\\' || name.at(i) == '/' || name.at(i) == '>' || name.at(i) == '<' || name.at(i) == '?' || name.at(i) == '*' || name.at(i) == '|' || name.at(i) == ':' || name.at(i) == '"'))
|
||||||
{
|
{
|
||||||
cut += name.at(i);
|
cut += name.at(i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//std::cout << "End" << end;
|
|
||||||
|
|
||||||
std::cout << "Outputting " << cut << "\n";
|
std::cout << "Outputting " << cut << "\n";
|
||||||
|
|
||||||
std::ofstream file(("Indices" + cut + ".txt").c_str());
|
std::ofstream file(("Indices" + cut + ".txt").c_str());
|
||||||
|
|
||||||
/*if(File.is_open())
|
for(std::vector<Nif::NiTextKeyExtraData::TextKey>::iterator textiter = extra->list.begin(); textiter != extra->list.end(); textiter++)
|
||||||
std::cout << "We could open\n";
|
|
||||||
else
|
|
||||||
std::cout << "We could not\n";*/
|
|
||||||
for(; textiter != extra->list.end(); textiter++)
|
|
||||||
{
|
{
|
||||||
//if(textiter->text.toString().find("Torch") < textiter->text.toString().length())
|
|
||||||
//std::cout << "Time: " << textiter->time << " " << textiter->text.toString() << "\n";
|
|
||||||
std::string text = textiter->text.toString();
|
std::string text = textiter->text.toString();
|
||||||
|
|
||||||
replace(text.begin(), text.end(), '\n', '/');
|
replace(text.begin(), text.end(), '\n', '/');
|
||||||
|
@ -1050,20 +1024,13 @@ void NIFLoader::handleNode(Nif::Node *node, int flags,
|
||||||
{
|
{
|
||||||
|
|
||||||
mSkel = SkeletonManager::getSingleton().create(getSkeletonName(), resourceGroup, true);
|
mSkel = SkeletonManager::getSingleton().create(getSkeletonName(), resourceGroup, true);
|
||||||
|
|
||||||
/*if (node->extra->recType == RC_NiTextKeyExtraData )
|
|
||||||
{
|
|
||||||
//TODO: Get animation names
|
|
||||||
std::cout << node->name.toString() << " is root bone and has textkeyextradata!\n";
|
|
||||||
}*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!mSkel.isNull()) //if there is a skeleton
|
if (!mSkel.isNull()) //if there is a skeleton
|
||||||
{
|
{
|
||||||
std::string name = node->name.toString();
|
std::string name = node->name.toString();
|
||||||
boneSequence.push_back(name);
|
boneSequence.push_back(name);
|
||||||
//if (isBeast && isChest)
|
|
||||||
// std::cout << "NAME: " << name << "\n";
|
|
||||||
// Quick-n-dirty workaround for the fact that several
|
// Quick-n-dirty workaround for the fact that several
|
||||||
// bones may have the same name.
|
// bones may have the same name.
|
||||||
if(!mSkel->hasBone(name))
|
if(!mSkel->hasBone(name))
|
||||||
|
@ -1281,8 +1248,6 @@ void NIFLoader::loadResource(Resource *resource)
|
||||||
mesh->_setBoundingSphereRadius(bounds.getRadius());
|
mesh->_setBoundingSphereRadius(bounds.getRadius());
|
||||||
}
|
}
|
||||||
if(hasAnim && addAnim){
|
if(hasAnim && addAnim){
|
||||||
//std::cout << "Lower" << lowername << "\n";
|
|
||||||
//std::cout << "Adding the animations\n";
|
|
||||||
allanimmap[name] = allanim;
|
allanimmap[name] = allanim;
|
||||||
alltextmappings[name] = textmappings;
|
alltextmappings[name] = textmappings;
|
||||||
}
|
}
|
||||||
|
@ -1300,7 +1265,6 @@ void NIFLoader::loadResource(Resource *resource)
|
||||||
{
|
{
|
||||||
mesh->_notifySkeleton(mSkel);
|
mesh->_notifySkeleton(mSkel);
|
||||||
}
|
}
|
||||||
flip = false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void NIFLoader::addInMesh(Ogre::Mesh* input){
|
void NIFLoader::addInMesh(Ogre::Mesh* input){
|
||||||
|
@ -1364,242 +1328,7 @@ float NIFLoader::getTime(std::string filename, std::string text){
|
||||||
return -10000000.0;
|
return -10000000.0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
void NIFLoader::insertMeshInsideBase(Ogre::Mesh* input)
|
|
||||||
{
|
|
||||||
/*if(addin)
|
|
||||||
{
|
|
||||||
std::cout << "InsideBase:" << addin->getName() << "\n";
|
|
||||||
}*/
|
|
||||||
/*
|
|
||||||
if(input)
|
|
||||||
{
|
|
||||||
std::vector<Nif::NiTriShapeCopy> shapes = NIFLoader::getSingletonPtr()->getShapes(input->getName());
|
|
||||||
for(int i = 0; i < shapes.size(); i++){
|
|
||||||
|
|
||||||
//std::cout << "Shapes" << shapes[i].sname;
|
|
||||||
|
|
||||||
Ogre::SubMesh* sub = input->getSubMesh(shapes[i].sname);
|
|
||||||
Ogre::SubMesh* subNew = mesh->createSubMesh(shapes[i].sname);
|
|
||||||
|
|
||||||
|
|
||||||
int nextBuf = 0;
|
|
||||||
|
|
||||||
|
|
||||||
//----------------------------------------VERTICES----------------------------------------
|
|
||||||
int numVerts = shapes[i].vertices.size();
|
|
||||||
subNew->vertexData = new VertexData();
|
|
||||||
subNew->vertexData->vertexCount = numVerts;
|
|
||||||
subNew->useSharedVertices = false;
|
|
||||||
|
|
||||||
//-----------------------------------------POSITIONS---------------------------------------
|
|
||||||
|
|
||||||
|
|
||||||
VertexDeclaration *decl = subNew->vertexData->vertexDeclaration;
|
|
||||||
const VertexElement* position =
|
|
||||||
sub->vertexData->vertexDeclaration->findElementBySemantic(Ogre::VES_POSITION);
|
|
||||||
Ogre::HardwareVertexBufferSharedPtr vbuf;
|
|
||||||
HardwareVertexBufferSharedPtr newvbuf;
|
|
||||||
float* pRealNormal = new float[numVerts * 3];
|
|
||||||
VertexBufferBinding* bind;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//std::cout << "X " << pReal[0] << "Y " << pReal[1] << "Z" << pReal[2] << "\n";
|
|
||||||
float* pReal = new float[numVerts * 3];
|
|
||||||
|
|
||||||
std::map<unsigned int, bool> vertices;
|
|
||||||
std::map<unsigned int, bool> normals;
|
|
||||||
std::vector<Nif::NiSkinData::BoneInfoCopy> boneinfovector = shapes[i].boneinfo;
|
|
||||||
|
|
||||||
//std::cout << "Name " << copy.sname << "\n";
|
|
||||||
|
|
||||||
if(boneinfovector.size() > 0){
|
|
||||||
|
|
||||||
|
|
||||||
for (int j = 0; j < boneinfovector.size(); j++)
|
|
||||||
{
|
|
||||||
Nif::NiSkinData::BoneInfoCopy boneinfo = boneinfovector[j];
|
|
||||||
Ogre::Bone *bonePtr = mSkel->getBone(boneinfo.bonename);
|
|
||||||
Ogre::Vector3 vecPos = bonePtr->_getDerivedPosition() + bonePtr->_getDerivedOrientation() * boneinfo.trafo.trans;
|
|
||||||
Ogre::Quaternion vecRot = bonePtr->_getDerivedOrientation() * boneinfo.trafo.rotation;
|
|
||||||
//std::cout << "Bone" << bonePtr->getName() << "\n";
|
|
||||||
for (unsigned int k=0; k< boneinfo.weights.size(); k++)
|
|
||||||
{
|
|
||||||
unsigned int verIndex = boneinfo.weights[k].vertex;
|
|
||||||
if(vertices.find(verIndex) == vertices.end())
|
|
||||||
{
|
|
||||||
Ogre::Vector3 absVertPos = vecPos + vecRot * shapes[i].vertices[verIndex];
|
|
||||||
vertices[verIndex] = true;
|
|
||||||
absVertPos = absVertPos * boneinfo.weights[k].weight;
|
|
||||||
Ogre::Real* addr = (pReal + 3 * verIndex);
|
|
||||||
*addr = absVertPos.x;
|
|
||||||
*(addr+1) = absVertPos.y;
|
|
||||||
*(addr+2) = absVertPos.z;
|
|
||||||
|
|
||||||
//std::cout << "Vertex" << vertices[verIndex] << "\n";
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Ogre::Vector3 absVertPos = vecPos + vecRot * shapes[i].vertices[verIndex];
|
|
||||||
absVertPos = absVertPos * boneinfo.weights[k].weight;
|
|
||||||
Ogre::Vector3 old = Ogre::Vector3(pReal + 3 * verIndex);
|
|
||||||
absVertPos = absVertPos + old;
|
|
||||||
Ogre::Real* addr = (pReal + 3 * verIndex);
|
|
||||||
*addr = absVertPos.x;
|
|
||||||
*(addr+1) = absVertPos.y;
|
|
||||||
*(addr+2) = absVertPos.z;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
if(normals.find(verIndex) == normals.end())
|
|
||||||
{
|
|
||||||
Ogre::Vector3 absNormalsPos = vecRot * shapes[i].normals[verIndex];
|
|
||||||
absNormalsPos = absNormalsPos * boneinfo.weights[k].weight;
|
|
||||||
normals[verIndex] = true;
|
|
||||||
Ogre::Real* addr = (pRealNormal + 3 * verIndex);
|
|
||||||
*addr = absNormalsPos.x;
|
|
||||||
*(addr+1) = absNormalsPos.y;
|
|
||||||
*(addr+2) = absNormalsPos.z;
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
Ogre::Vector3 absNormalsPos = vecRot * shapes[i].normals[verIndex];
|
|
||||||
absNormalsPos = absNormalsPos * boneinfo.weights[k].weight;
|
|
||||||
Ogre::Vector3 old = Ogre::Vector3(pRealNormal + 3 * verIndex);
|
|
||||||
absNormalsPos = absNormalsPos + old;
|
|
||||||
|
|
||||||
Ogre::Real* addr = (pRealNormal + 3 * verIndex);
|
|
||||||
*addr = absNormalsPos.x;
|
|
||||||
*(addr+1) = absNormalsPos.y;
|
|
||||||
*(addr+2) = absNormalsPos.z;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
std::cout << "TransformRot:" << boneinfo.trafo.rotation << "TransformTrans:" << boneinfo.trafo.trans << "\n";
|
|
||||||
std::vector<Nif::NiSkinData::VertWeight> weights = boneinfo.weights;
|
|
||||||
for (int j = 0; j < weights.size(); j++){
|
|
||||||
std::cout << "Vertex: " << weights[j].vertex << " Weight: " << weights[j].weight << "\n";
|
|
||||||
}*/
|
|
||||||
/*}
|
|
||||||
}
|
|
||||||
|
|
||||||
if(position){
|
|
||||||
decl->addElement(nextBuf, 0, VET_FLOAT3, VES_POSITION);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
newvbuf =
|
|
||||||
HardwareBufferManager::getSingleton().createVertexBuffer(
|
|
||||||
VertexElement::getTypeSize(VET_FLOAT3),
|
|
||||||
numVerts, HardwareBuffer::HBU_DYNAMIC_WRITE_ONLY);
|
|
||||||
|
|
||||||
newvbuf->writeData(0, newvbuf->getSizeInBytes(), pReal, false);
|
|
||||||
|
|
||||||
|
|
||||||
bind = subNew->vertexData->vertexBufferBinding;
|
|
||||||
bind->setBinding(nextBuf++, newvbuf);
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
//----------------------------------------NORMALS-------------------------------------------
|
|
||||||
|
|
||||||
const VertexElement* normal =
|
|
||||||
sub->vertexData->vertexDeclaration->findElementBySemantic(Ogre::VES_NORMAL);
|
|
||||||
if(normal)
|
|
||||||
{
|
|
||||||
decl->addElement(nextBuf, 0, VET_FLOAT3, VES_NORMAL);
|
|
||||||
newvbuf = HardwareBufferManager::getSingleton().createVertexBuffer(
|
|
||||||
VertexElement::getTypeSize(VET_FLOAT3),
|
|
||||||
numVerts, HardwareBuffer::HBU_DYNAMIC);
|
|
||||||
|
|
||||||
|
|
||||||
newvbuf->writeData(0, newvbuf->getSizeInBytes(), pRealNormal, false);
|
|
||||||
|
|
||||||
bind->setBinding(nextBuf++, newvbuf);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//--------------------------------------COLORS--------------------------------------------
|
|
||||||
const VertexElement* color =
|
|
||||||
sub->vertexData->vertexDeclaration->findElementBySemantic(Ogre::VES_DIFFUSE);
|
|
||||||
if(color)
|
|
||||||
{
|
|
||||||
|
|
||||||
decl->addElement(nextBuf, 0, VET_COLOUR, VES_DIFFUSE);
|
|
||||||
|
|
||||||
vbuf = sub->vertexData->vertexBufferBinding->getBuffer(color->getSource());
|
|
||||||
newvbuf = vbuf;
|
|
||||||
//RGBA* pReal2 = static_cast<RGBA*>(vbuf->lock(Ogre::HardwareBuffer::HBL_NORMAL));
|
|
||||||
//newvbuf->writeData(0, vbuf->getSizeInBytes(), pReal2, false);
|
|
||||||
|
|
||||||
//vbuf->unlock();
|
|
||||||
|
|
||||||
bind->setBinding(nextBuf++, newvbuf);
|
|
||||||
}
|
|
||||||
|
|
||||||
//-------------------------------------TEXTURES-------------------------------------------
|
|
||||||
|
|
||||||
const VertexElement* text =
|
|
||||||
sub->vertexData->vertexDeclaration->findElementBySemantic(Ogre::VES_TEXTURE_COORDINATES);
|
|
||||||
if(text){
|
|
||||||
vbuf = sub->vertexData->vertexBufferBinding->getBuffer(text->getSource());
|
|
||||||
|
|
||||||
decl->addElement(nextBuf, 0, VET_FLOAT2, VES_TEXTURE_COORDINATES);
|
|
||||||
newvbuf = vbuf;
|
|
||||||
//float* pRealf = static_cast<float*>(vbuf->lock(Ogre::HardwareBuffer::HBL_NORMAL));
|
|
||||||
|
|
||||||
//std::cout << "SIze" << vbuf->getSizeInBytes();
|
|
||||||
|
|
||||||
// newvbuf->writeData(0, vbuf->getSizeInBytes(), pRealf, false);
|
|
||||||
//vbuf->unlock();
|
|
||||||
bind->setBinding(nextBuf++, newvbuf);
|
|
||||||
}
|
|
||||||
|
|
||||||
//----------------------------------INDEX DATA--------------------------------------
|
|
||||||
int numFaces = sub->indexData->indexCount;
|
|
||||||
subNew->indexData->indexCount = numFaces;
|
|
||||||
subNew->indexData->indexStart = 0;
|
|
||||||
|
|
||||||
HardwareIndexBufferSharedPtr ibuf = sub->indexData->indexBuffer;
|
|
||||||
HardwareIndexBufferSharedPtr ibufNew = ibuf;
|
|
||||||
|
|
||||||
//uint16* tri = static_cast<uint16*>(ibuf->lock(Ogre::HardwareBuffer::HBL_NORMAL));
|
|
||||||
//ibufNew->writeData(0, ibuf->getSizeInBytes(), tri, false);
|
|
||||||
subNew->indexData->indexBuffer = ibufNew;
|
|
||||||
//ibuf->unlock();
|
|
||||||
|
|
||||||
if (!sub->getMaterialName().empty()){
|
|
||||||
subNew->setMaterialName(sub->getMaterialName());
|
|
||||||
}
|
|
||||||
|
|
||||||
//Ogre::SubMesh::VertexBoneAssignmentList bonelist = sub->getBoneAssignments();
|
|
||||||
|
|
||||||
/*
|
|
||||||
Ogre::VertexBoneAssignment assign;
|
|
||||||
assign.boneIndex = 0;
|
|
||||||
assign.vertexIndex = 0;
|
|
||||||
assign.weight = 1.0;
|
|
||||||
subNew->addBoneAssignment(assign);*/
|
|
||||||
/*
|
|
||||||
Ogre::SubMesh::BoneAssignmentIterator boneiter = sub->getBoneAssignmentIterator();
|
|
||||||
while(boneiter.hasMoreElements())
|
|
||||||
{
|
|
||||||
subNew->addBoneAssignment(boneiter.current()->second);
|
|
||||||
boneiter.getNext();
|
|
||||||
}
|
|
||||||
subNew->addBoneAssignment(boneiter.current()->second);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}*/
|
|
||||||
|
|
||||||
|
|
||||||
/* More code currently not in use, from the old D source. This was
|
/* More code currently not in use, from the old D source. This was
|
||||||
|
|
|
@ -45,8 +45,7 @@
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <list>
|
#include <list>
|
||||||
// For warning messages
|
// For warning messages
|
||||||
#include <iostream>5
|
#include <iostream>
|
||||||
// float infinity
|
|
||||||
#include <limits>
|
#include <limits>
|
||||||
using namespace boost::algorithm;
|
using namespace boost::algorithm;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue