Thread: [Python-ogre-commit] SF.net SVN: python-ogre: [436] trunk/python-ogre/ThirdParty
Brought to you by:
andy_miller,
roman_yakovenko
From: <and...@us...> - 2007-10-18 05:11:13
|
Revision: 436 http://python-ogre.svn.sourceforge.net/python-ogre/?rev=436&view=rev Author: andy_miller Date: 2007-10-17 22:11:08 -0700 (Wed, 17 Oct 2007) Log Message: ----------- ogrebullet BACK into the SVN Added Paths: ----------- trunk/python-ogre/ThirdParty/ogrebullet/ trunk/python-ogre/ThirdParty/ogrebullet/Collisions/ trunk/python-ogre/ThirdParty/ogrebullet/Collisions/Debug/ trunk/python-ogre/ThirdParty/ogrebullet/Collisions/Debug/OgreBulletCollisionsDebugContact.cpp trunk/python-ogre/ThirdParty/ogrebullet/Collisions/Debug/OgreBulletCollisionsDebugContact.h trunk/python-ogre/ThirdParty/ogrebullet/Collisions/Debug/OgreBulletCollisionsDebugDrawer.cpp trunk/python-ogre/ThirdParty/ogrebullet/Collisions/Debug/OgreBulletCollisionsDebugDrawer.h trunk/python-ogre/ThirdParty/ogrebullet/Collisions/Debug/OgreBulletCollisionsDebugLines.cpp trunk/python-ogre/ThirdParty/ogrebullet/Collisions/Debug/OgreBulletCollisionsDebugLines.h trunk/python-ogre/ThirdParty/ogrebullet/Collisions/Debug/OgreBulletCollisionsDebugShape.cpp trunk/python-ogre/ThirdParty/ogrebullet/Collisions/Debug/OgreBulletCollisionsDebugShape.h trunk/python-ogre/ThirdParty/ogrebullet/Collisions/OgreBulletCollisions.h trunk/python-ogre/ThirdParty/ogrebullet/Collisions/OgreBulletCollisionsBoxShape.cpp trunk/python-ogre/ThirdParty/ogrebullet/Collisions/OgreBulletCollisionsCompoundShape.cpp trunk/python-ogre/ThirdParty/ogrebullet/Collisions/OgreBulletCollisionsConeShape.cpp trunk/python-ogre/ThirdParty/ogrebullet/Collisions/OgreBulletCollisionsConvexCast.cpp trunk/python-ogre/ThirdParty/ogrebullet/Collisions/OgreBulletCollisionsConvexCast.h trunk/python-ogre/ThirdParty/ogrebullet/Collisions/OgreBulletCollisionsConvexHullShape.cpp trunk/python-ogre/ThirdParty/ogrebullet/Collisions/OgreBulletCollisionsCylinderShape.cpp trunk/python-ogre/ThirdParty/ogrebullet/Collisions/OgreBulletCollisionsDebugContact.cpp trunk/python-ogre/ThirdParty/ogrebullet/Collisions/OgreBulletCollisionsDebugDrawer.cpp trunk/python-ogre/ThirdParty/ogrebullet/Collisions/OgreBulletCollisionsDebugLines.cpp trunk/python-ogre/ThirdParty/ogrebullet/Collisions/OgreBulletCollisionsDebugShape.cpp trunk/python-ogre/ThirdParty/ogrebullet/Collisions/OgreBulletCollisionsMeshToShapeConverter.cpp trunk/python-ogre/ThirdParty/ogrebullet/Collisions/OgreBulletCollisionsMinkowskiSumShape.cpp trunk/python-ogre/ThirdParty/ogrebullet/Collisions/OgreBulletCollisionsMultiSphereShape.cpp trunk/python-ogre/ThirdParty/ogrebullet/Collisions/OgreBulletCollisionsObject.cpp trunk/python-ogre/ThirdParty/ogrebullet/Collisions/OgreBulletCollisionsObject.h trunk/python-ogre/ThirdParty/ogrebullet/Collisions/OgreBulletCollisionsObjectState.cpp trunk/python-ogre/ThirdParty/ogrebullet/Collisions/OgreBulletCollisionsObjectState.h trunk/python-ogre/ThirdParty/ogrebullet/Collisions/OgreBulletCollisionsPrecompiled.cpp trunk/python-ogre/ThirdParty/ogrebullet/Collisions/OgreBulletCollisionsPrerequisites.h trunk/python-ogre/ThirdParty/ogrebullet/Collisions/OgreBulletCollisionsRay.cpp trunk/python-ogre/ThirdParty/ogrebullet/Collisions/OgreBulletCollisionsRay.h trunk/python-ogre/ThirdParty/ogrebullet/Collisions/OgreBulletCollisionsShape.cpp trunk/python-ogre/ThirdParty/ogrebullet/Collisions/OgreBulletCollisionsShape.h trunk/python-ogre/ThirdParty/ogrebullet/Collisions/OgreBulletCollisionsSphereShape.cpp trunk/python-ogre/ThirdParty/ogrebullet/Collisions/OgreBulletCollisionsStaticPlaneShape.cpp trunk/python-ogre/ThirdParty/ogrebullet/Collisions/OgreBulletCollisionsTriangleShape.cpp trunk/python-ogre/ThirdParty/ogrebullet/Collisions/OgreBulletCollisionsTrimeshShape.cpp trunk/python-ogre/ThirdParty/ogrebullet/Collisions/OgreBulletCollisionsWorld.cpp trunk/python-ogre/ThirdParty/ogrebullet/Collisions/OgreBulletCollisionsWorld.h trunk/python-ogre/ThirdParty/ogrebullet/Collisions/Shapes/ trunk/python-ogre/ThirdParty/ogrebullet/Collisions/Shapes/OgreBulletCollisionsBoxShape.cpp trunk/python-ogre/ThirdParty/ogrebullet/Collisions/Shapes/OgreBulletCollisionsBoxShape.h trunk/python-ogre/ThirdParty/ogrebullet/Collisions/Shapes/OgreBulletCollisionsCompoundShape.cpp trunk/python-ogre/ThirdParty/ogrebullet/Collisions/Shapes/OgreBulletCollisionsCompoundShape.h trunk/python-ogre/ThirdParty/ogrebullet/Collisions/Shapes/OgreBulletCollisionsConeShape.cpp trunk/python-ogre/ThirdParty/ogrebullet/Collisions/Shapes/OgreBulletCollisionsConeShape.h trunk/python-ogre/ThirdParty/ogrebullet/Collisions/Shapes/OgreBulletCollisionsConvexHullShape.cpp trunk/python-ogre/ThirdParty/ogrebullet/Collisions/Shapes/OgreBulletCollisionsConvexHullShape.h trunk/python-ogre/ThirdParty/ogrebullet/Collisions/Shapes/OgreBulletCollisionsCylinderShape.cpp trunk/python-ogre/ThirdParty/ogrebullet/Collisions/Shapes/OgreBulletCollisionsCylinderShape.h trunk/python-ogre/ThirdParty/ogrebullet/Collisions/Shapes/OgreBulletCollisionsMinkowskiSumShape.cpp trunk/python-ogre/ThirdParty/ogrebullet/Collisions/Shapes/OgreBulletCollisionsMinkowskiSumShape.h trunk/python-ogre/ThirdParty/ogrebullet/Collisions/Shapes/OgreBulletCollisionsMultiSphereShape.cpp trunk/python-ogre/ThirdParty/ogrebullet/Collisions/Shapes/OgreBulletCollisionsMultiSphereShape.h trunk/python-ogre/ThirdParty/ogrebullet/Collisions/Shapes/OgreBulletCollisionsSphereShape.cpp trunk/python-ogre/ThirdParty/ogrebullet/Collisions/Shapes/OgreBulletCollisionsSphereShape.h trunk/python-ogre/ThirdParty/ogrebullet/Collisions/Shapes/OgreBulletCollisionsStaticPlaneShape.cpp trunk/python-ogre/ThirdParty/ogrebullet/Collisions/Shapes/OgreBulletCollisionsStaticPlaneShape.h trunk/python-ogre/ThirdParty/ogrebullet/Collisions/Shapes/OgreBulletCollisionsTriangleShape.cpp trunk/python-ogre/ThirdParty/ogrebullet/Collisions/Shapes/OgreBulletCollisionsTriangleShape.h trunk/python-ogre/ThirdParty/ogrebullet/Collisions/Shapes/OgreBulletCollisionsTrimeshShape.cpp trunk/python-ogre/ThirdParty/ogrebullet/Collisions/Shapes/OgreBulletCollisionsTrimeshShape.h trunk/python-ogre/ThirdParty/ogrebullet/Collisions/Utils/ trunk/python-ogre/ThirdParty/ogrebullet/Collisions/Utils/OgreBulletCollisionsMeshToShapeConverter.cpp trunk/python-ogre/ThirdParty/ogrebullet/Collisions/Utils/OgreBulletCollisionsMeshToShapeConverter.h trunk/python-ogre/ThirdParty/ogrebullet/Collisions/Utils/OgreBulletConverter.h trunk/python-ogre/ThirdParty/ogrebullet/Dynamics/ trunk/python-ogre/ThirdParty/ogrebullet/Dynamics/Constraints/ trunk/python-ogre/ThirdParty/ogrebullet/Dynamics/Constraints/OgreBulletDynamics6DofConstraint.cpp trunk/python-ogre/ThirdParty/ogrebullet/Dynamics/Constraints/OgreBulletDynamics6DofConstraint.h trunk/python-ogre/ThirdParty/ogrebullet/Dynamics/Constraints/OgreBulletDynamicsConeTwistConstraint.cpp trunk/python-ogre/ThirdParty/ogrebullet/Dynamics/Constraints/OgreBulletDynamicsConeTwistConstraint.h trunk/python-ogre/ThirdParty/ogrebullet/Dynamics/Constraints/OgreBulletDynamicsHingeConstraint.cpp trunk/python-ogre/ThirdParty/ogrebullet/Dynamics/Constraints/OgreBulletDynamicsHingeConstraint.h trunk/python-ogre/ThirdParty/ogrebullet/Dynamics/Constraints/OgreBulletDynamicsPoint2pointConstraint.cpp trunk/python-ogre/ThirdParty/ogrebullet/Dynamics/Constraints/OgreBulletDynamicsPoint2pointConstraint.h trunk/python-ogre/ThirdParty/ogrebullet/Dynamics/Constraints/OgreBulletDynamicsRaycastVehicle.cpp trunk/python-ogre/ThirdParty/ogrebullet/Dynamics/Constraints/OgreBulletDynamicsRaycastVehicle.h trunk/python-ogre/ThirdParty/ogrebullet/Dynamics/OgreBulletDynamics.h trunk/python-ogre/ThirdParty/ogrebullet/Dynamics/OgreBulletDynamics6DofConstraint.cpp trunk/python-ogre/ThirdParty/ogrebullet/Dynamics/OgreBulletDynamicsConeTwistConstraint.cpp trunk/python-ogre/ThirdParty/ogrebullet/Dynamics/OgreBulletDynamicsConstraint.cpp trunk/python-ogre/ThirdParty/ogrebullet/Dynamics/OgreBulletDynamicsConstraint.h trunk/python-ogre/ThirdParty/ogrebullet/Dynamics/OgreBulletDynamicsHingeConstraint.cpp trunk/python-ogre/ThirdParty/ogrebullet/Dynamics/OgreBulletDynamicsObjectState.cpp trunk/python-ogre/ThirdParty/ogrebullet/Dynamics/OgreBulletDynamicsObjectState.h trunk/python-ogre/ThirdParty/ogrebullet/Dynamics/OgreBulletDynamicsPoint2pointConstraint.cpp trunk/python-ogre/ThirdParty/ogrebullet/Dynamics/OgreBulletDynamicsPrecompiled.cpp trunk/python-ogre/ThirdParty/ogrebullet/Dynamics/OgreBulletDynamicsPrerequisites.h trunk/python-ogre/ThirdParty/ogrebullet/Dynamics/OgreBulletDynamicsRaycastVehicle.cpp trunk/python-ogre/ThirdParty/ogrebullet/Dynamics/OgreBulletDynamicsRigidBody.cpp trunk/python-ogre/ThirdParty/ogrebullet/Dynamics/OgreBulletDynamicsRigidBody.h trunk/python-ogre/ThirdParty/ogrebullet/Dynamics/OgreBulletDynamicsWorld.cpp trunk/python-ogre/ThirdParty/ogrebullet/Dynamics/OgreBulletDynamicsWorld.h Added: trunk/python-ogre/ThirdParty/ogrebullet/Collisions/Debug/OgreBulletCollisionsDebugContact.cpp =================================================================== --- trunk/python-ogre/ThirdParty/ogrebullet/Collisions/Debug/OgreBulletCollisionsDebugContact.cpp (rev 0) +++ trunk/python-ogre/ThirdParty/ogrebullet/Collisions/Debug/OgreBulletCollisionsDebugContact.cpp 2007-10-18 05:11:08 UTC (rev 436) @@ -0,0 +1,650 @@ +/*************************************************************************** + +This source file is part of OGREBULLET +(Object-oriented Graphics Rendering Engine Bullet Wrapper) +For the latest info, see http://www.ogre3d.org/phpBB2addons/viewforum.php?f=10 + +Copyright (c) 2007 tua...@gm... + + + +This program is free software; you can redistribute it and/or modify it under +the terms of the GNU Lesser General Public License as published by the Free Software +Foundation; either version 2 of the License, or (at your option) any later +version. + +This program is distributed in the hope that it will be useful, but WITHOUT +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License along with +this program; if not, write to the Free Software Foundation, Inc., 59 Temple +Place - Suite 330, Boston, MA 02111-1307, USA, or go to +http://www.gnu.org/copyleft/lesser.txt. +----------------------------------------------------------------------------- +*/ + + +#include "OgreBulletCollisions.h" + +#include "Ogre.h" +#include "OgreFontManager.h" + +#include "Debug/OgreBulletCollisionsDebugContact.h" +#include "OgreBulletCollisionsShape.h" +#include "OgreBulletCollisionsObject.h" +#include "OgreBulletCollisionsWorld.h" + +using namespace Ogre; + +#define POS_TEX_BINDING 0 +#define COLOUR_BINDING 1 + +namespace OgreBulletCollisions +{ + //------------------------------------------------------------------------------------------------ + DebugContact::DebugContact(const String &name, CollisionsWorld *world) : + _name(name), + _world(world), + _enabled(false) + { + // scene node + _node = _world->getSceneManager()->getRootSceneNode ()->createChildSceneNode (); + + // sphere attach to contact point + _point = _world->getSceneManager()->createEntity(name + String("_debug_point"), "sphere.mesh"); + _point_node = _node->createChildSceneNode (); + _point_node->attachObject (_point); + _point_node->setScale(0.001, 0.001, 0.001); + + // normal direction debug + _normal = new DebugNormal(); + _node->attachObject (_normal); + + // text info on contact + _text = new DebugContactText(name + String("_debug_text"), _node->createChildSceneNode ()); + _text->setPosition (Vector3(0,5,0)); + _text->setCaption ("-"); + _text->setVisible (false); + + _node->setVisible (false); + } + //------------------------------------------------------------------------------------------------ + DebugContact::~DebugContact() + { + delete _text; + + _point_node->detachObject (_point->getName ()); + _node->detachObject (_normal->getName ()); + + _world->getSceneManager()->destroyEntity (_point->getName ()); + + _node->detachAllObjects (); + _node->removeAndDestroyAllChildren (); + + delete _normal; + } + //------------------------------------------------------------------------------------------------ + void DebugContact::update(const Ogre::Vector3 &normal, const Ogre::Vector3 &pt, const Ogre::Real depth) + { + _node->setPosition (pt); + + _point_node->setPosition (depth * normal); + + //String contactLabel("p: "); + //contactLabel = contactLabel + StringConverter::toString(contact->getPosition()); + //contactLabel = contactLabel + ", n: "; + //contactLabel = contactLabel + StringConverter::toString(contact->getNormal()); + //_text->setCaption (contactLabel); + //_text->setVisible (false); + + //_text->setPosition (contact->getPosition () + Vector3(0,5,0)); + + _normal->update (normal, pt, depth); + } + //------------------------------------------------------------------------------------------------ + bool DebugContact::isEnabled () const + { + return _enabled; + } + //------------------------------------------------------------------------------------------------ + void DebugContact::setEnabled (bool enable) + { + _enabled = enable; + _node->setVisible (_enabled); + }; + //------------------------------------------------------------------------------------------------ + void DebugNormal::update(const Ogre::Vector3 &normal, const Ogre::Vector3 &pt, const Ogre::Real depth) + { + DebugLines::clear (); + // set normal following contact normal + //contact->_normal + //contact->_position + DebugLines::addLine (Vector3::ZERO, + 5*normal); + DebugLines::draw (); + } + //------------------------------------------------------------------------------------------------ + DebugContactText::DebugContactText(const String &name, + SceneNode *node, + const String &caption, + const String &fontName, + int charHeight, + const ColourValue &color) + : mpCam(NULL) + , mpWin(NULL) + , mpFont(NULL) + , mName(name) + , mCaption(caption) + , mFontName(fontName) + , mCharHeight(charHeight) + , mColor(color) + , mType("DebugContact") + , mTimeUntilNextToggle(0) + , mSpaceWidth(0) + , mUpdateColors(true) + , mOnTop(false) + , mHorizontalAlignment(H_LEFT) + , mVerticalAlignment(V_BELOW) + , mAdditionalHeight(0.0) + , mNode(node) + + { + if (name.empty()) + Exception(Exception::ERR_INVALIDPARAMS, "Trying to create DebugContact without name", "DebugContact::DebugContact"); +// +// if (caption.empty()) +// Exception(Exception::ERR_INVALIDPARAMS, "Trying to create DebugContact without caption", "DebugContact::DebugContact"); + + mRenderOp.vertexData = NULL; + this->setFontName(mFontName); + //this->_setupGeometry(); + mNode->attachObject(this); + } + //------------------------------------------------------------------------------------------------ + DebugContactText::~DebugContactText() + { + mNode->detachObject(this->getName()); + if (mRenderOp.vertexData) + delete mRenderOp.vertexData; + } +#if (OGRE_VERSION >= ((1 << 16) | (5 << 8) | 0)) // must have at least shoggoth (1.5.0) + void DebugContactText::visitRenderables(Renderable::Visitor* visitor, + bool debugRenderables) + { + visitor->visit(this, 0, false); + } +#endif + //------------------------------------------------------------------------------------------------ + void DebugContactText::setPosition(const Vector3 &pos) + { + mNode->setPosition (pos); + } + //------------------------------------------------------------------------------------------------ + void DebugContactText::setFontName(const String &fontName) + { + if((Ogre::MaterialManager::getSingletonPtr()->resourceExists(mName + "Material"))) + { + Ogre::MaterialManager::getSingleton().remove(mName + "Material"); + } + + if (mFontName != fontName || mpMaterial.isNull() || !mpFont) + { + mFontName = fontName; + mpFont = (Font *)FontManager::getSingleton().getByName(mFontName).getPointer(); + if (!mpFont) + Exception(Exception::ERR_ITEM_NOT_FOUND, "Could not find font " + fontName, "DebugContact::setFontName"); + + mpFont->load(); + if (!mpMaterial.isNull()) + { + MaterialManager::getSingletonPtr()->remove(mpMaterial->getName()); + mpMaterial.setNull(); + } + + mpMaterial = mpFont->getMaterial()->clone(mName + "Material"); + if (!mpMaterial->isLoaded()) + mpMaterial->load(); + + mpMaterial->setDepthCheckEnabled(!mOnTop); + //mpMaterial->setDepthBias(!mOnTop); + mpMaterial->setDepthBias(0,!mOnTop); + mpMaterial->setDepthWriteEnabled(mOnTop); + mpMaterial->setLightingEnabled(false); + mNeedUpdate = true; + } + } + //------------------------------------------------------------------------------------------------ + void DebugContactText::setCaption(const String &caption) + { + if (caption != mCaption) + { + mCaption = caption; + mNeedUpdate = true; + } + } + //------------------------------------------------------------------------------------------------ + void DebugContactText::setColor(const ColourValue &color) + { + if (color != mColor) + { + mColor = color; + mUpdateColors = true; + } + } + //------------------------------------------------------------------------------------------------ + void DebugContactText::setCharacterHeight(unsigned int height) + { + if (height != mCharHeight) + { + mCharHeight = height; + mNeedUpdate = true; + } + } + //------------------------------------------------------------------------------------------------ + void DebugContactText::setSpaceWidth(unsigned int width) + { + if (width != mSpaceWidth) + { + mSpaceWidth = width; + mNeedUpdate = true; + } + } + //------------------------------------------------------------------------------------------------ + void DebugContactText::setTextAlignment(const HorizontalAlignment& horizontalAlignment, const VerticalAlignment& verticalAlignment) + { + if(mHorizontalAlignment != horizontalAlignment) + { + mHorizontalAlignment = horizontalAlignment; + mNeedUpdate = true; + } + if(mVerticalAlignment != verticalAlignment) + { + mVerticalAlignment = verticalAlignment; + mNeedUpdate = true; + } + } + //------------------------------------------------------------------------------------------------ + void DebugContactText::setAdditionalHeight( Real height ) + { + if( mAdditionalHeight != height ) + { + mAdditionalHeight = height; + mNeedUpdate = true; + } + } + //------------------------------------------------------------------------------------------------ + void DebugContactText::showOnTop(bool show) + { + if( mOnTop != show && !mpMaterial.isNull() ) + { + mOnTop = show; + mpMaterial->setDepthBias(0,!mOnTop); + mpMaterial->setDepthCheckEnabled(!mOnTop); + mpMaterial->setDepthWriteEnabled(mOnTop); + } + } + //------------------------------------------------------------------------------------------------ + void DebugContactText::_setupGeometry() + { + assert(mpFont); + assert(!mpMaterial.isNull()); + + unsigned int vertexCount = static_cast<unsigned int>(mCaption.size() * 6); + + if (mRenderOp.vertexData) + { + // Removed this test as it causes problems when replacing a caption + // of the same size: replacing "Hello" with "hello" + // as well as when changing the text alignment + //if (mRenderOp.vertexData->vertexCount != vertexCount) + { + delete mRenderOp.vertexData; + mRenderOp.vertexData = NULL; + mUpdateColors = true; + } + } + + if (!mRenderOp.vertexData) + mRenderOp.vertexData = new VertexData(); + + mRenderOp.indexData = 0; + mRenderOp.vertexData->vertexStart = 0; + mRenderOp.vertexData->vertexCount = vertexCount; + mRenderOp.operationType = RenderOperation::OT_TRIANGLE_LIST; + mRenderOp.useIndexes = false; + + VertexDeclaration *decl = mRenderOp.vertexData->vertexDeclaration; + VertexBufferBinding *bind = mRenderOp.vertexData->vertexBufferBinding; + size_t offset = 0; + + // create/bind positions/tex.ccord. buffer + if (!decl->findElementBySemantic(VES_POSITION)) + decl->addElement(POS_TEX_BINDING, offset, VET_FLOAT3, VES_POSITION); + + offset += VertexElement::getTypeSize(VET_FLOAT3); + + if (!decl->findElementBySemantic(VES_TEXTURE_COORDINATES)) + decl->addElement(POS_TEX_BINDING, offset, Ogre::VET_FLOAT2, Ogre::VES_TEXTURE_COORDINATES, 0); + + HardwareVertexBufferSharedPtr ptbuf = HardwareBufferManager::getSingleton().createVertexBuffer(decl->getVertexSize(POS_TEX_BINDING), + mRenderOp.vertexData->vertexCount, + HardwareBuffer::HBU_DYNAMIC_WRITE_ONLY); + bind->setBinding(POS_TEX_BINDING, ptbuf); + + // Colours - store these in a separate buffer because they change less often + if (!decl->findElementBySemantic(VES_DIFFUSE)) + decl->addElement(COLOUR_BINDING, 0, VET_COLOUR, VES_DIFFUSE); + + HardwareVertexBufferSharedPtr cbuf = HardwareBufferManager::getSingleton().createVertexBuffer(decl->getVertexSize(COLOUR_BINDING), + mRenderOp.vertexData->vertexCount, + HardwareBuffer::HBU_DYNAMIC_WRITE_ONLY); + bind->setBinding(COLOUR_BINDING, cbuf); + + size_t charlen = mCaption.size(); + Real *pPCBuff = static_cast<Real*>(ptbuf->lock(HardwareBuffer::HBL_DISCARD)); + + float largestWidth = 0; + float left = 0 * 2.0 - 1.0; + float top = -((0 * 2.0) - 1.0); + + // Derive space width from a capital A + if (mSpaceWidth == 0) + mSpaceWidth = mpFont->getGlyphAspectRatio('A') * mCharHeight * 2.0; + + // for calculation of AABB + Ogre::Vector3 min, max, currPos; + Ogre::Real maxSquaredRadius; + bool first = true; + + // Use iterator + String::iterator i, iend; + iend = mCaption.end(); + bool newLine = true; + Real len = 0.0f; + + if(mVerticalAlignment == DebugContactText::V_ABOVE) + { + // Raise the first line of the caption + top += mCharHeight; + for (i = mCaption.begin(); i != iend; ++i) + { + if (*i == '\n') + top += mCharHeight * 2.0; + } + } + + for (i = mCaption.begin(); i != iend; ++i) + { + if (newLine) + { + len = 0.0f; + for (String::iterator j = i; j != iend && *j != '\n'; j++) + { + if (*j == ' ') + len += mSpaceWidth; + else + len += mpFont->getGlyphAspectRatio(*j) * mCharHeight * 2.0; + } + newLine = false; + } + + if (*i == '\n') + { + left = 0 * 2.0 - 1.0; + top -= mCharHeight * 2.0; + newLine = true; + continue; + } + + if (*i == ' ') + { + // Just leave a gap, no tris + left += mSpaceWidth; + // Also reduce tri count + mRenderOp.vertexData->vertexCount -= 6; + continue; + } + + Real horiz_height = mpFont->getGlyphAspectRatio(*i); + + //mpFont->getGlyphTexCoords(*i, u1, v1, u2, v2); + const Font::UVRect &uvRect = mpFont->getGlyphTexCoords(*i); + const Real u1 = uvRect.left; + const Real u2 = uvRect.right; + const Real v1 = uvRect.top; + const Real v2 = uvRect.bottom; + + // each vert is (x, y, z, u, v) + //------------------------------------------------------------------------------------- + // First tri + // + // Upper left + if(mHorizontalAlignment == DebugContactText::H_LEFT) + *pPCBuff++ = left; + else + *pPCBuff++ = left - (len / 2); + *pPCBuff++ = top; + *pPCBuff++ = -1.0; + *pPCBuff++ = u1; + *pPCBuff++ = v1; + + // Deal with bounds + if(mHorizontalAlignment == DebugContactText::H_LEFT) + currPos = Ogre::Vector3(left, top, -1.0); + else + currPos = Ogre::Vector3(left - (len / 2), top, -1.0); + if (first) + { + min = max = currPos; + maxSquaredRadius = currPos.squaredLength(); + first = false; + } + else + { + min.makeFloor(currPos); + max.makeCeil(currPos); + maxSquaredRadius = std::max(maxSquaredRadius, currPos.squaredLength()); + } + + top -= mCharHeight * 2.0; + + // Bottom left + if(mHorizontalAlignment == DebugContactText::H_LEFT) + *pPCBuff++ = left; + else + *pPCBuff++ = left - (len / 2); + *pPCBuff++ = top; + *pPCBuff++ = -1.0; + *pPCBuff++ = u1; + *pPCBuff++ = v2; + + // Deal with bounds + if(mHorizontalAlignment == DebugContactText::H_LEFT) + currPos = Ogre::Vector3(left, top, -1.0); + else + currPos = Ogre::Vector3(left - (len / 2), top, -1.0); + min.makeFloor(currPos); + max.makeCeil(currPos); + maxSquaredRadius = std::max(maxSquaredRadius, currPos.squaredLength()); + + top += mCharHeight * 2.0; + left += horiz_height * mCharHeight * 2.0; + + // Top right + if(mHorizontalAlignment == DebugContactText::H_LEFT) + *pPCBuff++ = left; + else + *pPCBuff++ = left - (len / 2); + *pPCBuff++ = top; + *pPCBuff++ = -1.0; + *pPCBuff++ = u2; + *pPCBuff++ = v1; + //------------------------------------------------------------------------------------- + + // Deal with bounds + if(mHorizontalAlignment == DebugContactText::H_LEFT) + currPos = Ogre::Vector3(left, top, -1.0); + else + currPos = Ogre::Vector3(left - (len / 2), top, -1.0); + min.makeFloor(currPos); + max.makeCeil(currPos); + maxSquaredRadius = std::max(maxSquaredRadius, currPos.squaredLength()); + + //------------------------------------------------------------------------------------- + // Second tri + // + // Top right (again) + if(mHorizontalAlignment == DebugContactText::H_LEFT) + *pPCBuff++ = left; + else + *pPCBuff++ = left - (len / 2); + *pPCBuff++ = top; + *pPCBuff++ = -1.0; + *pPCBuff++ = u2; + *pPCBuff++ = v1; + + currPos = Ogre::Vector3(left, top, -1.0); + min.makeFloor(currPos); + max.makeCeil(currPos); + maxSquaredRadius = std::max(maxSquaredRadius, currPos.squaredLength()); + + top -= mCharHeight * 2.0; + left -= horiz_height * mCharHeight * 2.0; + + // Bottom left (again) + if(mHorizontalAlignment == DebugContactText::H_LEFT) + *pPCBuff++ = left; + else + *pPCBuff++ = left - (len / 2); + *pPCBuff++ = top; + *pPCBuff++ = -1.0; + *pPCBuff++ = u1; + *pPCBuff++ = v2; + + currPos = Ogre::Vector3(left, top, -1.0); + min.makeFloor(currPos); + max.makeCeil(currPos); + maxSquaredRadius = std::max(maxSquaredRadius, currPos.squaredLength()); + + left += horiz_height * mCharHeight * 2.0; + + // Bottom right + if(mHorizontalAlignment == DebugContactText::H_LEFT) + *pPCBuff++ = left; + else + *pPCBuff++ = left - (len / 2); + *pPCBuff++ = top; + *pPCBuff++ = -1.0; + *pPCBuff++ = u2; + *pPCBuff++ = v2; + //------------------------------------------------------------------------------------- + + currPos = Ogre::Vector3(left, top, -1.0); + min.makeFloor(currPos); + max.makeCeil(currPos); + maxSquaredRadius = std::max(maxSquaredRadius, currPos.squaredLength()); + + // Go back up with top + top += mCharHeight * 2.0; + + float currentWidth = (left + 1)/2 - 0; + if (currentWidth > largestWidth) + largestWidth = currentWidth; + } + + // Unlock vertex buffer + ptbuf->unlock(); + + // update AABB/Sphere radius + mAABB = Ogre::AxisAlignedBox(min, max); + mRadius = Ogre::Math::Sqrt(maxSquaredRadius); + + if (mUpdateColors) + this->_updateColors(); + + mNeedUpdate = false; + } + //------------------------------------------------------------------------------------------------ + void DebugContactText::_updateColors(void) + { + assert(mpFont); + assert(!mpMaterial.isNull()); + + // Convert to system-specific + RGBA color; + Root::getSingleton().convertColourValue(mColor, &color); + HardwareVertexBufferSharedPtr vbuf = mRenderOp.vertexData->vertexBufferBinding->getBuffer(COLOUR_BINDING); + RGBA *pDest = static_cast<RGBA*>(vbuf->lock(HardwareBuffer::HBL_DISCARD)); + for (unsigned int i = 0; i < mRenderOp.vertexData->vertexCount; ++i) + *pDest++ = color; + vbuf->unlock(); + mUpdateColors = false; + } + //------------------------------------------------------------------------------------------------ + const Quaternion& DebugContactText::getWorldOrientation(void) const + { + assert(mpCam); + return const_cast<Quaternion&>(mpCam->getDerivedOrientation()); + } + //------------------------------------------------------------------------------------------------ + const Vector3& DebugContactText::getWorldPosition(void) const + { + assert(mParentNode); + return mParentNode->_getDerivedPosition(); + } + //------------------------------------------------------------------------------------------------ + void DebugContactText::getWorldTransforms(Matrix4 *xform) const + { + if (this->isVisible() && mpCam) + { + Matrix3 rot3x3, scale3x3 = Matrix3::IDENTITY; + + // store rotation in a matrix + mpCam->getDerivedOrientation().ToRotationMatrix(rot3x3); + + // parent node position + Vector3 ppos = mParentNode->_getDerivedPosition() + Vector3::UNIT_Y*mAdditionalHeight; + + // apply scale + scale3x3[0][0] = mParentNode->_getDerivedScale().x / 2; + scale3x3[1][1] = mParentNode->_getDerivedScale().y / 2; + scale3x3[2][2] = mParentNode->_getDerivedScale().z / 2; + + // apply all transforms to xform + *xform = (rot3x3 * scale3x3); + xform->setTrans(ppos); + } + } + //------------------------------------------------------------------------------------------------ + void DebugContactText::getRenderOperation(RenderOperation &op) + { + if (this->isVisible()) + { + if (mNeedUpdate) + this->_setupGeometry(); + if (mUpdateColors) + this->_updateColors(); + op = mRenderOp; + } + } + //------------------------------------------------------------------------------------------------ + void DebugContactText::_notifyCurrentCamera(Camera *cam) + { + mpCam = cam; + } + //------------------------------------------------------------------------------------------------ + void DebugContactText::_updateRenderQueue(RenderQueue* queue) + { + if (this->isVisible()) + { + if (mNeedUpdate) + this->_setupGeometry(); + if (mUpdateColors) + this->_updateColors(); + + queue->addRenderable(this, mRenderQueueID, OGRE_RENDERABLE_DEFAULT_PRIORITY); + // queue->addRenderable(this, mRenderQueueID, RENDER_QUEUE_SKIES_LATE); + } + } +} Added: trunk/python-ogre/ThirdParty/ogrebullet/Collisions/Debug/OgreBulletCollisionsDebugContact.h =================================================================== --- trunk/python-ogre/ThirdParty/ogrebullet/Collisions/Debug/OgreBulletCollisionsDebugContact.h (rev 0) +++ trunk/python-ogre/ThirdParty/ogrebullet/Collisions/Debug/OgreBulletCollisionsDebugContact.h 2007-10-18 05:11:08 UTC (rev 436) @@ -0,0 +1,177 @@ +/*************************************************************************** + +This source file is part of OGREBULLET + (Object-oriented Graphics Rendering Engine Bullet Wrapper) + For the latest info, see http://www.ogre3d.org/phpBB2addons/viewforum.php?f=10 + + Copyright (c) 2007 tua...@gm... + + + +This program is free software; you can redistribute it and/or modify it under +the terms of the GNU Lesser General Public License as published by the Free Software +Foundation; either version 2 of the License, or (at your option) any later +version. + +This program is distributed in the hope that it will be useful, but WITHOUT +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License along with +this program; if not, write to the Free Software Foundation, Inc., 59 Temple +Place - Suite 330, Boston, MA 02111-1307, USA, or go to +http://www.gnu.org/copyleft/lesser.txt. +----------------------------------------------------------------------------- +*/ + +#ifndef __OgreBulletCollisionsDebugContact_H__ +#define __OgreBulletCollisionsDebugContact_H__ + +#include "OgreBulletCollisionsPreRequisites.h" +#include "Debug/OgreBulletCollisionsDebugLines.h" + + +namespace OgreBulletCollisions +{ + //------------------------------------------------------------------------------------------------ + class DebugContact + { + public: + DebugContact(const Ogre::String &name, CollisionsWorld *world); + ~DebugContact(); + + bool isEnabled () const; + void setEnabled (bool enable); + + void update(const Ogre::Vector3 &normal, const Ogre::Vector3 &pt, const Ogre::Real depth); + + private: + DebugNormal *_normal; + DebugContactText *_text; + Ogre::Entity *_point; + bool _enabled; + Ogre::String _name; + Ogre::SceneNode *_node; + Ogre::SceneNode *_point_node; + CollisionsWorld *_world; + }; + + //------------------------------------------------------------------------------------------------ + class DebugNormal : public DebugLines + { + public: + DebugNormal() : DebugLines(){}; + ~DebugNormal(){}; + + void update (const Ogre::Vector3 &normal, const Ogre::Vector3 &pt, const Ogre::Real depth); + }; + + //------------------------------------------------------------------------------------------------ + class DebugContactText : public Ogre::MovableObject, public Ogre::Renderable + { + public: + enum HorizontalAlignment {H_LEFT, H_CENTER}; + enum VerticalAlignment {V_BELOW, V_ABOVE}; + /******************************** public methods ******************************/ + public: + DebugContactText(const Ogre::String &name, + Ogre::SceneNode *node, + const Ogre::String &caption = "", + const Ogre::String &fontName = "BlueHighway", + int charHeight = 32, + const Ogre::ColourValue &color = Ogre::ColourValue::White); + + + ~DebugContactText(); + +#if (OGRE_VERSION >= ((1 << 16) | (5 << 8) | 0)) // must have at least shoggoth (1.5.0) + void visitRenderables(Renderable::Visitor* visitor, bool debugRenderables); +#endif + // Set settings + void setPosition(const Ogre::Vector3 &pos); + + void setFontName(const Ogre::String &fontName); + void setCaption(const Ogre::String &caption); + void setColor(const Ogre::ColourValue &color); + void setCharacterHeight(unsigned int height); + void setSpaceWidth(unsigned int width); + void setTextAlignment(const HorizontalAlignment& horizontalAlignment, + const VerticalAlignment& verticalAlignment); + void setAdditionalHeight( Ogre::Real height ); + void showOnTop(bool show=true); + + // Get settings + const Ogre::String &getFontName() const {return mFontName;} + const Ogre::String &getCaption() const {return mCaption;} + const Ogre::ColourValue &getColor() const {return mColor;} + + unsigned int getCharacterHeight() const {return mCharHeight;} + unsigned int getSpaceWidth() const {return mSpaceWidth;} + Ogre::Real getAdditionalHeight() const {return mAdditionalHeight;} + bool getShowOnTop() const {return mOnTop;} + Ogre::AxisAlignedBox GetAABB(void) { return mAABB; } + + /******************************** protected methods and overload **************/ + protected: + + // from OgreBulletCollisionsDebugContact, create the object + void _setupGeometry(); + void _updateColors(); + + // from MovableObject + void getWorldTransforms(Ogre::Matrix4 *xform) const; + Ogre::Real getBoundingRadius(void) const {return mRadius;}; + Ogre::Real getSquaredViewDepth(const Ogre::Camera *cam) const {return 0;}; + const Ogre::Quaternion &getWorldOrientation(void) const; + const Ogre::Vector3 &getWorldPosition(void) const; + const Ogre::AxisAlignedBox &getBoundingBox(void) const {return mAABB;}; + const Ogre::String &getName(void) const {return mName;}; + const Ogre::String &getMovableType(void) const {static Ogre::String movType = "MovableText"; return movType;}; + + void _notifyCurrentCamera(Ogre::Camera *cam); + void _updateRenderQueue(Ogre::RenderQueue* queue); + + // from renderable + void getRenderOperation(Ogre::RenderOperation &op); + const Ogre::MaterialPtr &getMaterial(void) const {assert(!mpMaterial.isNull());return mpMaterial;}; + const Ogre::LightList &getLights(void) const {return mLList;}; + + /******************************** OgreBulletCollisionsDebugContact data ****************************/ + + + protected: + Ogre::String mFontName; + Ogre::String mType; + Ogre::String mName; + Ogre::String mCaption; + HorizontalAlignment mHorizontalAlignment; + VerticalAlignment mVerticalAlignment; + + Ogre::ColourValue mColor; + Ogre::RenderOperation mRenderOp; + Ogre::AxisAlignedBox mAABB; + Ogre::LightList mLList; + + unsigned int mCharHeight; + unsigned int mSpaceWidth; + + bool mNeedUpdate; + bool mUpdateColors; + bool mOnTop; + + Ogre::Real mTimeUntilNextToggle; + Ogre::Real mRadius; + Ogre::Real mAdditionalHeight; + + Ogre::Camera *mpCam; + Ogre::RenderWindow *mpWin; + Ogre::Font *mpFont; + Ogre::MaterialPtr mpMaterial; + Ogre::MaterialPtr mpBackgroundMaterial; + + Ogre::SceneNode *mNode; + }; +} + +#endif //__OgreBulletCollisionsDebugContact_H__ + Added: trunk/python-ogre/ThirdParty/ogrebullet/Collisions/Debug/OgreBulletCollisionsDebugDrawer.cpp =================================================================== --- trunk/python-ogre/ThirdParty/ogrebullet/Collisions/Debug/OgreBulletCollisionsDebugDrawer.cpp (rev 0) +++ trunk/python-ogre/ThirdParty/ogrebullet/Collisions/Debug/OgreBulletCollisionsDebugDrawer.cpp 2007-10-18 05:11:08 UTC (rev 436) @@ -0,0 +1,237 @@ +/*************************************************************************** + +This source file is part of OGREBULLET +(Object-oriented Graphics Rendering Engine Bullet Wrapper) +For the latest info, see http://www.ogre3d.org/phpBB2addons/viewforum.php?f=10 + +Copyright (c) 2007 tua...@gm... + + + +This program is free software; you can redistribute it and/or modify it under +the terms of the GNU Lesser General Public License as published by the Free Software +Foundation; either version 2 of the License, or (at your option) any later +version. + +This program is distributed in the hope that it will be useful, but WITHOUT +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License along with +this program; if not, write to the Free Software Foundation, Inc., 59 Temple +Place - Suite 330, Boston, MA 02111-1307, USA, or go to +http://www.gnu.org/copyleft/lesser.txt. +----------------------------------------------------------------------------- +*/ + +#include "OgreBulletCollisions.h" + +#include "Debug/OgreBulletCollisionsDebugDrawer.h" +#include "Utils/OgreBulletConverter.h" + +using namespace OgreBulletCollisions; +using namespace Ogre; + +//------------------------------------------------------------------------------------------------ +DebugDrawer::DebugDrawer() : + DebugLines(), + btIDebugDraw(), + mDebugMode(0) +{ +} +//------------------------------------------------------------------------------------------------ +DebugDrawer::~DebugDrawer() +{ +} +//------------------------------------------------------------------------------------------------ +void DebugDrawer::reportErrorWarning(const char* warningString) +{ + Ogre::LogManager::getSingleton().getDefaultLog()->logMessage(warningString); +} +//------------------------------------------------------------------------------------------------ +void DebugDrawer::setDrawAabb(bool enable) +{ + if (enable) + mDebugMode |= btIDebugDraw::DBG_DrawAabb; + else + mDebugMode &= ~btIDebugDraw::DBG_DrawAabb; +} +//------------------------------------------------------------------------------------------------ +bool DebugDrawer::doesDrawAabb () const {return (mDebugMode & btIDebugDraw::DBG_DrawAabb) != 0;}; +//------------------------------------------------------------------------------------------------ +bool DebugDrawer::doesDrawWireframe () const {return (mDebugMode & btIDebugDraw::DBG_DrawWireframe) != 0;}; +//------------------------------------------------------------------------------------------------ +bool DebugDrawer::doesDrawFeaturesText () const {return (mDebugMode & btIDebugDraw::DBG_DrawFeaturesText) != 0;}; +//------------------------------------------------------------------------------------------------ +bool DebugDrawer::doesDrawContactPoints () const {return (mDebugMode & btIDebugDraw::DBG_DrawContactPoints) != 0;}; +//------------------------------------------------------------------------------------------------ +bool DebugDrawer::doesNoDeactivation () const {return (mDebugMode & btIDebugDraw::DBG_NoDeactivation) != 0;}; +//------------------------------------------------------------------------------------------------ +bool DebugDrawer::doesNoHelpText () const {return (mDebugMode & btIDebugDraw::DBG_NoHelpText) != 0;}; +//------------------------------------------------------------------------------------------------ +bool DebugDrawer::doesDrawText () const {return (mDebugMode & btIDebugDraw::DBG_DrawText) != 0;}; +//------------------------------------------------------------------------------------------------ +bool DebugDrawer::doesProfileTimings () const {return (mDebugMode & btIDebugDraw::DBG_ProfileTimings) != 0;}; +//------------------------------------------------------------------------------------------------ +bool DebugDrawer::doesEnableSatComparison () const {return (mDebugMode & btIDebugDraw::DBG_EnableSatComparison) != 0;}; +//------------------------------------------------------------------------------------------------ +bool DebugDrawer::doesDisableBulletLCP () const {return (mDebugMode & btIDebugDraw::DBG_DisableBulletLCP) != 0;}; +//------------------------------------------------------------------------------------------------ +bool DebugDrawer::doesEnableCCD () const {return (mDebugMode & btIDebugDraw::DBG_EnableCCD) != 0;}; +//------------------------------------------------------------------------------------------------ +void DebugDrawer::setDrawWireframe(bool enable) +{ + if (enable) + mDebugMode |= btIDebugDraw::DBG_DrawWireframe; + else + mDebugMode &= ~btIDebugDraw::DBG_DrawWireframe; +} +//------------------------------------------------------------------------------------------------ +void DebugDrawer::setDrawFeaturesText(bool enable) +{ + if (enable) + mDebugMode |= btIDebugDraw::DBG_DrawFeaturesText; + else + mDebugMode &= ~btIDebugDraw::DBG_DrawFeaturesText; +} +//------------------------------------------------------------------------------------------------ +void DebugDrawer::setDrawContactPoints(bool enable) +{ + if (enable) + mDebugMode |= btIDebugDraw::DBG_DrawContactPoints; + else + mDebugMode &= ~btIDebugDraw::DBG_DrawContactPoints; +} +//------------------------------------------------------------------------------------------------ +void DebugDrawer::setNoDeactivation(bool enable) +{ + if (enable) + mDebugMode |= btIDebugDraw::DBG_NoDeactivation; + else + mDebugMode &= ~btIDebugDraw::DBG_NoDeactivation; +} +//------------------------------------------------------------------------------------------------ +void DebugDrawer::setNoHelpText(bool enable) +{ + if (enable) + mDebugMode |= btIDebugDraw::DBG_NoHelpText; + else + mDebugMode &= ~btIDebugDraw::DBG_NoHelpText; +} +//------------------------------------------------------------------------------------------------ +void DebugDrawer::setDrawText(bool enable) +{ + if (enable) + mDebugMode |= btIDebugDraw::DBG_DrawText; + else + mDebugMode &= ~btIDebugDraw::DBG_DrawText; +} +//------------------------------------------------------------------------------------------------ +void DebugDrawer::setProfileTimings(bool enable) +{ + if (enable) + mDebugMode |= btIDebugDraw::DBG_ProfileTimings; + else + mDebugMode &= ~btIDebugDraw::DBG_ProfileTimings; +} +//------------------------------------------------------------------------------------------------ +void DebugDrawer::setEnableSatComparison(bool enable) +{ + if (enable) + mDebugMode |= btIDebugDraw::DBG_EnableSatComparison; + else + mDebugMode &= ~btIDebugDraw::DBG_EnableSatComparison; +} +//------------------------------------------------------------------------------------------------ +void DebugDrawer::setDisableBulletLCP (bool enable) +{ + if (enable) + mDebugMode |= btIDebugDraw::DBG_DisableBulletLCP ; + else + mDebugMode &= ~btIDebugDraw::DBG_DisableBulletLCP ; +} +//------------------------------------------------------------------------------------------------ +void DebugDrawer::setEnableCCD(bool enable) +{ + if (enable) + mDebugMode |= btIDebugDraw::DBG_EnableCCD; + else + mDebugMode &= ~btIDebugDraw::DBG_EnableCCD; +} +//------------------------------------------------------------------------------------------------ +void DebugDrawer::drawAabb(const btVector3& from,const btVector3& to,const btVector3& color) +{ + if (mDebugMode & btIDebugDraw::DBG_DrawAabb) + { + drawAabb (BtOgreConverter::to(from), BtOgreConverter::to(to), BtOgreConverter::to (color)); + } +} +//------------------------------------------------------------------------------------------------ +void DebugDrawer::drawLine(const btVector3& from,const btVector3& to,const btVector3& color) +{ + if (mDebugMode > 0) + { + drawLine (BtOgreConverter::to(from), BtOgreConverter::to(to), BtOgreConverter::to (color)); + } +} +//------------------------------------------------------------------------------------------------ +void DebugDrawer::drawContactPoint(const btVector3& PointOnB,const btVector3& normalOnB, + btScalar distance,int lifeTime,const btVector3& color) +{ + if (mDebugMode & btIDebugDraw::DBG_DrawContactPoints) + { + // + } +} +//------------------------------------------------------------------------------------------------ +void DebugDrawer::drawAabb (const Ogre::Vector3& from,const Ogre::Vector3& to,const Ogre::Vector3& color) +{ + if (mDebugMode & btIDebugDraw::DBG_DrawAabb) + { + Vector3 halfExtents = (to-from)* 0.5f; + Vector3 center = (to+from) *0.5f; + int i,j; + + Vector3 edgecoord(1.f,1.f,1.f),pa,pb; + for (i=0;i<4;i++) + { + for (j=0;j<3;j++) + { + pa = Vector3(edgecoord[0]*halfExtents[0], edgecoord[1]*halfExtents[1], + edgecoord[2]*halfExtents[2]); + pa+=center; + + int othercoord = j%3; + edgecoord[othercoord]*=-1.f; + pb = Vector3(edgecoord[0]*halfExtents[0], edgecoord[1]*halfExtents[1], + edgecoord[2]*halfExtents[2]); + pb+=center; + + drawLine(pa,pb,color); + } + edgecoord = Vector3(-1.f,-1.f,-1.f); + if (i<3) + edgecoord[i]*=-1.f; + } + } +} +//------------------------------------------------------------------------------------------------ +void DebugDrawer::drawLine(const Ogre::Vector3& from,const Ogre::Vector3& to,const Ogre::Vector3& color) +{ + if (mDebugMode > 0) + { + addLine (from, to); + } +} +//------------------------------------------------------------------------------------------------ +void DebugDrawer::drawContactPoint(const Ogre::Vector3& PointOnB,const Ogre::Vector3& normalOnB, + Real distance,int lifeTime,const Ogre::Vector3& color) +{ + if (mDebugMode & btIDebugDraw::DBG_DrawContactPoints) + { + + } + //... +} +//------------------------------------------------------------------------------------------------ + Added: trunk/python-ogre/ThirdParty/ogrebullet/Collisions/Debug/OgreBulletCollisionsDebugDrawer.h =================================================================== --- trunk/python-ogre/ThirdParty/ogrebullet/Collisions/Debug/OgreBulletCollisionsDebugDrawer.h (rev 0) +++ trunk/python-ogre/ThirdParty/ogrebullet/Collisions/Debug/OgreBulletCollisionsDebugDrawer.h 2007-10-18 05:11:08 UTC (rev 436) @@ -0,0 +1,88 @@ +/*************************************************************************** + +This source file is part of OGREBULLET +(Object-oriented Graphics Rendering Engine Bullet Wrapper) +For the latest info, see http://www.ogre3d.org/phpBB2addons/viewforum.php?f=10 + +Copyright (c) 2007 tua...@gm... + + + +This program is free software; you can redistribute it and/or modify it under +the terms of the GNU Lesser General Public License as published by the Free Software +Foundation; either version 2 of the License, or (at your option) any later +version. + +This program is distributed in the hope that it will be useful, but WITHOUT +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License along with +this program; if not, write to the Free Software Foundation, Inc., 59 Temple +Place - Suite 330, Boston, MA 02111-1307, USA, or go to +http://www.gnu.org/copyleft/lesser.txt. +----------------------------------------------------------------------------- +*/ +#ifndef _OgreBulletCollisions_DebugDrawer_H_ +#define _OgreBulletCollisions_DebugDrawer_H_ + +#include "OgreBulletCollisionsPreRequisites.h" + +#include "Debug/OgreBulletCollisionsDebugLines.h" + +namespace OgreBulletCollisions +{ + //------------------------------------------------------------------------------------------------ + class DebugDrawer : public DebugLines, public btIDebugDraw + { + public: + DebugDrawer(); + virtual ~DebugDrawer(); + + + virtual void setDebugMode(int mode){mDebugMode = mode;}; + virtual int getDebugMode() const { return mDebugMode;}; + + virtual void drawLine(const btVector3& from,const btVector3& to,const btVector3& color); + virtual void drawContactPoint(const btVector3& PointOnB,const btVector3& normalOnB, + btScalar distance,int lifeTime,const btVector3& color); + + void drawAabb(const Ogre::Vector3& from,const Ogre::Vector3& to,const Ogre::Vector3& color); + void drawLine(const Ogre::Vector3& from,const Ogre::Vector3& to,const Ogre::Vector3& color); + void drawContactPoint(const Ogre::Vector3& PointOnB,const Ogre::Vector3& normalOnB, + Ogre::Real distance,int lifeTime,const Ogre::Vector3& color); + + void setDrawAabb(bool enable); + void setDrawWireframe(bool enable); + void setDrawFeaturesText(bool enable); + void setDrawContactPoints(bool enable); + void setNoDeactivation(bool enable); + void setNoHelpText(bool enable); + void setDrawText(bool enable); + void setProfileTimings(bool enable); + void setEnableSatComparison(bool enable); + void setDisableBulletLCP (bool enable); + void setEnableCCD(bool enable); + + bool doesDrawAabb () const; + bool doesDrawWireframe () const; + bool doesDrawFeaturesText () const; + bool doesDrawContactPoints () const; + bool doesNoDeactivation () const; + bool doesNoHelpText () const; + bool doesDrawText () const; + bool doesProfileTimings () const; + bool doesEnableSatComparison () const; + bool doesDisableBulletLCP () const; + bool doesEnableCCD () const; + + void drawAabb(const btVector3& from,const btVector3& to,const btVector3& color); + + void reportErrorWarning(const char* warningString); + protected: + int mDebugMode; + }; +} + +#endif //_OgreBulletCollisions_DebugDrawer_H_ + Added: trunk/python-ogre/ThirdParty/ogrebullet/Collisions/Debug/OgreBulletCollisionsDebugLines.cpp =================================================================== --- trunk/python-ogre/ThirdParty/ogrebullet/Collisions/Debug/OgreBulletCollisionsDebugLines.cpp (rev 0) +++ trunk/python-ogre/ThirdParty/ogrebullet/Collisions/Debug/OgreBulletCollisionsDebugLines.cpp 2007-10-18 05:11:08 UTC (rev 436) @@ -0,0 +1,162 @@ +/*************************************************************************** + +This source file is part of OGREBULLET +(Object-oriented Graphics Rendering Engine Bullet Wrapper) +For the latest info, see http://www.ogre3d.org/phpBB2addons/viewforum.php?f=10 + +Copyright (c) 2007 tua...@gm... + + + +This program is free software; you can redistribute it and/or modify it under +the terms of the GNU Lesser General Public License as published by the Free Software +Foundation; either version 2 of the License, or (at your option) any later +version. + +This program is distributed in the hope that it will be useful, but WITHOUT +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License along with +this program; if not, write to the Free Software Foundation, Inc., 59 Temple +Place - Suite 330, Boston, MA 02111-1307, USA, or go to +http://www.gnu.org/copyleft/lesser.txt. +----------------------------------------------------------------------------- +*/ + +#include "OgreBulletCollisions.h" + +#include "Debug/OgreBulletCollisionsDebugLines.h" +#include "Utils/OgreBulletConverter.h" + +using namespace OgreBulletCollisions; +using namespace Ogre; + +//------------------------------------------------------------------------------------------------ +bool DebugLines::_materials_created = false; +//------------------------------------------------------------------------------------------------ +DebugLines::DebugLines() : SimpleRenderable() +{ + mRenderOp.vertexData = new Ogre::VertexData(); + _drawn = false; + + if (!_materials_created) + { + MaterialPtr red = MaterialManager::getSingleton().create("OgreBulletCollisionsDebugLines/Disabled","OgreBulletCollisions"); + MaterialPtr green = MaterialManager::getSingleton().create("OgreBulletCollisionsDebugLines/Enabled","OgreBulletCollisions"); + MaterialPtr blue = MaterialManager::getSingleton().create("OgreBulletCollisionsDebugLines/Static","OgreBulletCollisions"); + + red->setReceiveShadows(false); + red->getTechnique(0)->setLightingEnabled(true); + red->getTechnique(0)->getPass(0)->setSelfIllumination(1,0,0); + + green->setReceiveShadows(false); + green->getTechnique(0)->setLightingEnabled(true); + green->getTechnique(0)->getPass(0)->setSelfIllumination(0,1,0); + + blue->setReceiveShadows(false); + blue->getTechnique(0)->setLightingEnabled(true); + blue->getTechnique(0)->getPass(0)->setSelfIllumination(0,0,1); + + _materials_created = true; + } + setCastShadows (false); + this->setMaterial("OgreBulletCollisionsDebugLines/Enabled"); +} + + +//------------------------------------------------------------------------------------------------ +void DebugLines::clear() +{ + if (_drawn) + { + _drawn = false; + _points.clear(); + delete mRenderOp.vertexData; + + mRenderOp.vertexData = new Ogre::VertexData(); + } +} +//-----... [truncated message content] |
From: <and...@us...> - 2007-12-02 06:20:46
|
Revision: 482 http://python-ogre.svn.sourceforge.net/python-ogre/?rev=482&view=rev Author: andy_miller Date: 2007-12-01 22:20:51 -0800 (Sat, 01 Dec 2007) Log Message: ----------- Missing files... Added Paths: ----------- trunk/python-ogre/ThirdParty/betagui/old/ trunk/python-ogre/ThirdParty/betagui/old/BetaGUI.h trunk/python-ogre/ThirdParty/betagui/old/BetaGui.cpp trunk/python-ogre/ThirdParty/betagui/old/BetaGui.py trunk/python-ogre/ThirdParty/caelum/CameraBoundElement.cpp trunk/python-ogre/ThirdParty/ptypes/ trunk/python-ogre/ThirdParty/ptypes/LICENSE trunk/python-ogre/ThirdParty/ptypes/Makefile trunk/python-ogre/ThirdParty/ptypes/doc/ trunk/python-ogre/ThirdParty/ptypes/doc/async.examples.html trunk/python-ogre/ThirdParty/ptypes/doc/async.html trunk/python-ogre/ThirdParty/ptypes/doc/async.jobqueue.html trunk/python-ogre/ThirdParty/ptypes/doc/async.message.html trunk/python-ogre/ThirdParty/ptypes/doc/async.msgqueue.html trunk/python-ogre/ThirdParty/ptypes/doc/async.mutex.html trunk/python-ogre/ThirdParty/ptypes/doc/async.rwlock.html trunk/python-ogre/ThirdParty/ptypes/doc/async.semaphore.html trunk/python-ogre/ThirdParty/ptypes/doc/async.thread.html trunk/python-ogre/ThirdParty/ptypes/doc/async.trigger.html trunk/python-ogre/ThirdParty/ptypes/doc/async.utils.html trunk/python-ogre/ThirdParty/ptypes/doc/basic.html trunk/python-ogre/ThirdParty/ptypes/doc/changes.html trunk/python-ogre/ThirdParty/ptypes/doc/compiling.html trunk/python-ogre/ThirdParty/ptypes/doc/criterrors.html trunk/python-ogre/ThirdParty/ptypes/doc/cset.constructors.html trunk/python-ogre/ThirdParty/ptypes/doc/cset.html trunk/python-ogre/ThirdParty/ptypes/doc/cset.manipulation.html trunk/python-ogre/ThirdParty/ptypes/doc/cset.operators.html trunk/python-ogre/ThirdParty/ptypes/doc/deploying.html trunk/python-ogre/ThirdParty/ptypes/doc/freshmeat-logo.png trunk/python-ogre/ThirdParty/ptypes/doc/htsrc.html trunk/python-ogre/ThirdParty/ptypes/doc/include/ trunk/python-ogre/ThirdParty/ptypes/doc/include/pasync.h.html trunk/python-ogre/ThirdParty/ptypes/doc/include/pinet.h.html trunk/python-ogre/ThirdParty/ptypes/doc/include/pport.h.html trunk/python-ogre/ThirdParty/ptypes/doc/include/pstreams.h.html trunk/python-ogre/ThirdParty/ptypes/doc/include/ptime.h.html trunk/python-ogre/ThirdParty/ptypes/doc/include/ptypes.h.html trunk/python-ogre/ThirdParty/ptypes/doc/index.html trunk/python-ogre/ThirdParty/ptypes/doc/inet.examples.html trunk/python-ogre/ThirdParty/ptypes/doc/inet.html trunk/python-ogre/ThirdParty/ptypes/doc/inet.ipmessage.html trunk/python-ogre/ThirdParty/ptypes/doc/inet.ipmsgserver.html trunk/python-ogre/ThirdParty/ptypes/doc/inet.ipstmserver.html trunk/python-ogre/ThirdParty/ptypes/doc/inet.ipstream.html trunk/python-ogre/ThirdParty/ptypes/doc/inet.utils.html trunk/python-ogre/ThirdParty/ptypes/doc/intro.html trunk/python-ogre/ThirdParty/ptypes/doc/lists.html trunk/python-ogre/ThirdParty/ptypes/doc/lists.textmap.html trunk/python-ogre/ThirdParty/ptypes/doc/lists.tobjlist.html trunk/python-ogre/ThirdParty/ptypes/doc/lists.tpodlist.html trunk/python-ogre/ThirdParty/ptypes/doc/lists.tstrlist.html trunk/python-ogre/ThirdParty/ptypes/doc/portability.html trunk/python-ogre/ThirdParty/ptypes/doc/ref.html trunk/python-ogre/ThirdParty/ptypes/doc/ref.tmpl.html trunk/python-ogre/ThirdParty/ptypes/doc/source-forge-logo.png trunk/python-ogre/ThirdParty/ptypes/doc/streams.errors.html trunk/python-ogre/ThirdParty/ptypes/doc/streams.examples.html trunk/python-ogre/ThirdParty/ptypes/doc/streams.html trunk/python-ogre/ThirdParty/ptypes/doc/streams.infile.html trunk/python-ogre/ThirdParty/ptypes/doc/streams.inmem.html trunk/python-ogre/ThirdParty/ptypes/doc/streams.instm.html trunk/python-ogre/ThirdParty/ptypes/doc/streams.iobase.html trunk/python-ogre/ThirdParty/ptypes/doc/streams.logfile.html trunk/python-ogre/ThirdParty/ptypes/doc/streams.md5.html trunk/python-ogre/ThirdParty/ptypes/doc/streams.namedpipe.html trunk/python-ogre/ThirdParty/ptypes/doc/streams.npserver.html trunk/python-ogre/ThirdParty/ptypes/doc/streams.outfile.html trunk/python-ogre/ThirdParty/ptypes/doc/streams.outmem.html trunk/python-ogre/ThirdParty/ptypes/doc/streams.outstm.html trunk/python-ogre/ThirdParty/ptypes/doc/streams.stdio.html trunk/python-ogre/ThirdParty/ptypes/doc/string.constructors.html trunk/python-ogre/ThirdParty/ptypes/doc/string.conversion.html trunk/python-ogre/ThirdParty/ptypes/doc/string.html trunk/python-ogre/ThirdParty/ptypes/doc/string.manipulation.html trunk/python-ogre/ThirdParty/ptypes/doc/string.operators.html trunk/python-ogre/ThirdParty/ptypes/doc/string.typecasts.html trunk/python-ogre/ThirdParty/ptypes/doc/styles.css trunk/python-ogre/ThirdParty/ptypes/doc/time.calendar.html trunk/python-ogre/ThirdParty/ptypes/doc/time.datetime.html trunk/python-ogre/ThirdParty/ptypes/doc/time.html trunk/python-ogre/ThirdParty/ptypes/doc/time.time.html trunk/python-ogre/ThirdParty/ptypes/doc/title-21.png trunk/python-ogre/ThirdParty/ptypes/doc/unit.html trunk/python-ogre/ThirdParty/ptypes/doc/unknown.html trunk/python-ogre/ThirdParty/ptypes/doc/variant.arrays.html trunk/python-ogre/ThirdParty/ptypes/doc/variant.html trunk/python-ogre/ThirdParty/ptypes/doc/variant.objrefs.html trunk/python-ogre/ThirdParty/ptypes/doc/variant.typecasts.html trunk/python-ogre/ThirdParty/ptypes/doc/variant.utils.html trunk/python-ogre/ThirdParty/ptypes/doc/wshare.html trunk/python-ogre/ThirdParty/ptypes/include/ trunk/python-ogre/ThirdParty/ptypes/include/pasync.h trunk/python-ogre/ThirdParty/ptypes/include/pinet.h trunk/python-ogre/ThirdParty/ptypes/include/pport.h trunk/python-ogre/ThirdParty/ptypes/include/pstreams.h trunk/python-ogre/ThirdParty/ptypes/include/ptime.h trunk/python-ogre/ThirdParty/ptypes/include/ptypes/ trunk/python-ogre/ThirdParty/ptypes/include/ptypes/pasync.h trunk/python-ogre/ThirdParty/ptypes/include/ptypes/pinet.h trunk/python-ogre/ThirdParty/ptypes/include/ptypes/pport.h trunk/python-ogre/ThirdParty/ptypes/include/ptypes/pstreams.h trunk/python-ogre/ThirdParty/ptypes/include/ptypes/ptime.h trunk/python-ogre/ThirdParty/ptypes/include/ptypes/ptypes.h trunk/python-ogre/ThirdParty/ptypes/include/ptypes.h trunk/python-ogre/ThirdParty/ptypes/index.html trunk/python-ogre/ThirdParty/ptypes/src/ trunk/python-ogre/ThirdParty/ptypes/src/Makefile.Darwin trunk/python-ogre/ThirdParty/ptypes/src/Makefile.FreeBSD trunk/python-ogre/ThirdParty/ptypes/src/Makefile.HP-UX trunk/python-ogre/ThirdParty/ptypes/src/Makefile.Linux trunk/python-ogre/ThirdParty/ptypes/src/Makefile.SunOS trunk/python-ogre/ThirdParty/ptypes/src/Makefile.common trunk/python-ogre/ThirdParty/ptypes/src/pasync.cxx trunk/python-ogre/ThirdParty/ptypes/src/patomic.cxx trunk/python-ogre/ThirdParty/ptypes/src/patomic.sparc.s trunk/python-ogre/ThirdParty/ptypes/src/pcomponent.cxx trunk/python-ogre/ThirdParty/ptypes/src/pcset.cxx trunk/python-ogre/ThirdParty/ptypes/src/pcsetdbg.cxx trunk/python-ogre/ThirdParty/ptypes/src/pexcept.cxx trunk/python-ogre/ThirdParty/ptypes/src/pfatal.cxx trunk/python-ogre/ThirdParty/ptypes/src/pfdxstm.cxx trunk/python-ogre/ThirdParty/ptypes/src/pinfile.cxx trunk/python-ogre/ThirdParty/ptypes/src/pinfilter.cxx trunk/python-ogre/ThirdParty/ptypes/src/pinmem.cxx trunk/python-ogre/ThirdParty/ptypes/src/pinstm.cxx trunk/python-ogre/ThirdParty/ptypes/src/pintee.cxx trunk/python-ogre/ThirdParty/ptypes/src/piobase.cxx trunk/python-ogre/ThirdParty/ptypes/src/pipbase.cxx trunk/python-ogre/ThirdParty/ptypes/src/pipmsg.cxx trunk/python-ogre/ThirdParty/ptypes/src/pipmsgsv.cxx trunk/python-ogre/ThirdParty/ptypes/src/pipstm.cxx trunk/python-ogre/ThirdParty/ptypes/src/pipstmsv.cxx trunk/python-ogre/ThirdParty/ptypes/src/pipsvbase.cxx trunk/python-ogre/ThirdParty/ptypes/src/pmd5.cxx trunk/python-ogre/ThirdParty/ptypes/src/pmem.cxx trunk/python-ogre/ThirdParty/ptypes/src/pmsgq.cxx trunk/python-ogre/ThirdParty/ptypes/src/pmtxtable.cxx trunk/python-ogre/ThirdParty/ptypes/src/pnpipe.cxx trunk/python-ogre/ThirdParty/ptypes/src/pnpserver.cxx trunk/python-ogre/ThirdParty/ptypes/src/pobjlist.cxx trunk/python-ogre/ThirdParty/ptypes/src/poutfile.cxx trunk/python-ogre/ThirdParty/ptypes/src/poutfilter.cxx trunk/python-ogre/ThirdParty/ptypes/src/poutmem.cxx trunk/python-ogre/ThirdParty/ptypes/src/poutstm.cxx trunk/python-ogre/ThirdParty/ptypes/src/ppipe.cxx trunk/python-ogre/ThirdParty/ptypes/src/ppodlist.cxx trunk/python-ogre/ThirdParty/ptypes/src/pputf.cxx trunk/python-ogre/ThirdParty/ptypes/src/prwlock.cxx trunk/python-ogre/ThirdParty/ptypes/src/psemaphore.cxx trunk/python-ogre/ThirdParty/ptypes/src/pstdio.cxx trunk/python-ogre/ThirdParty/ptypes/src/pstrcase.cxx trunk/python-ogre/ThirdParty/ptypes/src/pstrconv.cxx trunk/python-ogre/ThirdParty/ptypes/src/pstring.cxx trunk/python-ogre/ThirdParty/ptypes/src/pstrlist.cxx trunk/python-ogre/ThirdParty/ptypes/src/pstrmanip.cxx trunk/python-ogre/ThirdParty/ptypes/src/pstrtoi.cxx trunk/python-ogre/ThirdParty/ptypes/src/pstrutils.cxx trunk/python-ogre/ThirdParty/ptypes/src/ptextmap.cxx trunk/python-ogre/ThirdParty/ptypes/src/pthread.cxx trunk/python-ogre/ThirdParty/ptypes/src/ptime.cxx trunk/python-ogre/ThirdParty/ptypes/src/ptimedsem.cxx trunk/python-ogre/ThirdParty/ptypes/src/ptrigger.cxx trunk/python-ogre/ThirdParty/ptypes/src/ptypes_test.cxx trunk/python-ogre/ThirdParty/ptypes/src/punit.cxx trunk/python-ogre/ThirdParty/ptypes/src/punknown.cxx trunk/python-ogre/ThirdParty/ptypes/src/pvariant.cxx trunk/python-ogre/ThirdParty/ptypes/src/pversion.cxx trunk/python-ogre/ThirdParty/ptypes/win32/ trunk/python-ogre/ThirdParty/ptypes/win32/PTypes.sln trunk/python-ogre/ThirdParty/ptypes/win32/PTypes_DLL.vcproj trunk/python-ogre/ThirdParty/ptypes/win32/PTypes_Lib.vcproj trunk/python-ogre/ThirdParty/ptypes/win32/PTypes_Lib_ST.vcproj trunk/python-ogre/ThirdParty/ptypes/win32/PTypes_Test.vcproj trunk/python-ogre/ThirdParty/ptypes/win32/PTypes_Test_ST.vcproj trunk/python-ogre/ThirdParty/ptypes/win32/dll_version.rc trunk/python-ogre/ThirdParty/ptypes/win32/resource.h trunk/python-ogre/ThirdParty/ptypes/win32/wshare.vcproj trunk/python-ogre/ThirdParty/ptypes/wshare/ trunk/python-ogre/ThirdParty/ptypes/wshare/Makefile.Darwin trunk/python-ogre/ThirdParty/ptypes/wshare/Makefile.FreeBSD trunk/python-ogre/ThirdParty/ptypes/wshare/Makefile.HP-UX trunk/python-ogre/ThirdParty/ptypes/wshare/Makefile.Linux trunk/python-ogre/ThirdParty/ptypes/wshare/Makefile.SunOS trunk/python-ogre/ThirdParty/ptypes/wshare/Makefile.common trunk/python-ogre/ThirdParty/ptypes/wshare/clients.cxx trunk/python-ogre/ThirdParty/ptypes/wshare/clients.h trunk/python-ogre/ThirdParty/ptypes/wshare/config.cxx trunk/python-ogre/ThirdParty/ptypes/wshare/config.h trunk/python-ogre/ThirdParty/ptypes/wshare/log.cxx trunk/python-ogre/ThirdParty/ptypes/wshare/log.h trunk/python-ogre/ThirdParty/ptypes/wshare/mimetable.awk trunk/python-ogre/ThirdParty/ptypes/wshare/mimetable.cxx trunk/python-ogre/ThirdParty/ptypes/wshare/mod_about.cxx trunk/python-ogre/ThirdParty/ptypes/wshare/mod_file.cxx trunk/python-ogre/ThirdParty/ptypes/wshare/mod_wstat.cxx trunk/python-ogre/ThirdParty/ptypes/wshare/modules.cxx trunk/python-ogre/ThirdParty/ptypes/wshare/modules.h trunk/python-ogre/ThirdParty/ptypes/wshare/request.cxx trunk/python-ogre/ThirdParty/ptypes/wshare/request.h trunk/python-ogre/ThirdParty/ptypes/wshare/sysutils.cxx trunk/python-ogre/ThirdParty/ptypes/wshare/sysutils.h trunk/python-ogre/ThirdParty/ptypes/wshare/urlutils.cxx trunk/python-ogre/ThirdParty/ptypes/wshare/urlutils.h trunk/python-ogre/ThirdParty/ptypes/wshare/utils.cxx trunk/python-ogre/ThirdParty/ptypes/wshare/utils.h trunk/python-ogre/ThirdParty/ptypes/wshare/wshare.cxx trunk/python-ogre/ThirdParty/quickgui/QuickGUICheckBox.cpp trunk/python-ogre/ThirdParty/quickgui/QuickGUICheckBox.h trunk/python-ogre/ThirdParty/quickgui/QuickGUIPrecompiledHeaders.cpp trunk/python-ogre/ThirdParty/quickgui/QuickGUIPrecompiledHeaders.h trunk/python-ogre/ThirdParty/quickgui/QuickGUIPrerequisites.h trunk/python-ogre/ThirdParty/quickgui/QuickGUISkinSetManager.cpp trunk/python-ogre/ThirdParty/quickgui/QuickGUISkinSetManager.h trunk/python-ogre/ThirdParty/quickgui/QuickGUITextHelper.cpp trunk/python-ogre/ThirdParty/quickgui/QuickGUITextHelper.h Added: trunk/python-ogre/ThirdParty/betagui/old/BetaGUI.h =================================================================== --- trunk/python-ogre/ThirdParty/betagui/old/BetaGUI.h (rev 0) +++ trunk/python-ogre/ThirdParty/betagui/old/BetaGUI.h 2007-12-02 06:20:51 UTC (rev 482) @@ -0,0 +1,638 @@ +#ifndef BETAGUI_H +#define BETAGUI_H + +/// Betajaen's GUI 016 Uncompressed +/// Written by Robin "Betajaen" Southern 07-Nov-2006, http://www.ogre3d.org/wiki/index.php/BetaGUI +/// This code is under the Whatevar! licence. Do what you want; but keep the original copyright header. + +#include "Ogre.h" +#include "OgreTextAreaOverlayElement.h" + +#include <iostream> + +using namespace Ogre; +using namespace std; + +namespace BetaGUI +{ + //------------------------------------------------------------------------------------------------ + class GUI; + + class Widget; + class Window; + + class Button; + class BoolButton; + class MenuButton; + class RealButton; + + class StaticText; + class TextInput; + + class Callback; + + class Effect; + class AlphaEffect; + class MoveEffect; + class SizeEffect; + + //------------------------------------------------------------------------------------------------ + enum WindowFeatureType + { + WFT_NONE = 0, + WFT_MOVE , + WFT_RESIZE , + WFT_RESIZE_AND_MOVE + }; + //------------------------------------------------------------------------------------------------ + enum WindowPlacementType + { + WPT_NONE = 0, + WPT_VERTICAL , + WPT_HORIZONTAL + }; + //------------------------------------------------------------------------------------------------ + enum WindowActivity + { + WA_NONE = 0, + WA_MOVE , + WA_RESIZE , + WA_PRESS + }; + //------------------------------------------------------------------------------------------------ + class GUI + { + public: + + friend class Window; + + friend class Button; + + friend class MenuButton; + friend class BoolButton; + friend class RealButton; + + friend class StaticText; + friend class TextInput; + + GUI(const Ogre::String &baseOverlay, const Ogre::String &font, int fontSize, Ogre::RenderWindow *win); + + ~GUI(); + + void sortZOrder() ; + + void setZRangeOrder(int nearZ, int FarZ); + + bool injectMouse(int x, int y, bool LMB); + bool injectMouse(float x, float y, bool LMB); + + bool injectKey(const Ogre::String &key, int x, int y); + + void injectBackspace(int x, int y); + + Window* createWindow( + const Ogre::Vector4 &Dimensions, + const Ogre::String &Material, + WindowFeatureType type, + const Ogre::String &caption = ""); + + void destroyWindow(Window *window) { + mNextWindowToDestroy=window; + } + Ogre::OverlayContainer* createOverlay(const Ogre::String &name, + const Ogre::Vector2 &position, + const Ogre::Vector2 &dimensions, + const Ogre::String &material = "", + const Ogre::String &caption = ""); + + Ogre::OverlayContainer* createMousePointer(Ogre::Vector2 dimensions, + const Ogre::String &material); + + + + Window *addMenuWindow(const Ogre::Vector2 dimensions); + + void update(Ogre::Real timeElapsed); + void addEffect (Effect* e); + Ogre::Real getUpTime() const {return mUpTime;} + + protected: + //Ogre::Overlay* mGuiOverlay; // Main sheet overlay + std::vector<Window*> mWindows; // Windows + Window * mNextWindowToDestroy; // Window to destroy + Ogre::OverlayContainer* mMousePointerOverlay; // Mouse Pointer Overlay + + Ogre::String mFont; + int mFontSize; + int mWindowCount, mButtonCount, mTextCaptionCount, mTextCaptionCountArea, mButtonCountTextArea; + + + Ogre::uint mDragWindowAction; + + int mDragX, mDragY; + int mDragWindowX, mDragWindowY; + + Window * mActiveDraggedWindow; + TextInput * mActiveTextInput; + Button * mActiveButton; + + Ogre::Vector2 mNextMenuWindowPos; + Window * mMenuWindow; + Ogre::RenderWindow * mRenderWindow; + + std::list<Effect*> mActiveEffects; + + Ogre::Real mUpTime; + Ogre::String mName; + int mFarZ; + int mNearZ; + }; + //------------------------------------------------------------------------------------------------ + class Widget + { + public: + + friend class GUI; + + Widget(const Ogre::Vector4 &Dimension, + const Ogre::String &materialNameNormal, + bool hasOverState = true, + bool hasActiveState = true); + + virtual ~Widget(); + + Ogre::Vector2 getPosition() const{return Ogre::Vector2(mPosX,mPosY);} + Ogre::Vector2 getSize() const {return Ogre::Vector2(mWidth,mHeight); } + + void setPosition(const Ogre::Vector2 &position); + void setSize(const Ogre::Vector2 &size); + + virtual void show(){setAlpha (1.0, true);}; + virtual void hide(){setAlpha (0.0, true);}; + + virtual bool isVisible() {return mMainOverlay->isVisible ();}; + + virtual void over(const bool a); + virtual void activate(const bool a); + + virtual void adjustSizeToContent(); + + virtual void setPosition(float X,float Y); + virtual void setPosition(int X,int Y); + virtual void setSize(int X,int Y); + virtual void setAlpha(const Ogre::Real alpha, const bool isContainer); + virtual void setMaterialBlendFactor(const Ogre::Real blendFactor, const bool isContainer); + + // mUnderEffect getter + bool getUnderEffect() const { return mUnderEffect; } + // mUnderEffect setter + void setUnderEffect(bool val); + + // mOver getter + bool getOver() const { return mOver; } + // mOver setter + void setOver(bool val) { mOver = val; } + // mActive getter + bool getActive() const { return mActive; } + // mActive setter + void setActive(bool val) { mActive = val; } + + // mActive setter + void setMainMaterial(const Ogre::String& mat) { + mMainOverlay->setMaterialName(mat); + } + + void setCaptionMaterial(const Ogre::String& mat) { + mCaptionOverlay->setMaterialName(mat); + } + + void setText(const Ogre::String& t) { + mCaptionOverlay->setCaption(t); + } + + Ogre::String getText() const { + return mCaptionOverlay->getCaption(); + } + + protected: + //------------------------------------------------------------------------------------------------ + inline bool isOut (const int x, const int y) const + { + return (x < mPosX) || (y < mPosY) + || (x > (mPosX + mWidth)) || + (y > (mPosY + mHeight)); + } + //------------------------------------------------------------------------------------------------ + inline bool isIn (const int x, const int y) const + { + return (x >= mPosX) && (y >= mPosY) + && (x <= (mPosX + mWidth)) && + (y <= (mPosY + mHeight)); + } + + void instantiateMaterial(Ogre::OverlayContainer * const oc, bool reset) const; + void setOverlayAlpha(Ogre::OverlayContainer * const oc, const Ogre::Real alpha) const; + void setOverlayMaterialBlendFactor(Ogre::OverlayContainer * const oc, const Ogre::Real blendFactor) const; + + int mPosX, mPosY, mWidth, mHeight; + + std::vector<Widget *> mChildren; + Ogre::OverlayContainer* mMainOverlay; + Ogre::OverlayContainer* mCaptionOverlay; + Ogre::String mMaterialName; + + bool mHasMaterial; + bool mHasOverState; + bool mHasActiveState; + bool mUnderEffect; + bool mOver; + bool mActive; + }; + //------------------------------------------------------------------------------------------------ + class Window : public Widget + { + public: + friend class Button; + friend class TextInput; + friend class StaticText; + friend class GUI; + + Window(const Ogre::Vector4 &Dimensions, const Ogre::String &Material, WindowFeatureType type, const Ogre::String &caption, GUI *gui); + virtual ~Window(); + + Button* createButton(const Ogre::Vector4 &Dimensions, const Ogre::String &Material, + const Ogre::String &Text, Callback callback); + + TextInput* createTextInput(const Ogre::Vector4 &Dimensions, const Ogre::String &Material, + const Ogre::String & Value, int length); + + StaticText* createStaticText(const Ogre::Vector4 &Dimensions, const Ogre::String &Text); + + void setSize(int X,int Y); + + MenuButton *addMenuButton(Window *target, const Ogre::String &label, WindowPlacementType wpt = WPT_NONE); + BoolButton *addBoolButton(bool value, const Ogre::String &label, WindowPlacementType wpt = WPT_NONE); + RealButton *addRealButton(Ogre::Real value, const Ogre::Vector4 &SliderMoves, const Ogre::String &label, WindowPlacementType wpt = WPT_NONE); + StaticText* addStaticText(const Ogre::String &label, WindowPlacementType wpt = WPT_NONE); + + Window *addMenuWindowTab(const Ogre::String &label, + bool titleBarWin = true, + WindowPlacementType wpt = WPT_VERTICAL); + + MenuButton* createMenuButton(const Ogre::Vector4 &D, const Ogre::String &M, const Ogre::String &T, Callback C, Window *t); + BoolButton* createBoolButton(const Ogre::Vector4 &D, const Ogre::String &M, const Ogre::String &T, Callback C, bool boolValue); + + RealButton *createRealButton(Ogre::Real value, + const Ogre::Vector4 &SliderMoves, + const Ogre::String &label, + const Ogre::Vector2 &pos); + + GUI* getGUI() const {return mGUI;} + + void setFadeOut(bool f){mFadeOut = f;} + void setZOrder(int zOrder){mGuiOverlay->setZOrder (zOrder);} + protected: + + + bool check(int x, int y, bool LMB); + bool checkKey(const Ogre::String &key, int x, int y); + + TextInput* mActiveTextInput; // Active TextInput + + Button + *mCloseButton, + *mResizerButton, + *mActiveButton, + *mTitleBarButton; // Resizer, ActiveButton, Title bar + + GUI *mGUI; // mGUI pointer + + std::vector<Button*> mButtons; // Buttons + std::vector<TextInput*> mTextInput; // TextInputs + + Ogre::Overlay *mGuiOverlay; + + void addWidget(const Widget * const w, WindowPlacementType wpt); + Ogre::Vector2 mNextWidgetPos; + WindowActivity mDragType; + + bool mFadeOut; + + }; + //------------------------------------------------------------------------------------------------ + class BetaGUIListener + { + public: + virtual void onButtonPress(Button*, unsigned char) = 0; + }; + //------------------------------------------------------------------------------------------------ + class Callback + { + public: + friend class Window; + friend class Button; + + Callback() { + mCallbackType=0; + } + + Callback( void(*functionPointer)(BetaGUI::Button*, bool) ) { + mCallbackType=1; + fp = functionPointer; + } + + Callback(BetaGUIListener *l){ + mCallbackType = 2; + mListener = l; + } + protected: + unsigned char mCallbackType; // Type of callback: 0 - None, 1 - FunctionPointer 2 - GUIListener, 3 - Move Window, 4 - Resize + void(*fp)(BetaGUI::Button*, bool); // Function pointer (if 1) + BetaGUIListener *mListener; // GuiListener (if 2) + }; + //------------------------------------------------------------------------------------------------ + class Button : public Widget + { + public: + friend class Window; + friend class GUI; + + Button(const Ogre::Vector4 &Dimensions, const Ogre::String &Material, + const Ogre::String &Text, Callback callback, Window *parent); + virtual ~Button() {} + + protected: + Callback mCallback; // Callback to use + }; + //------------------------------------------------------------------------------------------------ + class MenuButton : public Button + { + public: + MenuButton(const Ogre::Vector4 &Dimensions, const Ogre::String &Material, + const Ogre::String &Text, Callback callback, Window *parent, + Window *target) : + Button(Dimensions, Material, Text, callback, parent), + mTarget(target) + {}; + virtual ~MenuButton(){}; + protected: + void activate(const bool a) ; + + Window *mTarget; + }; + //------------------------------------------------------------------------------------------------ + class BoolButton : public Button + { + public: + BoolButton(const Ogre::Vector4 &Dimensions, const Ogre::String &Material, + const Ogre::String &Text, Callback callback, Window *parent, bool boolValue): + Button(Dimensions, Material, Text, callback, parent), + mBoolValue(boolValue) + {} + virtual ~BoolButton(){}; + + protected: + void activate(const bool a) ; + + bool mBoolValue; + }; + //------------------------------------------------------------------------------------------------ + class TextInput : public Widget + { + public: + friend class Window; + friend class GUI; + + TextInput(const Ogre::Vector4 &Dimensions, const Ogre::String &Material, + const Ogre::String &Value, unsigned int length, Window *parent); + virtual ~TextInput(){} + const Ogre::String &getValue() const {return mValueText;} + void setValue(const Ogre::String &v) {mCaptionOverlay->setCaption(mValueText = v);} + + protected: + unsigned int length; + Ogre::String mValueText;// MaterialName Normal, MaterialName Active + + }; + //------------------------------------------------------------------------------------------------ + class StaticText : public Widget + { + public: + friend class Window; + + StaticText(const Ogre::Vector4 &Dimensions, + const Ogre::String &Value, + Window *parent); + virtual ~StaticText(){} + + const Ogre::String &getValue() const + {return mValueText;} + + void setValue(const Ogre::String &v) + { + mCaptionOverlay->setCaption(mValueText = v); + mWidth = static_cast<int> (mValueText.size () * 7); + mParent->adjustSizeToContent (); + } + + protected: + + int length; + Ogre::String mValueText; + Window *mParent; + }; + //------------------------------------------------------------------------------------------------ + class RealButton : public BetaGUIListener, public Widget + { + public: + friend class Window; + + RealButton(BetaGUI::Window *window, + Ogre::Real value, + const Ogre::Vector4 &SliderMoves, + const Ogre::String &label, + const Ogre::Vector2 &pos); + + virtual ~RealButton(){}; + + Ogre::Real getValue() const {return mValue;} + + void setValue(const Ogre::Real v); + + void onButtonPress(BetaGUI::Button *ref, Ogre::uchar type); + protected: + + int length; + + BetaGUI::TextInput *mtextValueInput; + BetaGUI::Button *mForward, *mFastForward, *mRewind, *mFastRewind; + + Ogre::Real mValue; + Ogre::String mValueText; + + Ogre::Real mLowSlideUnit; + Ogre::Real mFastSlideUnit; + Ogre::Real mMinValue; + Ogre::Real mMaxValue; + + }; + //------------------------------------------------------------------------------------------------ + class Effect + { + public: + enum EffectInterpolatorType + { + EFFECT_LINEAR = 0, + EFFECT_LINEARX2, + EFFECT_LINEARX4, + EFFECT_SIN + }; + public: + Effect(Widget * const widget, const Ogre::Real duration, + const Ogre::Real startTime, const Ogre::Real currTime = 0, const bool repeat = false, + EffectInterpolatorType type = EFFECT_LINEARX4) : + mWidget(widget), + mStartTime(startTime), + mDuration(duration), + mRepeat(repeat), + mCurrTime(currTime), + mType(type) + { + assert (duration != 0); + } + virtual ~Effect(){}; + + virtual void updateValue(const Ogre::Real factor) = 0; + + bool update(Ogre::Real timeElapsed); + Ogre::Real getTimeFactor() ; + bool getTimeOrIsFinished(); +// Ogre::Real linearInterpolate(const Ogre::Real start, +// const Ogre::Real end, +// const Ogre::Real timeFactor) const; + Ogre::Real interpolate(const Ogre::Real start, + const Ogre::Real end, + const Ogre::Real timeFactor) const; + + protected: + Widget * const mWidget; + const Ogre::Real mStartTime; + const Ogre::Real mDuration; + const bool mRepeat; + + Ogre::Real mCurrTime; + const EffectInterpolatorType mType; + }; + //------------------------------------------------------------------------------------------------ + class AlphaEffect : public Effect + { + public: + + AlphaEffect(Widget * const widget, + const Ogre::Real duration, + const Ogre::Real startAlpha, + const Ogre::Real endAlpha, + const Ogre::Real startTime, + const Ogre::Real currTime = 0, + const bool repeat = false, + EffectInterpolatorType type = EFFECT_LINEARX4) : + Effect(widget, duration, startTime, currTime, repeat), + mStartAlpha(startAlpha), + mEndAlpha(endAlpha) + { + assert(mStartAlpha >= 0.0 && mStartAlpha <= 1.0); + assert(mEndAlpha >= 0.0 && mEndAlpha <= 1.0); + } + virtual ~AlphaEffect(){}; + + void updateValue(const Ogre::Real factor); + private: + const Ogre::Real mStartAlpha; + const Ogre::Real mEndAlpha; + }; + //------------------------------------------------------------------------------------------------ + class MoveEffect : public Effect + { + public: + MoveEffect(Widget * const widget, + const Ogre::Real duration, + const Ogre::Vector2 &startPosition, + const Ogre::Vector2 &endPosition, + const Ogre::Real startTime, + const Ogre::Real currTime = 0, + const bool repeat = false, + EffectInterpolatorType type = EFFECT_LINEARX4) : + Effect(widget, duration, startTime, currTime, repeat), + mStartPosition(startPosition), + mEndPosition(endPosition) + {} + virtual ~MoveEffect(){}; + void updateValue(const Ogre::Real factor); + + private: + const Ogre::Vector2 mStartPosition; + const Ogre::Vector2 mEndPosition; + }; + //------------------------------------------------------------------------------------------------ + class SizeEffect : public Effect + { + public: + SizeEffect(Widget * const widget, + const Ogre::Real duration, + const Ogre::Vector2 &startSize, + const Ogre::Vector2 &endSize, + const Ogre::Real startTime, + const Ogre::Real currTime = 0, + const bool repeat = false, + EffectInterpolatorType type = EFFECT_LINEARX4) : + Effect(widget, duration, startTime, currTime, repeat), + mStartSize(startSize), + mEndSize(endSize) + {} + virtual ~SizeEffect(){}; + void updateValue(const Ogre::Real factor); + + private: + const Ogre::Vector2 mStartSize; + const Ogre::Vector2 mEndSize; + }; + //------------------------------------------------------------------------------------------------ + class ActivateEffect : public Effect + { + public: + ActivateEffect(Widget * const widget, + const Ogre::Real duration, + const Ogre::Real startTime, + const Ogre::Real currTime = 0, + const bool repeat = false, + EffectInterpolatorType type = EFFECT_LINEARX4): + Effect(widget, duration, startTime, currTime, repeat) + {}; + virtual ~ActivateEffect(){}; + void updateValue(const Ogre::Real factor); + + }; + //------------------------------------------------------------------------------------------------ + class OverEffect : public Effect + { + public: + OverEffect(Widget * const widget, + const Ogre::Real duration, + const Ogre::Real startTime, + const Ogre::Real currTime = 0, + const bool repeat = false, + EffectInterpolatorType type = EFFECT_LINEARX4): + Effect(widget, duration, startTime, currTime, repeat) + {}; + virtual ~OverEffect(){}; + void updateValue(const Ogre::Real factor); + + }; + //------------------------------------------------------------------------------------------------ + + +} // End of Namespace + +/////////////////////////////////////////////////////////////////////////////// +#endif + Added: trunk/python-ogre/ThirdParty/betagui/old/BetaGui.cpp =================================================================== --- trunk/python-ogre/ThirdParty/betagui/old/BetaGui.cpp (rev 0) +++ trunk/python-ogre/ThirdParty/betagui/old/BetaGui.cpp 2007-12-02 06:20:51 UTC (rev 482) @@ -0,0 +1,1269 @@ +#include "BetaGUI.h" + +namespace BetaGUI +{ + //------------------------------------------------------------------------------------------------ + GUI::GUI(const String &baseOverlay, const String &font, int fontSize, RenderWindow *win) + :mNextWindowToDestroy(0), + mMousePointerOverlay(0), + mFont(font), + mFontSize(fontSize), + mWindowCount(0), + mButtonCount(0), + mTextCaptionCount(0), + mTextCaptionCountArea(0), + mButtonCountTextArea(0), + mNextMenuWindowPos(0,0), + mMenuWindow(0), + mRenderWindow(win), + mDragWindowAction(WA_NONE), + mActiveDraggedWindow(0), + mActiveTextInput(0), + mActiveButton(0), + mUpTime(0), + mFarZ(100), + mNearZ(101), + mName(baseOverlay) + { + + } + //------------------------------------------------------------------------------------------------ + GUI::~GUI() + { + for(std::vector<Window*>::iterator i=mWindows.begin();i!=mWindows.end();++i) + { + delete (*i); + } + + std::list<Effect*>::iterator itEffect = mActiveEffects.begin(); + while (itEffect != mActiveEffects.end()) + { + delete *itEffect; + ++itEffect; + } + } + //------------------------------------------------------------------------------------------------ + void GUI::setZRangeOrder(int nearZ, int FarZ) + { + assert (mNearZ > mFarZ); + mNearZ = nearZ; + mFarZ = FarZ; + sortZOrder(); + }; + //------------------------------------------------------------------------------------------------ + void GUI::sortZOrder() + { + assert (mNearZ > mFarZ); + int farZ = mFarZ; + for(std::vector<Window*>::iterator i=mWindows.begin();i!=mWindows.end();++i) + { + (*i)->setZOrder(farZ) ; + if (farZ + 1 < mNearZ) + farZ++; + } + if (mActiveDraggedWindow) + mActiveDraggedWindow->setZOrder(mNearZ) ; + } + //------------------------------------------------------------------------------------------------ + void GUI::update (Ogre::Real timeElapsed) + { + mUpTime += timeElapsed; + + { + std::vector<Window*>::iterator itWindow = mWindows.begin(); + while (itWindow != mWindows.end()) + { + (*itWindow)->setUnderEffect(false); + ++itWindow; + } + } + { + std::list<Effect*>::iterator itEffect = mActiveEffects.begin(); + while (itEffect != mActiveEffects.end()) + { + if ((*itEffect)->update(timeElapsed)) + { + delete *itEffect; + itEffect = mActiveEffects.erase(itEffect); + } + else + { + ++itEffect; + } + } + } + if (mNextWindowToDestroy) + { + for(std::vector<Window*>::iterator i=mWindows.begin();i!=mWindows.end();++i) + { + if(mNextWindowToDestroy==(*i)) + { + delete mNextWindowToDestroy; + mWindows.erase(i); + mNextWindowToDestroy=0; + } + } + } + } + //------------------------------------------------------------------------------------------------ + void GUI::addEffect (Effect* e) + { + mActiveEffects.push_back(e); + } + //----------------------------------------------------------------------------- + bool GUI::injectMouse(float x, float y, bool LMB) + { + return injectMouse ( int(x), int(y), LMB ); + } + + bool GUI::injectMouse(int x, int y, bool LMB) + { + // if (mMousePointerOverlay) + // { + // mMousePointerOverlay->hide (); + mMousePointerOverlay->setPosition(x,y); + // } + + + if (LMB) + { + if (mActiveTextInput) + { + mActiveTextInput->mMainOverlay->setMaterialName(mActiveTextInput->mMaterialName); + mActiveTextInput = 0; + } + + + if (mActiveButton && mActiveDraggedWindow) + { + if (mActiveDraggedWindow->mDragType == WA_MOVE) + { + mDragWindowAction = WA_MOVE; + mActiveDraggedWindow->setPosition ( + mDragWindowX + (x - mDragX), + mDragWindowY + (y - mDragY) + ); + return true; + } + else if (mActiveDraggedWindow->mDragType == WA_RESIZE) + { + mDragWindowAction = WA_RESIZE; + mActiveDraggedWindow->setSize ( + mDragWindowX + (x - mDragX), + mDragWindowY + (y - mDragY) + ); + return true; + } + } + } + else if (mDragWindowAction != WA_NONE) + { + mDragWindowAction = WA_NONE; + mActiveDraggedWindow = 0; + sortZOrder (); + } + + assert (mDragWindowAction == WA_NONE) ; + for(std::vector<Window*>::iterator i=mWindows.begin();i!=mWindows.end();++i) + { + if((*i)->isVisible() && + (*i)->check(x, y, LMB)) + { + mActiveDraggedWindow = (*i); + sortZOrder (); + + //if (mMousePointerOverlay) + // mMousePointerOverlay->show (); + return true; + } + } + + return false; + } + //------------------------------------------------------------------------------------------------ + bool GUI::injectKey(const String &key, int x, int y) + { + if (mActiveTextInput == 0 || key.empty()) + return false; + + if (key == "!b") + { + mActiveTextInput->setValue( + mActiveTextInput->mValueText.substr(0, mActiveTextInput->mValueText.length()-1) + ); + return true; + } + + if (mActiveTextInput->mValueText.length() >= mActiveTextInput->length) + return true; + + mActiveTextInput->mCaptionOverlay->setCaption(mActiveTextInput->mValueText += key); + return false; + } + //------------------------------------------------------------------------------------------------ + void GUI::injectBackspace(int x, int y) + { + injectKey("!b", x, y); + } + //------------------------------------------------------------------------------------------------ + OverlayContainer* GUI::createOverlay(const String &name, const Vector2 &position, + const Vector2 &dimensions, const String &material, + const String &caption) + { + OverlayContainer* e; + const bool isTextArea = !caption.empty(); + try + { + e = static_cast<OverlayContainer*> + (OverlayManager::getSingleton().getOverlayElement (name)); + } + catch (...) + { + e = static_cast<OverlayContainer*> + (OverlayManager::getSingleton().createOverlayElement( + (isTextArea ? "TextArea" : "Panel" ), + name)); + } + + e->setMetricsMode(Ogre::GMM_PIXELS); + e->setDimensions(dimensions.x, dimensions.y); + e->setPosition(position.x, position.y); + + if (!material.empty()) + e->setMaterialName(material); + + if (isTextArea) + { + e->setCaption(caption); + e->setParameter("font_name", mFont); + e->setParameter("char_height", StringConverter::toString(mFontSize)); + + e->setParameter("colour_top", + StringConverter::toString(ColourValue(0.57, 0.86, 0.68, 1.00))); + e->setParameter("colour_bottom", + StringConverter::toString(ColourValue(0.68, 0.86, 0.68, 1.00))); + } + return e; + } + //------------------------------------------------------------------------------------------------ + OverlayContainer* GUI::createMousePointer(Vector2 d, const String &m) + { + Overlay* o = (Overlay*)OverlayManager::getSingleton().getByName("BetaGUI.MP"); + if (!o) + o = OverlayManager::getSingleton().create("BetaGUI.MP"); + + o->setZOrder(648); + + mMousePointerOverlay = createOverlay("bg.mp", Vector2(0,0), d, m, ""); + + if (mMousePointerOverlay != o->getChild (mMousePointerOverlay->getName ())) + o->add2D(mMousePointerOverlay); + o->show(); + mMousePointerOverlay->show(); + return mMousePointerOverlay; + } + //------------------------------------------------------------------------------------------------ + Window* GUI::createWindow(const Vector4 &Dimensions, const String & Material, WindowFeatureType type, const String &caption) + { + Window* window = new Window(Dimensions, Material, type, caption, this); + mWindows.push_back(window); + return window; + } + //------------------------------------------------------------------------------------------------ + Window *GUI::addMenuWindow(const Vector2 dimensions) + { + assert (mMenuWindow == 0); + mMenuWindow = createWindow(Vector4(0, 0, dimensions.x, dimensions.y), + "bgui.window", WFT_NONE, ""); + + mNextMenuWindowPos.y = 25; + return mMenuWindow; + } + //------------------------------------------------------------------------------------------------ + //------------------------------------------------------------------------------------------------ + //------------------------------------------------------------------------------------------------ + Widget::Widget(const Ogre::Vector4 &Dimension, + const Ogre::String &materialNameNormal, + bool hasOverState, + bool hasActiveState): + mPosX(Dimension.x), + mPosY(Dimension.y), + mWidth(Dimension.z), + mHeight(Dimension.w), + mMainOverlay(0), + mCaptionOverlay(0), + mMaterialName(materialNameNormal), + mHasMaterial(!materialNameNormal.empty()), + mHasOverState(hasOverState && mHasMaterial), + mHasActiveState(hasActiveState && mHasMaterial), + mUnderEffect(false), + mOver(false), + mActive(false) + { + + } + //------------------------------------------------------------------------------------------------ + Widget::~Widget() + { + if (mMainOverlay && mMainOverlay->getParent()) mMainOverlay->getParent()->removeChild(mMainOverlay->getName()); + if (mCaptionOverlay && mCaptionOverlay->getParent()) mCaptionOverlay->getParent()->removeChild(mCaptionOverlay->getName()); + + for(std::vector<Widget*>::iterator i=mChildren.begin();i!=mChildren.end();++i) + delete (*i); + } + //------------------------------------------------------------------------------------------------ + void Widget::over(const bool a) + { + assert(!mUnderEffect); + mOver = a; + if (!a && mHasMaterial && mMainOverlay) + { + mMainOverlay->setMaterialName(mMaterialName); + + if (mCaptionOverlay) + { + mCaptionOverlay->setParameter("colour_top", + Ogre::StringConverter::toString(Ogre::ColourValue(0.57, 0.86, 0.68, 1.0))); + mCaptionOverlay->setParameter("colour_bottom", + Ogre::StringConverter::toString(Ogre::ColourValue(0.68, 0.86, 0.68, 1.00))); + } + } + if (a && mHasActiveState && mMainOverlay) + { + mMainOverlay->setMaterialName(mMaterialName + ".over"); + + if (mCaptionOverlay) + { + mCaptionOverlay->setParameter("colour_top", + Ogre::StringConverter::toString(Ogre::ColourValue(1.0, 0.96, 0.76, 1.0))); + mCaptionOverlay->setParameter("colour_bottom", + Ogre::StringConverter::toString(Ogre::ColourValue(1.0, 0.96, 0.76, 1.00))); + } + } + // propagate ? + //for(std::vector<Widget*>::iterator i=mChildren.begin();i!=mChildren.end();++i) + //{ + // (*i)->over(a); + //} + } + //------------------------------------------------------------------------------------------------ + void Widget::activate(const bool a) + { + assert(!mUnderEffect); + mActive = a; + if (!a && mHasMaterial && mMainOverlay) + { + mMainOverlay->setMaterialName(mMaterialName); + + if (mCaptionOverlay) + { + mCaptionOverlay->setParameter("colour_top", + Ogre::StringConverter::toString(Ogre::ColourValue(0.57, 0.86, 0.68, 1.0))); + mCaptionOverlay->setParameter("colour_bottom", + Ogre::StringConverter::toString(Ogre::ColourValue(0.68, 0.86, 0.68, 1.00))); + } + } + if (a && mHasActiveState && mMainOverlay) + { + mMainOverlay->setMaterialName(mMaterialName + ".active"); + + if (mCaptionOverlay) + { + mCaptionOverlay->setParameter("colour_top", + Ogre::StringConverter::toString(Ogre::ColourValue(1.0, 0.96, 0.76, 1.0))); + mCaptionOverlay->setParameter("colour_bottom", + Ogre::StringConverter::toString(Ogre::ColourValue(1.0, 0.96, 0.76, 1.00))); + } + } + // propagate ? + //for(std::vector<Widget*>::iterator i=mChildren.begin();i!=mChildren.end();++i) + //{ + // (*i)->activate(a); + //} + } + //------------------------------------------------------------------------------------------------ + void Widget::setUnderEffect(const bool effect) + { + if (effect) + { + if (mActive) + activate (false); + if (mOver) + over (false); + } + mUnderEffect = effect; + }; + //------------------------------------------------------------------------------------------------ + void Widget::instantiateMaterial(OverlayContainer * const oc, bool reset) const + { + if (oc->getMaterial ().isNull ()) + return; + + const String matName (oc->getMaterial ()->getName ()); + const bool isInstantied = StringUtil::endsWith(matName, ".GuiInstance", false); + if (reset) + { + if (isInstantied) + oc->setMaterialName ( + matName.substr(0, + matName.length() - (oc->getName ().length() + 12))); + } + else if (!isInstantied) + { + const String newMatName(matName + oc->getName () + ".GuiInstance"); + // need to instantiate a material there... + if (!MaterialManager::getSingleton ().resourceExists (newMatName)) + { + oc->getMaterial ()->clone (newMatName); + } + oc->setMaterialName (newMatName); + } + } + //------------------------------------------------------------------------------------------------ + void Widget::setOverlayAlpha(OverlayContainer * const oc, const Ogre::Real alpha) const + { + if (!oc->getMaterial ().isNull ()) + { + TextureUnitState *t = oc->getMaterial ()->getBestTechnique ()->getPass(0)->getTextureUnitState (0); + if (t) t->setAlphaOperation (LBX_MODULATE, LBS_TEXTURE, LBS_MANUAL, alpha, alpha, alpha); + } + } + //------------------------------------------------------------------------------------------------ + void Widget::setAlpha(const Ogre::Real alpha, const bool isContainer) + { + bool noAlpha = false; + Ogre::Real alphaValue = alpha; + + if (alphaValue - 1.0 > -std::numeric_limits<Real>::epsilon()) + { + noAlpha = true; + if (isContainer) mMainOverlay->show (); + } + else if (alphaValue < std::numeric_limits<Real>::epsilon()) + { + noAlpha = true; + if (isContainer) mMainOverlay->hide (); + } + else if (isContainer) + { + mMainOverlay->show (); + } + if (noAlpha) alphaValue = Ogre::Real(1.0); + + //should save in a boolean the instantiated state... + if (mMainOverlay) + { + instantiateMaterial (mMainOverlay, noAlpha); + if (!noAlpha) setOverlayAlpha (mMainOverlay, alphaValue); + } + if (mCaptionOverlay) + { + instantiateMaterial (mCaptionOverlay, noAlpha); + if (!noAlpha) setOverlayAlpha (mCaptionOverlay, alphaValue); + } + for(std::vector<Widget*>::iterator i=mChildren.begin();i!=mChildren.end();++i) + { + (*i)->setAlpha(alphaValue, false); + } + } + //------------------------------------------------------------------------------------------------ + void Widget::setMaterialBlendFactor(const Ogre::Real blendFactor, const bool isContainer) + { + bool noBlendFactor = false; + Ogre::Real blendFactorValue = blendFactor; + + if (blendFactorValue - 1.0 > -std::numeric_limits<Real>::epsilon()) + { + noBlendFactor = true; + } + else if (blendFactorValue < std::numeric_limits<Real>::epsilon()) + { + noBlendFactor = true; + } + if (noBlendFactor) blendFactorValue = Ogre::Real(1.0); + + //should save in a boolean the instantiated state... + if (mMainOverlay) + { + instantiateMaterial (mMainOverlay, noBlendFactor); + if (!noBlendFactor) setOverlayMaterialBlendFactor (mMainOverlay, blendFactorValue); + } + if (mCaptionOverlay) + { + instantiateMaterial (mCaptionOverlay, noBlendFactor); + if (!noBlendFactor) setOverlayMaterialBlendFactor (mCaptionOverlay, blendFactorValue); + } + for(std::vector<Widget*>::iterator i=mChildren.begin();i!=mChildren.end();++i) + { + (*i)->setMaterialBlendFactor(noBlendFactor, false); + } + } + //------------------------------------------------------------------------------------------------ + void Widget::setOverlayMaterialBlendFactor(OverlayContainer * const oc, const Ogre::Real blendFactor) const + { + if (!oc->getMaterial ().isNull ()) + { + TextureUnitState *t = oc->getMaterial ()->getBestTechnique ()->getPass(0)->getTextureUnitState (1); + if (t) + //t->setAlphaOperation (LBX_MODULATE, LBS_TEXTURE, LBS_MANUAL, blendFactor, blendFactor, blendFactor); + t->setColourOperationEx(LBX_BLEND_MANUAL, LBS_TEXTURE, LBS_CURRENT, ColourValue::White, ColourValue::White, blendFactor); + } + } + //------------------------------------------------------------------------------------------------ + void Widget::adjustSizeToContent() + { + Ogre::Real w = 0; + Ogre::Real h = 0; + for(std::vector<Widget*>::iterator i=mChildren.begin();i!=mChildren.end();++i) + { + const Vector2 pos ((*i)->getPosition()); + const Vector2 size ((*i)->getSize()); + + w = std::max(w, pos.x + size.x); + h = std::max(h, pos.y + size.y); + } + setSize(w, h); + } + //------------------------------------------------------------------------------------------------ + void Widget::setPosition(float X,float Y) + { + setPosition(int(X), int(Y)); + } + void Widget::setPosition(const Ogre::Vector2 &position) + { + setPosition(position.x, position.y); + } + //------------------------------------------------------------------------------------------------ + void Widget::setPosition(int X,int Y) + { + if (mMainOverlay) mMainOverlay->setPosition(mPosX=X,mPosY=Y); + } + //------------------------------------------------------------------------------------------------ + void Widget::setSize(const Ogre::Vector2 &size) + { + setSize(size.x, size.y); + }; + //------------------------------------------------------------------------------------------------ + void Widget::setSize(int X,int Y) + { + if (mMainOverlay) mMainOverlay->setDimensions(mWidth=X, mHeight=Y); + if (mCaptionOverlay) mCaptionOverlay->setDimensions(mWidth, mHeight); + }; + //------------------------------------------------------------------------------------------------ + //------------------------------------------------------------------------------------------------ + //------------------------------------------------------------------------------------------------ + Window::Window(const Vector4 &Dimensions, const String &material, WindowFeatureType t, const String &caption, GUI *gui) + : + Widget(Dimensions, material, true, true), + mGUI(gui), + mTitleBarButton(0), + mCloseButton(0), + mResizerButton(0), + mActiveTextInput(0), + mActiveButton(0), + mNextWidgetPos(0, 0), + mDragType(WA_NONE), + mFadeOut(false) + { + + const String name(gui->mName + ".w" + StringConverter::toString(gui->mWindowCount++)); + mGuiOverlay = (Overlay*)OverlayManager::getSingleton().getByName(name); + if (!mGuiOverlay) + mGuiOverlay = OverlayManager::getSingleton().create(name); + mGuiOverlay->show(); + + + mMainOverlay = gui->createOverlay(name, + Vector2(Dimensions.x, Dimensions.y), + Vector2(Dimensions.z, Dimensions.w), + material); + if (mMainOverlay != mGuiOverlay->getChild (mMainOverlay->getName ())) + mGuiOverlay->add2D(mMainOverlay); + mMainOverlay->show(); + + if (t >= 2) + { + Callback c; + c.mCallbackType=4; + mResizerButton = createButton( + Vector4(Dimensions.z-16, Dimensions.w-16, 16, 16), + material + ".resize", "", c); + } + + if ((t == 1 || t == 3) && !caption.empty()) + { + Callback c; + c.mCallbackType=3; + + mTitleBarButton = createButton(Vector4(0,0,Dimensions.z-22,22), + material + ".titlebar", caption, c); + + mCloseButton = createMenuButton(Vector4(Dimensions.z-22,0,22,22), + material + ".close", "", Callback(), this); + + mNextWidgetPos.x += 12; + mNextWidgetPos.y += 22; + } + } + //------------------------------------------------------------------------------------------------ + Window::~Window() + { + //Widget::~Widget(); + //OverlayManager::getSingleton ().destroy (mGuiOverlay->getName ()); + } + //------------------------------------------------------------------------------------------------ + void Window::addWidget(const Widget * const w, WindowPlacementType wpt) + { + switch(wpt) + { + case WPT_HORIZONTAL: + mNextWidgetPos.x += w->getSize().x; break; + case WPT_VERTICAL: + mNextWidgetPos.y += w->getSize().y; break; + case WPT_NONE: + default: + break; + } + adjustSizeToContent(); + } + //------------------------------------------------------------------------------------------------ + Window *Window::addMenuWindowTab(const String &label, + bool titleBarWin, + WindowPlacementType wpt) + { + const size_t labelVisualSize = label.size()*7; + Window *aWindow = mGUI->createWindow( + Vector4(mGUI->mNextMenuWindowPos.x, mGUI->mNextMenuWindowPos.y, 200, 48), + "bgui.window", + titleBarWin? WFT_RESIZE_AND_MOVE : WFT_NONE, + titleBarWin? label: ""); + + Button *aButton = addMenuButton(aWindow, label, WPT_HORIZONTAL); + + if (wpt != WPT_NONE) + mGUI->mNextMenuWindowPos.y += aWindow->getSize ().y + 25; + return aWindow; + } + //------------------------------------------------------------------------------------------------ + MenuButton *Window::addMenuButton(Window *target, const String &label, + WindowPlacementType... [truncated message content] |
From: <and...@us...> - 2007-12-26 14:34:44
|
Revision: 514 http://python-ogre.svn.sourceforge.net/python-ogre/?rev=514&view=rev Author: andy_miller Date: 2007-12-26 06:34:48 -0800 (Wed, 26 Dec 2007) Log Message: ----------- Thirdparty source updates - Ogreal, Quickgui, Caelum and OgreForests Modified Paths: -------------- trunk/python-ogre/ThirdParty/caelum/Caelum.h trunk/python-ogre/ThirdParty/caelum/CaelumExceptions.h trunk/python-ogre/ThirdParty/caelum/CaelumListener.h trunk/python-ogre/ThirdParty/caelum/CaelumPrecompiled.cpp trunk/python-ogre/ThirdParty/caelum/CaelumPrecompiled.h trunk/python-ogre/ThirdParty/caelum/CaelumPrerequisites.h trunk/python-ogre/ThirdParty/caelum/CaelumSystem.cpp trunk/python-ogre/ThirdParty/caelum/CaelumSystem.h trunk/python-ogre/ThirdParty/caelum/CameraBoundElement.cpp trunk/python-ogre/ThirdParty/caelum/CameraBoundElement.h trunk/python-ogre/ThirdParty/caelum/EarthSunPositionModel.cpp trunk/python-ogre/ThirdParty/caelum/EarthSunPositionModel.h trunk/python-ogre/ThirdParty/caelum/GeometryFactory.cpp trunk/python-ogre/ThirdParty/caelum/GeometryFactory.h trunk/python-ogre/ThirdParty/caelum/GroundFog.cpp trunk/python-ogre/ThirdParty/caelum/GroundFog.h trunk/python-ogre/ThirdParty/caelum/ImageHelper.cpp trunk/python-ogre/ThirdParty/caelum/ImageHelper.h trunk/python-ogre/ThirdParty/caelum/LayeredClouds.cpp trunk/python-ogre/ThirdParty/caelum/LayeredClouds.h trunk/python-ogre/ThirdParty/caelum/SimpleSunPositionModel.cpp trunk/python-ogre/ThirdParty/caelum/SimpleSunPositionModel.h trunk/python-ogre/ThirdParty/caelum/SkyColourModel.cpp trunk/python-ogre/ThirdParty/caelum/SkyColourModel.h trunk/python-ogre/ThirdParty/caelum/SkyDome.cpp trunk/python-ogre/ThirdParty/caelum/SkyDome.h trunk/python-ogre/ThirdParty/caelum/Starfield.cpp trunk/python-ogre/ThirdParty/caelum/Starfield.h trunk/python-ogre/ThirdParty/caelum/Sun.cpp trunk/python-ogre/ThirdParty/caelum/Sun.h trunk/python-ogre/ThirdParty/caelum/SunPositionModel.h trunk/python-ogre/ThirdParty/caelum/UniversalClock.cpp trunk/python-ogre/ThirdParty/caelum/UniversalClock.h trunk/python-ogre/ThirdParty/forests/BatchPage.cpp trunk/python-ogre/ThirdParty/forests/BatchedGeometry.cpp trunk/python-ogre/ThirdParty/forests/BatchedGeometry.h trunk/python-ogre/ThirdParty/forests/GrassLoader.cpp trunk/python-ogre/ThirdParty/forests/GrassLoader.h trunk/python-ogre/ThirdParty/forests/ImpostorPage.cpp trunk/python-ogre/ThirdParty/forests/ImpostorPage.h trunk/python-ogre/ThirdParty/forests/PagedGeometry.cpp trunk/python-ogre/ThirdParty/forests/PagedGeometry.h trunk/python-ogre/ThirdParty/forests/PropertyMaps.h trunk/python-ogre/ThirdParty/forests/StaticBillboardSet.cpp trunk/python-ogre/ThirdParty/forests/StaticBillboardSet.h trunk/python-ogre/ThirdParty/forests/TreeLoader2D.cpp trunk/python-ogre/ThirdParty/forests/TreeLoader2D.h trunk/python-ogre/ThirdParty/forests/TreeLoader3D.cpp trunk/python-ogre/ThirdParty/forests/TreeLoader3D.h trunk/python-ogre/ThirdParty/ogreal/OgreAL.h trunk/python-ogre/ThirdParty/ogreal/OgreALException.h trunk/python-ogre/ThirdParty/ogreal/OgreALListener.cpp trunk/python-ogre/ThirdParty/ogreal/OgreALListener.h trunk/python-ogre/ThirdParty/ogreal/OgreALOggSound.cpp trunk/python-ogre/ThirdParty/ogreal/OgreALOggSound.h trunk/python-ogre/ThirdParty/ogreal/OgreALPrereqs.h trunk/python-ogre/ThirdParty/ogreal/OgreALSound.cpp trunk/python-ogre/ThirdParty/ogreal/OgreALSound.h trunk/python-ogre/ThirdParty/ogreal/OgreALSoundManager.cpp trunk/python-ogre/ThirdParty/ogreal/OgreALSoundManager.h trunk/python-ogre/ThirdParty/ogreal/OgreALWavSound.cpp trunk/python-ogre/ThirdParty/ogreal/OgreALWavSound.h trunk/python-ogre/ThirdParty/quickgui/QuickGUI.h trunk/python-ogre/ThirdParty/quickgui/QuickGUIBorder.cpp trunk/python-ogre/ThirdParty/quickgui/QuickGUIBorder.h trunk/python-ogre/ThirdParty/quickgui/QuickGUIButton.cpp trunk/python-ogre/ThirdParty/quickgui/QuickGUICheckBox.cpp trunk/python-ogre/ThirdParty/quickgui/QuickGUICheckBox.h trunk/python-ogre/ThirdParty/quickgui/QuickGUIComboBox.cpp trunk/python-ogre/ThirdParty/quickgui/QuickGUIConfigScriptParser.cpp trunk/python-ogre/ThirdParty/quickgui/QuickGUIConfigScriptParser.h trunk/python-ogre/ThirdParty/quickgui/QuickGUIConsole.cpp trunk/python-ogre/ThirdParty/quickgui/QuickGUIConsole.h trunk/python-ogre/ThirdParty/quickgui/QuickGUIEventArgs.h trunk/python-ogre/ThirdParty/quickgui/QuickGUIExportDLL.h trunk/python-ogre/ThirdParty/quickgui/QuickGUIHorizontalTrackBar.cpp trunk/python-ogre/ThirdParty/quickgui/QuickGUIImage.cpp trunk/python-ogre/ThirdParty/quickgui/QuickGUIImage.h trunk/python-ogre/ThirdParty/quickgui/QuickGUILabel.cpp trunk/python-ogre/ThirdParty/quickgui/QuickGUIList.cpp trunk/python-ogre/ThirdParty/quickgui/QuickGUIManager.cpp trunk/python-ogre/ThirdParty/quickgui/QuickGUIManager.h trunk/python-ogre/ThirdParty/quickgui/QuickGUIMenuLabel.cpp trunk/python-ogre/ThirdParty/quickgui/QuickGUIMenuLabel.h trunk/python-ogre/ThirdParty/quickgui/QuickGUIMouseCursor.cpp trunk/python-ogre/ThirdParty/quickgui/QuickGUIMouseCursor.h trunk/python-ogre/ThirdParty/quickgui/QuickGUINStateButton.cpp trunk/python-ogre/ThirdParty/quickgui/QuickGUINStateButton.h trunk/python-ogre/ThirdParty/quickgui/QuickGUIPanel.cpp trunk/python-ogre/ThirdParty/quickgui/QuickGUIPanel.h trunk/python-ogre/ThirdParty/quickgui/QuickGUIPrecompiledHeaders.h trunk/python-ogre/ThirdParty/quickgui/QuickGUIPrerequisites.h trunk/python-ogre/ThirdParty/quickgui/QuickGUIProgressBar.cpp trunk/python-ogre/ThirdParty/quickgui/QuickGUIProgressBar.h trunk/python-ogre/ThirdParty/quickgui/QuickGUIQuad.cpp trunk/python-ogre/ThirdParty/quickgui/QuickGUIQuad.h trunk/python-ogre/ThirdParty/quickgui/QuickGUIQuadContainer.cpp trunk/python-ogre/ThirdParty/quickgui/QuickGUIQuadContainer.h trunk/python-ogre/ThirdParty/quickgui/QuickGUISheet.cpp trunk/python-ogre/ThirdParty/quickgui/QuickGUISheet.h trunk/python-ogre/ThirdParty/quickgui/QuickGUISkinSet.cpp trunk/python-ogre/ThirdParty/quickgui/QuickGUISkinSet.h trunk/python-ogre/ThirdParty/quickgui/QuickGUISkinSetManager.h trunk/python-ogre/ThirdParty/quickgui/QuickGUIText.cpp trunk/python-ogre/ThirdParty/quickgui/QuickGUITextBox.cpp trunk/python-ogre/ThirdParty/quickgui/QuickGUITextHelper.cpp trunk/python-ogre/ThirdParty/quickgui/QuickGUITextHelper.h trunk/python-ogre/ThirdParty/quickgui/QuickGUITitleBar.cpp trunk/python-ogre/ThirdParty/quickgui/QuickGUIVertexBuffer.cpp trunk/python-ogre/ThirdParty/quickgui/QuickGUIVertexBuffer.h trunk/python-ogre/ThirdParty/quickgui/QuickGUIVerticalTrackBar.cpp trunk/python-ogre/ThirdParty/quickgui/QuickGUIWidget.cpp trunk/python-ogre/ThirdParty/quickgui/QuickGUIWidget.h Modified: trunk/python-ogre/ThirdParty/caelum/Caelum.h =================================================================== --- trunk/python-ogre/ThirdParty/caelum/Caelum.h 2007-12-26 14:29:56 UTC (rev 513) +++ trunk/python-ogre/ThirdParty/caelum/Caelum.h 2007-12-26 14:34:48 UTC (rev 514) @@ -1,3 +1,23 @@ +/* +This file is part of Caelum. +See http://www.ogre3d.org/wiki/index.php/Caelum + +Copyright (c) 2006-2007 Caelum team. See Contributors.txt for details. + +Caelum is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published +by the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +Caelum is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with Caelum. If not, see <http://www.gnu.org/licenses/>. +*/ + #ifndef CAELUM_H #define CAELUM_H Modified: trunk/python-ogre/ThirdParty/caelum/CaelumExceptions.h =================================================================== --- trunk/python-ogre/ThirdParty/caelum/CaelumExceptions.h 2007-12-26 14:29:56 UTC (rev 513) +++ trunk/python-ogre/ThirdParty/caelum/CaelumExceptions.h 2007-12-26 14:34:48 UTC (rev 514) @@ -1,3 +1,23 @@ +/* +This file is part of Caelum. +See http://www.ogre3d.org/wiki/index.php/Caelum + +Copyright (c) 2006-2007 Caelum team. See Contributors.txt for details. + +Caelum is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published +by the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +Caelum is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with Caelum. If not, see <http://www.gnu.org/licenses/>. +*/ + #ifndef CAELUMEXCEPTIONS_H #define CAELUMEXCEPTIONS_H Modified: trunk/python-ogre/ThirdParty/caelum/CaelumListener.h =================================================================== --- trunk/python-ogre/ThirdParty/caelum/CaelumListener.h 2007-12-26 14:29:56 UTC (rev 513) +++ trunk/python-ogre/ThirdParty/caelum/CaelumListener.h 2007-12-26 14:34:48 UTC (rev 514) @@ -1,3 +1,23 @@ +/* +This file is part of Caelum. +See http://www.ogre3d.org/wiki/index.php/Caelum + +Copyright (c) 2006-2007 Caelum team. See Contributors.txt for details. + +Caelum is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published +by the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +Caelum is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with Caelum. If not, see <http://www.gnu.org/licenses/>. +*/ + #ifndef CAELUMLISTENER_H #define CAELUMLISTENER_H Modified: trunk/python-ogre/ThirdParty/caelum/CaelumPrecompiled.cpp =================================================================== --- trunk/python-ogre/ThirdParty/caelum/CaelumPrecompiled.cpp 2007-12-26 14:29:56 UTC (rev 513) +++ trunk/python-ogre/ThirdParty/caelum/CaelumPrecompiled.cpp 2007-12-26 14:34:48 UTC (rev 514) @@ -1 +1,21 @@ +/* +This file is part of Caelum. +See http://www.ogre3d.org/wiki/index.php/Caelum + +Copyright (c) 2006-2007 Caelum team. See Contributors.txt for details. + +Caelum is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published +by the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +Caelum is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with Caelum. If not, see <http://www.gnu.org/licenses/>. +*/ + #include "CaelumPrecompiled.h" Modified: trunk/python-ogre/ThirdParty/caelum/CaelumPrecompiled.h =================================================================== --- trunk/python-ogre/ThirdParty/caelum/CaelumPrecompiled.h 2007-12-26 14:29:56 UTC (rev 513) +++ trunk/python-ogre/ThirdParty/caelum/CaelumPrecompiled.h 2007-12-26 14:34:48 UTC (rev 514) @@ -1 +1,21 @@ +/* +This file is part of Caelum. +See http://www.ogre3d.org/wiki/index.php/Caelum + +Copyright (c) 2006-2007 Caelum team. See Contributors.txt for details. + +Caelum is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published +by the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +Caelum is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with Caelum. If not, see <http://www.gnu.org/licenses/>. +*/ + #include "Ogre.h" Modified: trunk/python-ogre/ThirdParty/caelum/CaelumPrerequisites.h =================================================================== --- trunk/python-ogre/ThirdParty/caelum/CaelumPrerequisites.h 2007-12-26 14:29:56 UTC (rev 513) +++ trunk/python-ogre/ThirdParty/caelum/CaelumPrerequisites.h 2007-12-26 14:34:48 UTC (rev 514) @@ -1,3 +1,23 @@ +/* +This file is part of Caelum. +See http://www.ogre3d.org/wiki/index.php/Caelum + +Copyright (c) 2006-2007 Caelum team. See Contributors.txt for details. + +Caelum is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published +by the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +Caelum is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with Caelum. If not, see <http://www.gnu.org/licenses/>. +*/ + #ifndef CAELUMPREREQUISITES_H #define CAELUMPREREQUISITES_H Modified: trunk/python-ogre/ThirdParty/caelum/CaelumSystem.cpp =================================================================== --- trunk/python-ogre/ThirdParty/caelum/CaelumSystem.cpp 2007-12-26 14:29:56 UTC (rev 513) +++ trunk/python-ogre/ThirdParty/caelum/CaelumSystem.cpp 2007-12-26 14:34:48 UTC (rev 514) @@ -1,3 +1,23 @@ +/* +This file is part of Caelum. +See http://www.ogre3d.org/wiki/index.php/Caelum + +Copyright (c) 2006-2007 Caelum team. See Contributors.txt for details. + +Caelum is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published +by the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +Caelum is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with Caelum. If not, see <http://www.gnu.org/licenses/>. +*/ + #include "CaelumPrecompiled.h" #include "CaelumSystem.h" Modified: trunk/python-ogre/ThirdParty/caelum/CaelumSystem.h =================================================================== --- trunk/python-ogre/ThirdParty/caelum/CaelumSystem.h 2007-12-26 14:29:56 UTC (rev 513) +++ trunk/python-ogre/ThirdParty/caelum/CaelumSystem.h 2007-12-26 14:34:48 UTC (rev 514) @@ -1,3 +1,23 @@ +/* +This file is part of Caelum. +See http://www.ogre3d.org/wiki/index.php/Caelum + +Copyright (c) 2006-2007 Caelum team. See Contributors.txt for details. + +Caelum is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published +by the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +Caelum is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with Caelum. If not, see <http://www.gnu.org/licenses/>. +*/ + #ifndef CAELUMSYSTEM_H #define CAELUMSYSTEM_H Modified: trunk/python-ogre/ThirdParty/caelum/CameraBoundElement.cpp =================================================================== --- trunk/python-ogre/ThirdParty/caelum/CameraBoundElement.cpp 2007-12-26 14:29:56 UTC (rev 513) +++ trunk/python-ogre/ThirdParty/caelum/CameraBoundElement.cpp 2007-12-26 14:34:48 UTC (rev 514) @@ -1,3 +1,23 @@ +/* +This file is part of Caelum. +See http://www.ogre3d.org/wiki/index.php/Caelum + +Copyright (c) 2006-2007 Caelum team. See Contributors.txt for details. + +Caelum is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published +by the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +Caelum is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with Caelum. If not, see <http://www.gnu.org/licenses/>. +*/ + #include "CaelumPrecompiled.h" #include "CameraBoundElement.h" Modified: trunk/python-ogre/ThirdParty/caelum/CameraBoundElement.h =================================================================== --- trunk/python-ogre/ThirdParty/caelum/CameraBoundElement.h 2007-12-26 14:29:56 UTC (rev 513) +++ trunk/python-ogre/ThirdParty/caelum/CameraBoundElement.h 2007-12-26 14:34:48 UTC (rev 514) @@ -1,3 +1,23 @@ +/* +This file is part of Caelum. +See http://www.ogre3d.org/wiki/index.php/Caelum + +Copyright (c) 2006-2007 Caelum team. See Contributors.txt for details. + +Caelum is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published +by the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +Caelum is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with Caelum. If not, see <http://www.gnu.org/licenses/>. +*/ + #ifndef CAMERABOUNDELEMENT_H #define CAMERABOUNDELEMENT_H Modified: trunk/python-ogre/ThirdParty/caelum/EarthSunPositionModel.cpp =================================================================== --- trunk/python-ogre/ThirdParty/caelum/EarthSunPositionModel.cpp 2007-12-26 14:29:56 UTC (rev 513) +++ trunk/python-ogre/ThirdParty/caelum/EarthSunPositionModel.cpp 2007-12-26 14:34:48 UTC (rev 514) @@ -1,3 +1,23 @@ +/* +This file is part of Caelum. +See http://www.ogre3d.org/wiki/index.php/Caelum + +Copyright (c) 2006-2007 Caelum team. See Contributors.txt for details. + +Caelum is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published +by the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +Caelum is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with Caelum. If not, see <http://www.gnu.org/licenses/>. +*/ + #include "CaelumPrecompiled.h" #include "EarthSunPositionModel.h" Modified: trunk/python-ogre/ThirdParty/caelum/EarthSunPositionModel.h =================================================================== --- trunk/python-ogre/ThirdParty/caelum/EarthSunPositionModel.h 2007-12-26 14:29:56 UTC (rev 513) +++ trunk/python-ogre/ThirdParty/caelum/EarthSunPositionModel.h 2007-12-26 14:34:48 UTC (rev 514) @@ -1,3 +1,23 @@ +/* +This file is part of Caelum. +See http://www.ogre3d.org/wiki/index.php/Caelum + +Copyright (c) 2006-2007 Caelum team. See Contributors.txt for details. + +Caelum is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published +by the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +Caelum is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with Caelum. If not, see <http://www.gnu.org/licenses/>. +*/ + #ifndef EARTHSUNPOSITIONMODEL_H #define EARTHSUNPOSITIONMODEL_H Modified: trunk/python-ogre/ThirdParty/caelum/GeometryFactory.cpp =================================================================== --- trunk/python-ogre/ThirdParty/caelum/GeometryFactory.cpp 2007-12-26 14:29:56 UTC (rev 513) +++ trunk/python-ogre/ThirdParty/caelum/GeometryFactory.cpp 2007-12-26 14:34:48 UTC (rev 514) @@ -1,3 +1,23 @@ +/* +This file is part of Caelum. +See http://www.ogre3d.org/wiki/index.php/Caelum + +Copyright (c) 2006-2007 Caelum team. See Contributors.txt for details. + +Caelum is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published +by the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +Caelum is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with Caelum. If not, see <http://www.gnu.org/licenses/>. +*/ + #include "CaelumPrecompiled.h" #include "GeometryFactory.h" Modified: trunk/python-ogre/ThirdParty/caelum/GeometryFactory.h =================================================================== --- trunk/python-ogre/ThirdParty/caelum/GeometryFactory.h 2007-12-26 14:29:56 UTC (rev 513) +++ trunk/python-ogre/ThirdParty/caelum/GeometryFactory.h 2007-12-26 14:34:48 UTC (rev 514) @@ -1,3 +1,23 @@ +/* +This file is part of Caelum. +See http://www.ogre3d.org/wiki/index.php/Caelum + +Copyright (c) 2006-2007 Caelum team. See Contributors.txt for details. + +Caelum is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published +by the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +Caelum is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with Caelum. If not, see <http://www.gnu.org/licenses/>. +*/ + #ifndef GEOMETRYFACTORY_H #define GEOMETRYFACTORY_H Modified: trunk/python-ogre/ThirdParty/caelum/GroundFog.cpp =================================================================== --- trunk/python-ogre/ThirdParty/caelum/GroundFog.cpp 2007-12-26 14:29:56 UTC (rev 513) +++ trunk/python-ogre/ThirdParty/caelum/GroundFog.cpp 2007-12-26 14:34:48 UTC (rev 514) @@ -1,3 +1,23 @@ +/* +This file is part of Caelum. +See http://www.ogre3d.org/wiki/index.php/Caelum + +Copyright (c) 2006-2007 Caelum team. See Contributors.txt for details. + +Caelum is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published +by the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +Caelum is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with Caelum. If not, see <http://www.gnu.org/licenses/>. +*/ + #include "CaelumPrecompiled.h" #include "GroundFog.h" #include "CaelumExceptions.h" Modified: trunk/python-ogre/ThirdParty/caelum/GroundFog.h =================================================================== --- trunk/python-ogre/ThirdParty/caelum/GroundFog.h 2007-12-26 14:29:56 UTC (rev 513) +++ trunk/python-ogre/ThirdParty/caelum/GroundFog.h 2007-12-26 14:34:48 UTC (rev 514) @@ -1,3 +1,23 @@ +/* +This file is part of Caelum. +See http://www.ogre3d.org/wiki/index.php/Caelum + +Copyright (c) 2006-2007 Caelum team. See Contributors.txt for details. + +Caelum is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published +by the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +Caelum is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with Caelum. If not, see <http://www.gnu.org/licenses/>. +*/ + #ifndef GROUNDFOG_H #define GROUNDFOG_H Modified: trunk/python-ogre/ThirdParty/caelum/ImageHelper.cpp =================================================================== --- trunk/python-ogre/ThirdParty/caelum/ImageHelper.cpp 2007-12-26 14:29:56 UTC (rev 513) +++ trunk/python-ogre/ThirdParty/caelum/ImageHelper.cpp 2007-12-26 14:34:48 UTC (rev 514) @@ -1,3 +1,23 @@ +/* +This file is part of Caelum. +See http://www.ogre3d.org/wiki/index.php/Caelum + +Copyright (c) 2006-2007 Caelum team. See Contributors.txt for details. + +Caelum is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published +by the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +Caelum is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with Caelum. If not, see <http://www.gnu.org/licenses/>. +*/ + #include "CaelumPrecompiled.h" #include "ImageHelper.h" Modified: trunk/python-ogre/ThirdParty/caelum/ImageHelper.h =================================================================== --- trunk/python-ogre/ThirdParty/caelum/ImageHelper.h 2007-12-26 14:29:56 UTC (rev 513) +++ trunk/python-ogre/ThirdParty/caelum/ImageHelper.h 2007-12-26 14:34:48 UTC (rev 514) @@ -1,3 +1,23 @@ +/* +This file is part of Caelum. +See http://www.ogre3d.org/wiki/index.php/Caelum + +Copyright (c) 2006-2007 Caelum team. See Contributors.txt for details. + +Caelum is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published +by the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +Caelum is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with Caelum. If not, see <http://www.gnu.org/licenses/>. +*/ + #ifndef CAELUM_HEADER__IMAGE_HELPER_H #define CAELUM_HEADER__IMAGE_HELPER_H Modified: trunk/python-ogre/ThirdParty/caelum/LayeredClouds.cpp =================================================================== --- trunk/python-ogre/ThirdParty/caelum/LayeredClouds.cpp 2007-12-26 14:29:56 UTC (rev 513) +++ trunk/python-ogre/ThirdParty/caelum/LayeredClouds.cpp 2007-12-26 14:34:48 UTC (rev 514) @@ -1,3 +1,23 @@ +/* +This file is part of Caelum. +See http://www.ogre3d.org/wiki/index.php/Caelum + +Copyright (c) 2006-2007 Caelum team. See Contributors.txt for details. + +Caelum is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published +by the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +Caelum is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with Caelum. If not, see <http://www.gnu.org/licenses/>. +*/ + #include "CaelumPrecompiled.h" #include "LayeredClouds.h" #include "CaelumExceptions.h" Modified: trunk/python-ogre/ThirdParty/caelum/LayeredClouds.h =================================================================== --- trunk/python-ogre/ThirdParty/caelum/LayeredClouds.h 2007-12-26 14:29:56 UTC (rev 513) +++ trunk/python-ogre/ThirdParty/caelum/LayeredClouds.h 2007-12-26 14:34:48 UTC (rev 514) @@ -1,3 +1,23 @@ +/* +This file is part of Caelum. +See http://www.ogre3d.org/wiki/index.php/Caelum + +Copyright (c) 2006-2007 Caelum team. See Contributors.txt for details. + +Caelum is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published +by the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +Caelum is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with Caelum. If not, see <http://www.gnu.org/licenses/>. +*/ + #ifndef LAYEREDCLOUDS_H #define LAYEREDCLOUDS_H Modified: trunk/python-ogre/ThirdParty/caelum/SimpleSunPositionModel.cpp =================================================================== --- trunk/python-ogre/ThirdParty/caelum/SimpleSunPositionModel.cpp 2007-12-26 14:29:56 UTC (rev 513) +++ trunk/python-ogre/ThirdParty/caelum/SimpleSunPositionModel.cpp 2007-12-26 14:34:48 UTC (rev 514) @@ -1,3 +1,23 @@ +/* +This file is part of Caelum. +See http://www.ogre3d.org/wiki/index.php/Caelum + +Copyright (c) 2006-2007 Caelum team. See Contributors.txt for details. + +Caelum is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published +by the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +Caelum is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with Caelum. If not, see <http://www.gnu.org/licenses/>. +*/ + #include "CaelumPrecompiled.h" #include "SimpleSunPositionModel.h" Modified: trunk/python-ogre/ThirdParty/caelum/SimpleSunPositionModel.h =================================================================== --- trunk/python-ogre/ThirdParty/caelum/SimpleSunPositionModel.h 2007-12-26 14:29:56 UTC (rev 513) +++ trunk/python-ogre/ThirdParty/caelum/SimpleSunPositionModel.h 2007-12-26 14:34:48 UTC (rev 514) @@ -1,3 +1,23 @@ +/* +This file is part of Caelum. +See http://www.ogre3d.org/wiki/index.php/Caelum + +Copyright (c) 2006-2007 Caelum team. See Contributors.txt for details. + +Caelum is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published +by the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +Caelum is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with Caelum. If not, see <http://www.gnu.org/licenses/>. +*/ + #ifndef SIMPLESUNPOSITIONMODEL_H #define SIMPLESUNPOSITIONMODEL_H Modified: trunk/python-ogre/ThirdParty/caelum/SkyColourModel.cpp =================================================================== --- trunk/python-ogre/ThirdParty/caelum/SkyColourModel.cpp 2007-12-26 14:29:56 UTC (rev 513) +++ trunk/python-ogre/ThirdParty/caelum/SkyColourModel.cpp 2007-12-26 14:34:48 UTC (rev 514) @@ -1,3 +1,23 @@ +/* +This file is part of Caelum. +See http://www.ogre3d.org/wiki/index.php/Caelum + +Copyright (c) 2006-2007 Caelum team. See Contributors.txt for details. + +Caelum is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published +by the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +Caelum is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with Caelum. If not, see <http://www.gnu.org/licenses/>. +*/ + #include "CaelumPrecompiled.h" #include "SkyColourModel.h" #include "ImageHelper.h" Modified: trunk/python-ogre/ThirdParty/caelum/SkyColourModel.h =================================================================== --- trunk/python-ogre/ThirdParty/caelum/SkyColourModel.h 2007-12-26 14:29:56 UTC (rev 513) +++ trunk/python-ogre/ThirdParty/caelum/SkyColourModel.h 2007-12-26 14:34:48 UTC (rev 514) @@ -1,3 +1,23 @@ +/* +This file is part of Caelum. +See http://www.ogre3d.org/wiki/index.php/Caelum + +Copyright (c) 2006-2007 Caelum team. See Contributors.txt for details. + +Caelum is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published +by the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +Caelum is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with Caelum. If not, see <http://www.gnu.org/licenses/>. +*/ + #ifndef SKYCOLOURMODEL_H #define SKYCOLOURMODEL_H Modified: trunk/python-ogre/ThirdParty/caelum/SkyDome.cpp =================================================================== --- trunk/python-ogre/ThirdParty/caelum/SkyDome.cpp 2007-12-26 14:29:56 UTC (rev 513) +++ trunk/python-ogre/ThirdParty/caelum/SkyDome.cpp 2007-12-26 14:34:48 UTC (rev 514) @@ -1,3 +1,23 @@ +/* +This file is part of Caelum. +See http://www.ogre3d.org/wiki/index.php/Caelum + +Copyright (c) 2006-2007 Caelum team. See Contributors.txt for details. + +Caelum is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published +by the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +Caelum is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with Caelum. If not, see <http://www.gnu.org/licenses/>. +*/ + #include "CaelumPrecompiled.h" #include "SkyDome.h" #include "GeometryFactory.h" Modified: trunk/python-ogre/ThirdParty/caelum/SkyDome.h =================================================================== --- trunk/python-ogre/ThirdParty/caelum/SkyDome.h 2007-12-26 14:29:56 UTC (rev 513) +++ trunk/python-ogre/ThirdParty/caelum/SkyDome.h 2007-12-26 14:34:48 UTC (rev 514) @@ -1,3 +1,23 @@ +/* +This file is part of Caelum. +See http://www.ogre3d.org/wiki/index.php/Caelum + +Copyright (c) 2006-2007 Caelum team. See Contributors.txt for details. + +Caelum is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published +by the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +Caelum is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with Caelum. If not, see <http://www.gnu.org/licenses/>. +*/ + #ifndef SKYDOME_H #define SKYDOME_H Modified: trunk/python-ogre/ThirdParty/caelum/Starfield.cpp =================================================================== --- trunk/python-ogre/ThirdParty/caelum/Starfield.cpp 2007-12-26 14:29:56 UTC (rev 513) +++ trunk/python-ogre/ThirdParty/caelum/Starfield.cpp 2007-12-26 14:34:48 UTC (rev 514) @@ -1,3 +1,23 @@ +/* +This file is part of Caelum. +See http://www.ogre3d.org/wiki/index.php/Caelum + +Copyright (c) 2006-2007 Caelum team. See Contributors.txt for details. + +Caelum is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published +by the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +Caelum is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with Caelum. If not, see <http://www.gnu.org/licenses/>. +*/ + #include "CaelumPrecompiled.h" #include "Starfield.h" #include "GeometryFactory.h" Modified: trunk/python-ogre/ThirdParty/caelum/Starfield.h =================================================================== --- trunk/python-ogre/ThirdParty/caelum/Starfield.h 2007-12-26 14:29:56 UTC (rev 513) +++ trunk/python-ogre/ThirdParty/caelum/Starfield.h 2007-12-26 14:34:48 UTC (rev 514) @@ -1,3 +1,23 @@ +/* +This file is part of Caelum. +See http://www.ogre3d.org/wiki/index.php/Caelum + +Copyright (c) 2006-2007 Caelum team. See Contributors.txt for details. + +Caelum is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published +by the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +Caelum is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with Caelum. If not, see <http://www.gnu.org/licenses/>. +*/ + #ifndef STARFIELD_H #define STARFIELD_H Modified: trunk/python-ogre/ThirdParty/caelum/Sun.cpp =================================================================== --- trunk/python-ogre/ThirdParty/caelum/Sun.cpp 2007-12-26 14:29:56 UTC (rev 513) +++ trunk/python-ogre/ThirdParty/caelum/Sun.cpp 2007-12-26 14:34:48 UTC (rev 514) @@ -1,3 +1,23 @@ +/* +This file is part of Caelum. +See http://www.ogre3d.org/wiki/index.php/Caelum + +Copyright (c) 2006-2007 Caelum team. See Contributors.txt for details. + +Caelum is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published +by the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +Caelum is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with Caelum. If not, see <http://www.gnu.org/licenses/>. +*/ + #include "CaelumPrecompiled.h" #include "Sun.h" #include "SimpleSunPositionModel.h" Modified: trunk/python-ogre/ThirdParty/caelum/Sun.h =================================================================== --- trunk/python-ogre/ThirdParty/caelum/Sun.h 2007-12-26 14:29:56 UTC (rev 513) +++ trunk/python-ogre/ThirdParty/caelum/Sun.h 2007-12-26 14:34:48 UTC (rev 514) @@ -1,3 +1,23 @@ +/* +This file is part of Caelum. +See http://www.ogre3d.org/wiki/index.php/Caelum + +Copyright (c) 2006-2007 Caelum team. See Contributors.txt for details. + +Caelum is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published +by the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +Caelum is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with Caelum. If not, see <http://www.gnu.org/licenses/>. +*/ + #ifndef SUN_H #define SUN_H Modified: trunk/python-ogre/ThirdParty/caelum/SunPositionModel.h =================================================================== --- trunk/python-ogre/ThirdParty/caelum/SunPositionModel.h 2007-12-26 14:29:56 UTC (rev 513) +++ trunk/python-ogre/ThirdParty/caelum/SunPositionModel.h 2007-12-26 14:34:48 UTC (rev 514) @@ -1,3 +1,23 @@ +/* +This file is part of Caelum. +See http://www.ogre3d.org/wiki/index.php/Caelum + +Copyright (c) 2006-2007 Caelum team. See Contributors.txt for details. + +Caelum is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published +by the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +Caelum is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with Caelum. If not, see <http://www.gnu.org/licenses/>. +*/ + #ifndef SUNPOSITIONMODEL_H #define SUNPOSITIONMODEL_H Modified: trunk/python-ogre/ThirdParty/caelum/UniversalClock.cpp =================================================================== --- trunk/python-ogre/ThirdParty/caelum/UniversalClock.cpp 2007-12-26 14:29:56 UTC (rev 513) +++ trunk/python-ogre/ThirdParty/caelum/UniversalClock.cpp 2007-12-26 14:34:48 UTC (rev 514) @@ -1,3 +1,23 @@ +/* +This file is part of Caelum. +See http://www.ogre3d.org/wiki/index.php/Caelum + +Copyright (c) 2006-2007 Caelum team. See Contributors.txt for details. + +Caelum is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published +by the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +Caelum is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with Caelum. If not, see <http://www.gnu.org/licenses/>. +*/ + #include "CaelumPrecompiled.h" #include "UniversalClock.h" Modified: trunk/python-ogre/ThirdParty/caelum/UniversalClock.h =================================================================== --- trunk/python-ogre/ThirdParty/caelum/UniversalClock.h 2007-12-26 14:29:56 UTC (rev 513) +++ trunk/python-ogre/ThirdParty/caelum/UniversalClock.h 2007-12-26 14:34:48 UTC (rev 514) @@ -1,3 +1,23 @@ +/* +This file is part of Caelum. +See http://www.ogre3d.org/wiki/index.php/Caelum + +Copyright (c) 2006-2007 Caelum team. See Contributors.txt for details. + +Caelum is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published +by the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +Caelum is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with Caelum. If not, see <http://www.gnu.org/licenses/>. +*/ + #ifndef UNIVERSALCLOCK_H #define UNIVERSALCLOCK_H Modified: trunk/python-ogre/ThirdParty/forests/BatchPage.cpp =================================================================== --- trunk/python-ogre/ThirdParty/forests/BatchPage.cpp 2007-12-26 14:29:56 UTC (rev 513) +++ trunk/python-ogre/ThirdParty/forests/BatchPage.cpp 2007-12-26 14:34:48 UTC (rev 514) @@ -36,7 +36,7 @@ void BatchPage::init(PagedGeometry *geom) { sceneMgr = geom->getSceneManager(); - batch = new BatchedGeometry(sceneMgr); + batch = new BatchedGeometry(sceneMgr, geom->getSceneNode()); fadeEnabled = false; Modified: trunk/python-ogre/ThirdParty/forests/BatchedGeometry.cpp =================================================================== --- trunk/python-ogre/ThirdParty/forests/BatchedGeometry.cpp 2007-12-26 14:29:56 UTC (rev 513) +++ trunk/python-ogre/ThirdParty/forests/BatchedGeometry.cpp 2007-12-26 14:34:48 UTC (rev 514) @@ -36,14 +36,14 @@ //------------------------------------------------------------------------------------- -BatchedGeometry::BatchedGeometry(SceneManager *mgr) +BatchedGeometry::BatchedGeometry(SceneManager *mgr, SceneNode *rootSceneNode) : withinFarDistance(0), minDistanceSquared(0), sceneNode(NULL), sceneMgr(mgr), built(false), - boundsUndefined(true) - + boundsUndefined(true), + parentSceneNode(rootSceneNode) { clear(); } @@ -144,7 +144,7 @@ radius = bounds.getMaximum().length(); //Calculate BB radius //Create scene node - sceneNode = sceneMgr->getRootSceneNode()->createChildSceneNode(center); + sceneNode = parentSceneNode->createChildSceneNode(center); //Build each batch for (SubBatchMap::iterator i = subBatchMap.begin(); i != subBatchMap.end(); ++i){ @@ -207,7 +207,7 @@ withinFarDistance = true; } else { //Calculate camera distance - Vector3 camVec = cam->getDerivedPosition() - center; + Vector3 camVec = _convertToLocal(cam->getDerivedPosition()) - center; Real centerDistanceSquared = camVec.squaredLength(); minDistanceSquared = std::max(0.0f, centerDistanceSquared - (radius * radius)); //Note: centerDistanceSquared measures the distance between the camera and the center of the GeomBatch, @@ -219,9 +219,16 @@ } } +Ogre::Vector3 BatchedGeometry::_convertToLocal(const Vector3 &globalVec) const +{ + assert(parentSceneNode); + //Convert from the given global position to the local coordinate system of the parent scene node. + return (parentSceneNode->getOrientation().Inverse() * globalVec); +} + BatchedGeometry::SubBatch::SubBatch(BatchedGeometry *parent, SubMesh *mesh) { meshType = mesh; @@ -306,15 +313,21 @@ //Misc. setup Vector3 batchCenter = parent->center; + HardwareIndexBuffer::IndexType srcIndexType = meshType->indexData->indexBuffer->getType(); + HardwareIndexBuffer::IndexType destIndexType; + if (vertexData->vertexCount > 0xFFFF || srcIndexType == HardwareIndexBuffer::IT_32BIT) + destIndexType = HardwareIndexBuffer::IT_32BIT; + else + destIndexType = HardwareIndexBuffer::IT_16BIT; + //Allocate the index buffer - HardwareIndexBuffer::IndexType indexType = meshType->indexData->indexBuffer->getType(); indexData->indexBuffer = HardwareBufferManager::getSingleton() - .createIndexBuffer(indexType, indexData->indexCount, HardwareBuffer::HBU_STATIC_WRITE_ONLY); + .createIndexBuffer(destIndexType, indexData->indexCount, HardwareBuffer::HBU_STATIC_WRITE_ONLY); //Lock the index buffer uint32 *indexBuffer32; uint16 *indexBuffer16; - if (indexType == HardwareIndexBuffer::IT_32BIT) + if (destIndexType == HardwareIndexBuffer::IT_32BIT) indexBuffer32 = static_cast<uint32*>(indexData->indexBuffer->lock(HardwareBuffer::HBL_DISCARD)); else indexBuffer16 = static_cast<uint16*>(indexData->indexBuffer->lock(HardwareBuffer::HBL_DISCARD)); @@ -498,7 +511,7 @@ //Copy mesh index data into the index buffer - if (indexType == HardwareIndexBuffer::IT_32BIT) { + if (srcIndexType == HardwareIndexBuffer::IT_32BIT) { //Lock the input buffer uint32 *source = static_cast<uint32*>(sourceIndexData->indexBuffer->lock( sourceIndexData->indexStart, sourceIndexData->indexCount, HardwareBuffer::HBL_READ_ONLY @@ -516,22 +529,43 @@ //Increment the index offset indexOffset += sourceVertexData->vertexCount; } else { - //Lock the input buffer - uint16 *source = static_cast<uint16*>(sourceIndexData->indexBuffer->lock( - sourceIndexData->indexStart, sourceIndexData->indexCount, HardwareBuffer::HBL_READ_ONLY - )); - uint16 *sourceEnd = source + sourceIndexData->indexCount; + if (destIndexType == HardwareIndexBuffer::IT_32BIT){ + //-- Convert 16 bit to 32 bit indices -- + //Lock the input buffer + uint16 *source = static_cast<uint16*>(sourceIndexData->indexBuffer->lock( + sourceIndexData->indexStart, sourceIndexData->indexCount, HardwareBuffer::HBL_READ_ONLY + )); + uint16 *sourceEnd = source + sourceIndexData->indexCount; - //And copy it to the output buffer - while (source != sourceEnd) { - *indexBuffer16++ = static_cast<uint16>(*source++ + indexOffset); - } + //And copy it to the output buffer + while (source != sourceEnd) { + uint32 indx = *source++; + *indexBuffer32++ = (indx + indexOffset); + } - //Unlock the input buffer - sourceIndexData->indexBuffer->unlock(); + //Unlock the input buffer + sourceIndexData->indexBuffer->unlock(); - //Increment the index offset - indexOffset += sourceVertexData->vertexCount; + //Increment the index offset + indexOffset += sourceVertexData->vertexCount; + } else { + //Lock the input buffer + uint16 *source = static_cast<uint16*>(sourceIndexData->indexBuffer->lock( + sourceIndexData->indexStart, sourceIndexData->indexCount, HardwareBuffer::HBL_READ_ONLY + )); + uint16 *sourceEnd = source + sourceIndexData->indexCount; + + //And copy it to the output buffer + while (source != sourceEnd) { + *indexBuffer16++ = static_cast<uint16>(*source++ + indexOffset); + } + + //Unlock the input buffer + sourceIndexData->indexBuffer->unlock(); + + //Increment the index offset + indexOffset += sourceVertexData->vertexCount; + } } } @@ -590,7 +624,7 @@ Real BatchedGeometry::SubBatch::getSquaredViewDepth(const Camera* cam) const { - Vector3 camVec = cam->getDerivedPosition() - parent->center; + Vector3 camVec = parent->_convertToLocal(cam->getDerivedPosition()) - parent->center; return camVec.squaredLength(); } Modified: trunk/python-ogre/ThirdParty/forests/BatchedGeometry.h =================================================================== --- trunk/python-ogre/ThirdParty/forests/BatchedGeometry.h 2007-12-26 14:29:56 UTC (rev 513) +++ trunk/python-ogre/ThirdParty/forests/BatchedGeometry.h 2007-12-26 14:34:48 UTC (rev 514) @@ -16,7 +16,6 @@ #ifndef __BatchedGeometry_H__ #define __BatchedGeometry_H__ -#include "Ogre.h" #include "OgrePrerequisites.h" #include "OgreMovableObject.h" #include "OgreSceneNode.h" @@ -26,13 +25,15 @@ class BatchedGeometry: public Ogre::MovableObject { public: - BatchedGeometry(Ogre::SceneManager *mgr); + BatchedGeometry(Ogre::SceneManager *mgr, Ogre::SceneNode *rootSceneNode); ~BatchedGeometry(); void addEntity(Ogre::Entity *ent, const Ogre::Vector3 &position, const Ogre::Quaternion &orientation = Ogre::Quaternion::IDENTITY, const Ogre::Vector3 &scale = Ogre::Vector3::UNIT_SCALE, const Ogre::ColourValue &color = Ogre::ColourValue::White); void build(); void clear(); + Ogre::Vector3 _convertToLocal(const Ogre::Vector3 &globalVec) const; + void _notifyCurrentCamera(Ogre::Camera *cam); void _updateRenderQueue(Ogre::RenderQueue *queue); bool isVisible(); @@ -110,7 +111,7 @@ Ogre::Real radius; Ogre::SceneManager *sceneMgr; - Ogre::SceneNode *sceneNode; + Ogre::SceneNode *sceneNode, *parentSceneNode; Ogre::Real minDistanceSquared; bool withinFarDistance; @@ -125,4 +126,4 @@ -#endif +#endif \ No newline at end of file Modified: trunk/python-ogre/ThirdParty/forests/GrassLoader.cpp =================================================================== --- trunk/python-ogre/ThirdParty/forests/GrassLoader.cpp 2007-12-26 14:29:56 UTC (rev 513) +++ trunk/python-ogre/ThirdParty/forests/GrassLoader.cpp 2007-12-26 14:34:48 UTC (rev 514) @@ -48,6 +48,7 @@ renderQueue = RENDER_QUEUE_6; windTimer.reset(); + lastTime = 0; } GrassLoader::~GrassLoader() @@ -70,7 +71,6 @@ void GrassLoader::frameUpdate() { - static unsigned long lastTime = 0; unsigned long currentTime = windTimer.getMilliseconds(); unsigned long ellapsedTime = currentTime - lastTime; lastTime = currentTime; @@ -1100,11 +1100,17 @@ void GrassPage::init(PagedGeometry *geom) { sceneMgr = geom->getSceneManager(); + rootNode = geom->getSceneNode(); } +GrassPage::~GrassPage() +{ + removeEntities(); +} + void GrassPage::addEntity(Entity *entity, const Vector3 &position, const Quaternion &rotation, const Vector3 &scale, const Ogre::ColourValue &color) { - SceneNode *node = sceneMgr->getRootSceneNode()->createChildSceneNode(); + SceneNode *node = rootNode->createChildSceneNode(); node->setPosition(position); nodeList.push_back(node); Modified: trunk/python-ogre/ThirdParty/forests/GrassLoader.h =================================================================== --- trunk/python-ogre/ThirdParty/forests/GrassLoader.h 2007-12-26 14:29:56 UTC (rev 513) +++ trunk/python-ogre/ThirdParty/forests/GrassLoader.h 2007-12-26 14:34:48 UTC (rev 514) @@ -176,6 +176,7 @@ //Animation Ogre::Timer windTimer; Ogre::Vector3 windDir; + unsigned long lastTime; static unsigned long GUID; static inline Ogre::String getUniqueID() @@ -501,6 +502,8 @@ { public: void init(PagedGeometry *geom); + ~GrassPage(); + void addEntity(Ogre::Entity *ent, const Ogre::Vector3 &position, const Ogre::Quaternion &rotation, const Ogre::Vector3 &scale, const Ogre::ColourValue &color); void removeEntities(); void setFade(bool enabled, Ogre::Real visibleDist, Ogre::Real invisibleDist) {} @@ -508,6 +511,7 @@ private: Ogre::SceneManager *sceneMgr; + Ogre::SceneNode *rootNode; std::list<Ogre::SceneNode*> nodeList; @@ -519,4 +523,3 @@ }; #endif - Modified: trunk/python-ogre/ThirdParty/forests/ImpostorPage.cpp =================================================================== --- trunk/python-ogre/ThirdParty/forests/ImpostorPage.cpp 2007-12-26 14:29:56 UTC (rev 513) +++ trunk/python-ogre/ThirdParty/forests/ImpostorPage.cpp 2007-12-26 14:34:48 UTC (rev 514) @@ -31,6 +31,7 @@ int ImpostorPage::impostorResolution = 128; ColourValue ImpostorPage::impostorBackgroundColor = ColourValue(0.0f, 0.3f, 0.0f, 0.0f); +BillboardOrigin ImpostorPage::impostorPivot = BBO_CENTER; void ImpostorPage::init(PagedGeometry *geom) @@ -44,7 +45,7 @@ if (++selfInstances == 1){ //Set up a single instance of a scene node which will be used when rendering impostor textures - sceneMgr->getRootSceneNode()->createChildSceneNode("ImpostorPage::renderNode"); + geom->getSceneNode()->createChildSceneNode("ImpostorPage::renderNode"); } } @@ -139,8 +140,8 @@ void ImpostorPage::update() { //Calculate the direction the impostor batches should be facing - Vector3 camPos = geom->getCamera()->getDerivedPosition(); - + Vector3 camPos = geom->_convertToLocal(geom->getCamera()->getDerivedPosition()); + //Update all batches float distX = camPos.x - center.x; float distZ = camPos.z - center.z; @@ -152,7 +153,7 @@ if (distRelZ > geom->getPageSize() * 3) { yaw = Math::ATan2(distX, distZ); } else { - Vector3 dir = geom->getCamera()->getDerivedDirection(); + Vector3 dir = geom->_convertToLocal(geom->getCamera()->getDerivedDirection()); yaw = Math::ATan2(-dir.x, -dir.z); } @@ -175,6 +176,12 @@ ImpostorTexture::regenerateAll(); } +void ImpostorPage::setImpostorPivot(BillboardOrigin origin) +{ + if (origin != BBO_CENTER && origin != BBO_BOTTOM_CENTER) + OGRE_EXCEPT(Exception::ERR_INVALIDPARAMS, "Invalid origin - only BBO_CENTER and BBO_BOTTOM_CENTER is supported", "ImpostorPage::setImpostorPivot()"); + impostorPivot = origin; +} //------------------------------------------------------------------------------------- @@ -188,9 +195,11 @@ tex = ImpostorTexture::getTexture(group, entity); //Create billboard set - bbset = new StaticBillboardSet(group->sceneMgr); + bbset = new StaticBillboardSet(group->sceneMgr, group->geom->getSceneNode()); bbset->setTextureStacksAndSlices(IMPOSTOR_PITCH_ANGLES, IMPOSTOR_YAW_ANGLES); + setBillboardOrigin(ImpostorPage::impostorPivot); + //Default the angle to 0 degrees pitchIndex = -1; yawIndex = -1; @@ -258,7 +267,16 @@ } } +void ImpostorBatch::setBillboardOrigin(BillboardOrigin origin) +{ + bbset->setBillboardOrigin(origin); + if (bbset->getBillboardOrigin() == BBO_CENTER) + entityBBCenter = tex->entityCenter; + else if (bbset->getBillboardOrigin() == BBO_BOTTOM_CENTER) + entityBBCenter = Vector3(tex->entityCenter.x, -tex->entityCenter.y, tex->entityCenter.z); +} + //------------------------------------------------------------------------------------- std::map<ResourceHandle, ImpostorTexture *> ImpostorTexture::selfList; Modified: trunk/python-ogre/ThirdParty/forests/ImpostorPage.h =================================================================== --- trunk/python-ogre/ThirdParty/forests/ImpostorPage.h 2007-12-26 14:29:56 UTC (rev 513) +++ trunk/python-ogre/ThirdParty/forests/ImpostorPage.h 2007-12-26 14:34:48 UTC (rev 514) @@ -116,6 +116,20 @@ } /** + \brief Sets the billboard pivot point used when rendering camera-facing impostors + + This function can be used to set how impostors should rotate to face the camera. By default, + impostors are pointed towards the camera by rotating around the impostor billboard's center. + By choosing an alternate pivot point with this function, you can acheive better results under + certain conditions. For example, when looking up or down very steep hills, you'll probably want + to set BBO_BOTTOM_CENTER as the pivot point. For most other cases, however, the default pivot + point of BBO_CENTER works best. + + \note Only BBO_CENTER and BBO_BOTTOM_CENTER is supported by this function currently. + */ + static void setImpostorPivot(Ogre::BillboardOrigin origin); + + /** \brief Regenerates the impostor texture for the specified entity \param ent The entity which will have it's impostor texture regenerated @@ -154,6 +168,7 @@ ImpostorBlendMode blendMode; static int impostorResolution; static Ogre::ColourValue impostorBackgroundColor; + static ... [truncated message content] |
From: <and...@us...> - 2008-01-08 02:45:25
|
Revision: 532 http://python-ogre.svn.sourceforge.net/python-ogre/?rev=532&view=rev Author: andy_miller Date: 2008-01-07 18:45:30 -0800 (Mon, 07 Jan 2008) Log Message: ----------- And the library source for cadunetree Added Paths: ----------- trunk/python-ogre/ThirdParty/cadunetree/ trunk/python-ogre/ThirdParty/cadunetree/CTParameters.cpp trunk/python-ogre/ThirdParty/cadunetree/CTParameters.h trunk/python-ogre/ThirdParty/cadunetree/CTPrerequisites.h trunk/python-ogre/ThirdParty/cadunetree/CTSection.cpp trunk/python-ogre/ThirdParty/cadunetree/CTSection.h trunk/python-ogre/ThirdParty/cadunetree/CTSerializer.cpp trunk/python-ogre/ThirdParty/cadunetree/CTSerializer.h trunk/python-ogre/ThirdParty/cadunetree/CTStem.cpp trunk/python-ogre/ThirdParty/cadunetree/CTStem.h trunk/python-ogre/ThirdParty/cadunetree/CaduneTree.h Added: trunk/python-ogre/ThirdParty/cadunetree/CTParameters.cpp =================================================================== --- trunk/python-ogre/ThirdParty/cadunetree/CTParameters.cpp (rev 0) +++ trunk/python-ogre/ThirdParty/cadunetree/CTParameters.cpp 2008-01-08 02:45:30 UTC (rev 532) @@ -0,0 +1,398 @@ +/* +This file is a part of the CaduneTree project, +library used to generate and render trees with OGRE. + +License: +Copyright (c) 2007 Wojciech Cierpucha + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +*/ + +#include "CTParameters.h" + +namespace CaduneTree { + + const unsigned int Parameters::mMaxLevels = 4; // 4 is a reasonable number, official in v0.6 + + Parameters::Parameters() : mTaper( 1.0f ) { + // First allocate memory for arrays, + 1 because there is an additional root level + mNumVertices = new unsigned char[ mMaxLevels + 1 ]; + mNumBranches = new unsigned char[ mMaxLevels + 1]; + mDownAngle = new float[ mMaxLevels + 1]; + mDownAngleV = new float[ mMaxLevels + 1]; + mRotate = new float[ mMaxLevels + 1]; + mRotateV = new float[ mMaxLevels + 1]; + mLength = new float[ mMaxLevels + 1]; + mLengthV = new float[ mMaxLevels + 1]; + mCurve = new float[ mMaxLevels + 1]; + mCurveBack = new float[ mMaxLevels + 1]; + mCurveV = new float[ mMaxLevels + 1]; + mCurveRes = new unsigned char[ mMaxLevels + 1]; + + // Always set params to default + setDefault(); + } + + Parameters::Parameters( const Parameters& params ) : mTaper( 1.0f ) { + // First allocate memory for arrays + mNumVertices = new unsigned char[ mMaxLevels + 1]; + mNumBranches = new unsigned char[ mMaxLevels + 1]; + mDownAngle = new float[ mMaxLevels + 1]; + mDownAngleV = new float[ mMaxLevels + 1]; + mRotate = new float[ mMaxLevels + 1]; + mRotateV = new float[ mMaxLevels + 1]; + mLength = new float[ mMaxLevels + 1]; + mLengthV = new float[ mMaxLevels + 1]; + mCurve = new float[ mMaxLevels + 1]; + mCurveBack = new float[ mMaxLevels + 1]; + mCurveV = new float[ mMaxLevels + 1]; + mCurveRes = new unsigned char[ mMaxLevels + 1]; + + // General + mShape = params.mShape; + mBaseSize = params.mBaseSize; + mScale = params.mScale; + mScaleV = params.mScaleV; + mNumLevels = params.mNumLevels; + mRatio = params.mRatio; + mRatioPower = params.mRatioPower; + mNumLobes = params.mNumLobes; + mLobeDepth = params.mLobeDepth; + mFlare = params.mFlare; + mScale0 = params.mScale0; + mScale0V = params.mScale0V; + mBarkMaterial = params.mBarkMaterial; + // Leaves + mNumLeaves = params.mNumLeaves; + mLeafScale = params.mLeafScale; + mLeafScaleX = params.mLeafScaleX; + mLeafQuality = params.mLeafQuality; + mLeafLayoutExp = params.mLeafLayoutExp; + mLeafMaterial = params.mLeafMaterial; + // Fronds + mNumFronds = params.mNumFronds; + mFrondScale = params.mFrondScale; + mFrondScaleX = params.mFrondScaleX; + mFrondQuality = params.mFrondQuality; + mFrondMaterial = params.mFrondMaterial; + // + mAttractionUp = params.mAttractionUp; + // Leveled info + for( unsigned int i = 0; i < mMaxLevels + 1; ++i ) { + mNumVertices[ i ] = params.mNumVertices[ i ]; + mNumBranches[ i ] = params.mNumBranches[ i ]; + mDownAngle[ i ] = params.mDownAngle[ i ]; + mDownAngleV[ i ] = params.mDownAngleV[ i ]; + mRotate[ i ] = params.mRotate[ i ]; + mRotateV[ i ] = params.mRotateV[ i ]; + mLength[ i ] = params.mLength[ i ]; + mLengthV[ i ] = params.mLengthV[ i ]; + mCurve[ i ] = params.mCurve[ i ]; + mCurveBack[ i ] = params.mCurveBack[ i ]; + mCurveV[ i ] = params.mCurveV[ i ]; + mCurveRes[ i ] = params.mCurveRes[ i ]; + } + } + + Parameters::~Parameters() { + delete [] mNumVertices; + delete [] mNumBranches; + delete [] mDownAngle; + delete [] mDownAngleV; + delete [] mRotate; + delete [] mRotateV; + delete [] mLength; + delete [] mLengthV; + delete [] mCurve; + delete [] mCurveBack; + delete [] mCurveV; + delete [] mCurveRes; + } + + void Parameters::setDefault() { + // General + mShape = TEND_FLAME; + mBaseSize = 0.3f; + mScale = 13.0f; + mScaleV = 3.0f; + mNumLevels = 2; + mRatio = 0.03f; + mRatioPower = 1.0f; + mNumLobes = 5; + mLobeDepth = 0.2f; + mFlare = 1.4f; + mScale0 = 1.0f; + mScale0V = 0.0f; + mBarkMaterial = "BarkNoLighting"; + // Leaves + mNumLeaves = 4; + mLeafScale = 1.4f; + mLeafScaleX = 1.0f; + mLeafQuality = 1.0f; + mLeafLayoutExp = 4.0f; + mLeafMaterial = "Leaves"; + // Fronds + mNumFronds = 4; + mFrondScale = 1.0f; + mFrondScaleX = 1.0f; + mFrondQuality = 1.0f; + mFrondMaterial = "Frond"; + // + mAttractionUp = 0.5f; + // Trunk - level 0, null not used params + mNumVertices[ 0 ] = 8; + mNumBranches[ 0 ] = 0; + mDownAngle[ 0 ] = 0.0f; + mDownAngleV[ 0 ] = 0.0f; + mRotate[ 0 ] = 0.0f; + mRotateV[ 0 ] = 0.0f; + mLength[ 0 ] = 1.0f; + mLengthV[ 0 ] = 0.0f; + mCurve[ 0 ] = 20.0f; + mCurveBack[ 0 ] = -15.0f; + mCurveV[ 0 ] = 20.0f; + mCurveRes[ 0 ] = 8; + // Level 1 + mNumVertices[ 1 ] = 4; + mNumBranches[ 1 ] = 20; + mDownAngle[ 1 ] = 80.0f; + mDownAngleV[ 1 ] = 5.0f; + mRotate[ 1 ] = 140.0f; + mRotateV[ 1 ] = 0.0f; + mLength[ 1 ] = 0.4f; + mLengthV[ 1 ] = 0.0f; + mCurve[ 1 ] = -30.0f; + mCurveBack[ 1 ] = 0.0f; + mCurveV[ 1 ] = 10.0f; + mCurveRes[ 1 ] = 4; + // Roots + mNumVertices[ mMaxLevels ] = 6; + mNumBranches[ mMaxLevels ] = 6; + mDownAngle[ mMaxLevels ] = 95.0f; + mDownAngleV[ mMaxLevels ] = 5.0f; + mRotate[ mMaxLevels ] = 140.0f; + mRotateV[ mMaxLevels ] = 0.0f; + mLength[ mMaxLevels ] = 0.4f; + mLengthV[ mMaxLevels ] = 0.0f; + mCurve[ mMaxLevels ] = 20.0f; + mCurveBack[ mMaxLevels ] = -5.0f; + mCurveV[ mMaxLevels ] = 5.0f; + mCurveRes[ mMaxLevels ] = 4; + + // Null remainning data + for( unsigned int i = 2; i < mMaxLevels; ++i ) { + mNumVertices[ i ] = 0; + mNumBranches[ i ] = 0; + mDownAngle[ i ] = 0.0f; + mDownAngleV[ i ] = 0.0f; + mRotate[ i ] = 0.0f; + mRotateV[ i ] = 0.0f; + mLength[ i ] = 0.0f; + mLengthV[ i ] = 0.0f; + mCurve[ i ] = 0.0f; + mCurveBack[ i ] = 0.0f; + mCurveV[ i ] = 0.0f; + mCurveRes[ i ] = 0; + } + + } + + Parameters* Parameters::createCopy() const { + Parameters *params = new Parameters; + + // General + params->mShape = mShape; + params->mBaseSize = mBaseSize; + params->mScale = mScale; + params->mScaleV = mScaleV; + params->mNumLevels = mNumLevels; + params->mRatio = mRatio; + params->mRatioPower = mRatioPower; + params->mNumLobes = mNumLobes; + params->mLobeDepth = mLobeDepth; + params->mFlare = mFlare; + params->mScale0 = mScale0; + params->mScale0V = mScale0V; + params->mBarkMaterial = mBarkMaterial; + // Leaves + params->mNumLeaves = mNumLeaves; + params->mLeafScale = mLeafScale; + params->mLeafScaleX = mLeafScaleX; + params->mLeafQuality = mLeafQuality; + params->mLeafLayoutExp = mLeafLayoutExp; + params->mLeafMaterial = mLeafMaterial; + // Fronds + params->mNumFronds = mNumFronds; + params->mFrondScale = mFrondScale; + params->mFrondScaleX = mFrondScaleX; + params->mFrondQuality = mFrondQuality; + params->mFrondMaterial = mFrondMaterial; + // + params->mAttractionUp = mAttractionUp; + // Leveled info + for( unsigned int i = 0; i < mMaxLevels + 1; ++i ) { + params->mNumVertices[ i ] = mNumVertices[ i ]; + params->mNumBranches[ i ] = mNumBranches[ i ]; + params->mDownAngle[ i ] = mDownAngle[ i ]; + params->mDownAngleV[ i ] = mDownAngleV[ i ]; + params->mRotate[ i ] = mRotate[ i ]; + params->mRotateV[ i ] = mRotateV[ i ]; + params->mLength[ i ] = mLength[ i ]; + params->mLengthV[ i ] = mLengthV[ i ]; + params->mCurve[ i ] = mCurve[ i ]; + params->mCurveBack[ i ] = mCurveBack[ i ]; + params->mCurveV[ i ] = mCurveV[ i ]; + params->mCurveRes[ i ] = mCurveRes[ i ]; + } + + return params; + } + + unsigned char Parameters::getCurveRes( unsigned int level ) { + if( level <= mMaxLevels ) + return mCurveRes[ level ]; + return 0; + } + + float Parameters::getCurveV( unsigned int level ) { + if( level <= mMaxLevels ) + return mCurveV[ level ]; + return 0.0f; + } + + float Parameters::getCurveBack( unsigned int level ) { + if( level <= mMaxLevels ) + return mCurveBack[ level ]; + return 0.0f; + } + + float Parameters::getCurve( unsigned int level ) { + if( level <= mMaxLevels ) + return mCurve[ level ]; + return 0.0f; + } + + float Parameters::getLengthV( unsigned int level ) { + if( level <= mMaxLevels ) + return mLengthV[ level ]; + return 0.0f; + } + + float Parameters::getLength( unsigned int level ) { + if( level <= mMaxLevels ) + return mLength[ level ]; + return 0.0f; + } + + float Parameters::getRotateV( unsigned int level ) { + if( level <= mMaxLevels ) + return mRotateV[ level ]; + return 0.0f; + } + + float Parameters::getRotate( unsigned int level ) { + if( level <= mMaxLevels ) + return mRotate[ level ]; + return 0.0f; + } + + float Parameters::getDownAngleV( unsigned int level ) { + if( level <= mMaxLevels ) + return mDownAngleV[ level ]; + return 0.0f; + } + + float Parameters::getDownAngle( unsigned int level ) { + if( level <= mMaxLevels ) + return mDownAngle[ level ]; + return 0.0f; + } + + unsigned char Parameters::getNumBranches( unsigned int level ) { + if( level <= mMaxLevels ) + return mNumBranches[ level ]; + return 0; + } + + unsigned char Parameters::getNumVertices( unsigned int level ) { + if( level <= mMaxLevels ) + return mNumVertices[ level ]; + return 0; + } + + void Parameters::setCurveRes( unsigned int level, unsigned char curveRes ) { + if( level <= mMaxLevels ) + mCurveRes[ level ] = curveRes; + } + + void Parameters::setCurveV( unsigned int level, float curveV ) { + if( level <= mMaxLevels ) + mCurveV[ level ] = curveV; + } + + void Parameters::setCurveBack( unsigned int level, float curveBack ) { + if( level <= mMaxLevels ) + mCurveBack[ level ] = curveBack; + } + + void Parameters::setCurve( unsigned int level, float curve ) { + if( level <= mMaxLevels ) + mCurve[ level ] = curve; + } + + void Parameters::setLengthV( unsigned int level, float lengthV ) { + if( level <= mMaxLevels ) + mLengthV[ level ] = lengthV; + } + + void Parameters::setLength( unsigned int level, float length ) { + if( level <= mMaxLevels ) + mLength[ level ] = length; + } + + void Parameters::setRotateV( unsigned int level, float rotateV ) { + if( level <= mMaxLevels ) + mRotateV[ level ] = rotateV; + } + + void Parameters::setRotate( unsigned int level, float rotate ) { + if( level <= mMaxLevels ) + mRotate[ level ] = rotate; + } + + void Parameters::setDownAngleV( unsigned int level, float downAngleV ) { + if( level <= mMaxLevels ) + mDownAngleV[ level ] = downAngleV; + } + + void Parameters::setDownAngle( unsigned int level, float downAngle ) { + if( level <= mMaxLevels ) + mDownAngle[ level ] = downAngle; + } + + void Parameters::setNumBranches( unsigned int level, unsigned char numBranches ) { + if( level <= mMaxLevels ) + mNumBranches[ level ] = numBranches; + } + + void Parameters::setNumVertices( unsigned int level, unsigned char numVertices ) { + if( level <= mMaxLevels ) + mNumVertices[ level ] = numVertices; + } +} // CaduneTree \ No newline at end of file Added: trunk/python-ogre/ThirdParty/cadunetree/CTParameters.h =================================================================== --- trunk/python-ogre/ThirdParty/cadunetree/CTParameters.h (rev 0) +++ trunk/python-ogre/ThirdParty/cadunetree/CTParameters.h 2008-01-08 02:45:30 UTC (rev 532) @@ -0,0 +1,359 @@ +/* +This file is a part of the CaduneTree project, +library used to generate and render trees with OGRE. + +License: +Copyright (c) 2007 Wojciech Cierpucha + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +*/ + +#ifndef _CTParameters_h_ +#define _CTParameters_h_ + +#include "CTPrerequisites.h" +#include <OgreString.h> + +/// @file + +namespace CaduneTree { + + + /// @class Parameters + /// This class describes all parameters used to generate a tree, it allows to keep data for 4 levels of recursion. + /// You can save/load it using Serializer class. + + /// Tree parameters class. + class Parameters { + public: + Parameters(); ///< Constructor sets values to default + Parameters( const Parameters& params ); ///< Copy constructor + ~Parameters(); ///< Destructor cleans up + + /// Serializer has to see private elements + friend class Serializer; + + /// This function is used to set parameters to their default values, which describe a low poly tree + void setDefault(); + /// Create another instance of class Parameters by copying this one + /// @return - new instance of these Parameters + Parameters* createCopy() const; + + /// Set shape + /// @param shape - a ShapeEnum enumeration used to choose one of possible tree shapes + void setShape( ShapeEnum shape ) { mShape = shape; } + /// Set base size + /// @param baseSize - tree's base size, varying from 0 to 1, describing how high level 2 branches start + void setBaseSize( float baseSize ) { mBaseSize = baseSize; } + /// Set scale + /// @param scale - a scale factor + void setScale( float scale ) { mScale = scale; } + /// Set scale variation + /// @param scaleV - scale factor variation + void setScaleV( float scaleV ) { mScaleV = scaleV; } + /// Set number of leaves + /// @param numLevels - number of leaves to set + void setNumLevels( unsigned char numLevels ) { mNumLevels = numLevels; } + /// Set ratio + /// @param ratio - ratio + void setRatio( float ratio ) { mRatio = ratio; } + /// Set ratio power + /// @param ratioPower - ratio power factor + void setRatioPower( float ratioPower ) { mRatioPower = ratioPower; } + /// Set number of lobes + /// @param numLobes - number of lobes + void setNumLobes( unsigned char numLobes ) { mNumLobes = numLobes; } + /// Set depth of lobes + /// @param lobeDepth - depth of lobes + void setLobeDepth( float lobeDepth ) { mLobeDepth = lobeDepth; } + /// Set flare + /// @param flare - flare + void setFlare( float flare ) { mFlare = flare; } + /// Set trunk's scale + /// @param scale0 - 0Scale + void setScale0( float scale0 ) { mScale0 = scale0; } + /// Set trunk's scale variation + /// @param scale0V - 0Scale variation + void setScale0V( float scale0V ) { mScale0V = scale0V; } + /// Set bark material to be used + /// @param barkMaterial - material's name + void setBarkMaterial( Ogre::String barkMaterial ) { mBarkMaterial = barkMaterial; } + /// Set leaf scale + /// @param leafScale - scale factor for leaves + void setLeafScale( float leafScale ) { mLeafScale = leafScale; } + /// Set horizontal leaf scale + /// @param leafScaleX - relative horizontal scale factor for leaves + void setLeafScaleX( float leafScaleX ) { mLeafScaleX = leafScaleX; } + /// Set number of leaves + /// @param numLeaves - number of leaves to set for each branch of last level of recursion + void setNumLeaves( unsigned char numLeaves ) { mNumLeaves = numLeaves; } + /// Set leaf quality factor + /// @param leafQuality - factor used to describe number and size of leaves, useful for LOD + void setLeafQuality( float leafQuality ) { mLeafQuality = leafQuality; } + /// Set leaf layout exponent + /// @param leafLayoutExp - when 1 leaves will be situated linearly across the branch + void setLeafLayoutExp( float leafLayoutExp ) { mLeafLayoutExp = leafLayoutExp; } + /// Set material to be used for leaves + /// @param leafMaterial - material's name + void setLeafMaterial( Ogre::String leafMaterial ) { mLeafMaterial = leafMaterial; } + /// Set frond scale + /// @param frondScale - scale factor for fronds + void setFrondScale( float frondScale ) { mFrondScale = frondScale; } + /// Set horizontal frond scale + /// @param frondScaleX - relative horizontal scale factor for fronds + void setFrondScaleX( float frondScaleX ) { mFrondScaleX = frondScaleX; } + /// Set number of fronds + /// @param numFronds - number of fronds to set for each branch of last level of recursion + void setNumFronds( unsigned char numFronds ) { mNumFronds = numFronds; } + /// Set frond quality factor + /// @param frondQuality - factor used to describe number and size of fronds + void setFrondQuality( float frondQuality ) { mFrondQuality = frondQuality; } + /// Set material to be used for fronds + /// @param frondMaterial - material's name + void setFrondMaterial( Ogre::String frondMaterial ) { mFrondMaterial = frondMaterial; } + /// Set vertical attraction + /// @param attractionUp - vertical attraction + void setAttractionUp( float attractionUp ) { mAttractionUp = attractionUp; } + /// Set number of vertices for given level + /// @param level - desired level + /// @param numVertices - number of vertices to set + void setNumVertices( unsigned int level, unsigned char numVertices ); + /// Set number of branches for given level + /// @param level - desired level + /// @param numBranches - number of branches to set + void setNumBranches( unsigned int level, unsigned char numBranches ); + /// Set down angle + /// @param level - desired level + /// @param downAngle - angle beetwen branch and its parent + void setDownAngle( unsigned int level, float downAngle ); + /// Set down angle variation + /// @param level - desired level + /// @param downAngleV - down angle variation + void setDownAngleV( unsigned int level, float downAngleV ); + /// Set rotate angle + /// @param level - desired level + /// @param rotate - angle to rotate around parent + void setRotate( unsigned int level, float rotate ); + /// Set rotate angle variation + /// @param level - desired level + /// @param rotateV - rotate angle variation + void setRotateV( unsigned int level, float rotateV ); + /// Set length + /// @param level - desired level + /// @param length - length, 1.0 means parent's length, 2.0 double of it, etc. + void setLength( unsigned int level, float length ); + /// Set length variation + /// @param level - desired level + /// @param lengthV - length variation + void setLengthV( unsigned int level, float lengthV ); + /// Set curve + /// @param level - desired level + /// @param curve - angle used to curve the branch + void setCurve( unsigned int level, float curve ); + /// Set back curve + /// @param level - desired level + /// @param curveBack - back curve + void setCurveBack( unsigned int level, float curveBack ); + /// Set curve variation + /// @param level - desired level + /// @param curveV - curve variation + void setCurveV( unsigned int level, float curveV ); + /// Set curve resolution + /// @param level - desired level + /// @param curveRes - number of sections in a branch - resolution + void setCurveRes( unsigned int level, unsigned char curveRes ); + + /// Get maximum number of levels + /// @return constant predefined maximum number of levels + unsigned int getMaxLevels() const { return mMaxLevels; } + + /// Get shape + /// @return - ShapeEnum shape + ShapeEnum getShape() const { return mShape; } + /// Get base size + /// @return - tree's base size, varying from 0 to 1, describing how high level 2 branches start + float getBaseSize() const { return mBaseSize; } + /// Get scale + /// @return - a scale factor + float getScale() const { return mScale; } + /// Get scale variation + /// @return - scale factor variation + float getScaleV() const { return mScaleV; } + /// Get number of levels + /// @return number of levels of recursion in tree + unsigned char getNumLevels() const { return mNumLevels; } + /// Get ratio + /// @return ratio factor + float getRatio() const { return mRatio; } + /// Get ratio power + /// @return ratio power factor + float getRatioPower() const { return mRatioPower; } + /// Get number of lobes + /// @return number of lobes + unsigned char getNumLobes() const { return mNumLobes; } + /// Get lobe depth + /// @return lobes' depth + float getLobeDepth() const { return mLobeDepth; } + /// Get flare + /// @return flare + float getFlare() const { return mFlare; } + /// Get trunk's scale + /// @return trunk's scale factor + float getScale0() const { return mScale0; } + /// Get trunk's scale variation + /// @return trunk's scale factor variation + float getScale0V() const { return mScale0V; } + /// Get bark's material to be used + /// @return bark's material name + Ogre::String getBarkMaterial() const { return mBarkMaterial; } + /// Get leaf scale + /// @return leaf scale + float getLeafScale() const { return mLeafScale; } + /// Get horizontal leaf scale + /// @return horizontal leaf scale, which is applied to leaf scale + float getLeafScaleX() const { return mLeafScaleX; } + /// Get number of leaves + /// @return number of leaves + unsigned char getNumLeaves() const { return mNumLeaves; } + /// Get leaf quality + /// @return leaf quality factor + float getLeafQuality() const { return mLeafQuality; } + /// Get leaf layout exponent - used to determine how leaves are located across branches, use 1.0 to use linear distribution + /// @return leaf layout exponent + float getLeafLayoutExp() const { return mLeafLayoutExp; } + /// Get leaf material + /// @return material's name + Ogre::String getLeafMaterial() const { return mLeafMaterial; } + /// Get frond scale + /// @return frond scale factor + float getFrondScale() const { return mFrondScale; } + /// Get horizontal frond scale + /// @return relative to frond scale, horizontal scale factor + float getFrondScaleX() const { return mFrondScaleX; } + /// Get number of fronds + /// @return number of fronds + unsigned char getNumFronds() const { return mNumFronds; } + /// Get frond quality + /// @return quality factor + float getFrondQuality() const { return mFrondQuality; } + /// Get frond material + /// @return material's name + Ogre::String getFrondMaterial() const { return mFrondMaterial; } + /// Get vertical attraction + /// @return vertical attraction factor + float getAttractionUp() const { return mAttractionUp; } + /// Get tapering parameter (not used, constant for now) + /// @return taper + float getTaper() const { return mTaper; } + + /// Get number of vertices for a specific level + /// @param level - desired level of recursion + /// @return number of vetices + unsigned char getNumVertices( unsigned int level ); // code in .cpp file and check if level < mNumLevels + /// Get number of branches for a specific level + /// @param level - desired level of recursion + /// @return number of branches + unsigned char getNumBranches( unsigned int level ); + /// Get down angle for a specific level + /// @param level - desired level of recursion + /// @return down angle + float getDownAngle( unsigned int level ); + /// Get down angle variation for a specific level + /// @param level - desired level of recursion + /// @return down angle variation + float getDownAngleV( unsigned int level ); + /// Get rotate parameter for a specific level + /// @param level - desired level of recursion + /// @return rotation parameter + float getRotate( unsigned int level ); + /// Get rotate variation parameter for a specific level + /// @param level - desired level of recursion + /// @return rotation variation parameter + float getRotateV( unsigned int level ); + /// Get length for a specific level + /// @param level - desired level of recursion + /// @return length + float getLength( unsigned int level ); + /// Get length variation for a specific level + /// @param level - desired level of recursion + /// @return length variation + float getLengthV( unsigned int level ); + /// Get curve parameter for a specific level + /// @param level - desired level of recursion + /// @return curve parameter + float getCurve( unsigned int level ); + /// Get curve back parameter for a specific level + /// @param level - desired level of recursion + /// @return curve back parameter + float getCurveBack( unsigned int level ); + /// Get curve variation parameter for a specific level + /// @param level - desired level of recursion + /// @return curve variation parameter + float getCurveV( unsigned int level ); + /// Get curve resolution parameter for a specific level + /// @param level - desired level of recursion + /// @return curve resolution parameter + unsigned char getCurveRes( unsigned int level ); + private: + ShapeEnum mShape; + float mBaseSize; + float mScale; + float mScaleV; + unsigned char mNumLevels; + float mRatio; + float mRatioPower; + unsigned char mNumLobes; + float mLobeDepth; + float mFlare; + float mScale0; + float mScale0V; + Ogre::String mBarkMaterial; + float mLeafScale; + float mLeafScaleX; + unsigned char mNumLeaves; + float mLeafQuality; + float mLeafLayoutExp; + Ogre::String mLeafMaterial; + float mFrondScale; + float mFrondScaleX; + unsigned char mNumFronds; + float mFrondQuality; + Ogre::String mFrondMaterial; + float mAttractionUp; + const float mTaper; // constant = 1, at least for now + unsigned char *mNumVertices; + unsigned char *mNumBranches; + float *mDownAngle; + float *mDownAngleV; + float *mRotate; + float *mRotateV; + float *mLength; + float *mLengthV; + float *mCurve; + float *mCurveBack; + float *mCurveV; + unsigned char *mCurveRes; + + /// Predefined maximum number of levels possible + static const unsigned int mMaxLevels; + }; // Parameters + +} // CaduneTree + +#endif \ No newline at end of file Added: trunk/python-ogre/ThirdParty/cadunetree/CTPrerequisites.h =================================================================== --- trunk/python-ogre/ThirdParty/cadunetree/CTPrerequisites.h (rev 0) +++ trunk/python-ogre/ThirdParty/cadunetree/CTPrerequisites.h 2008-01-08 02:45:30 UTC (rev 532) @@ -0,0 +1,56 @@ +/* +This file is a part of the CaduneTree project, +library used to generate and render trees with OGRE. + +License: +Copyright (c) 2007 Wojciech Cierpucha + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +*/ + +#ifndef _CTPrerequisites_h_ +#define _CTPrerequisites_h_ + +namespace CaduneTree { + + // Class declarations + class Parameters; + class Serializer; + class Section; + class Stem; + + // Enumeration declarations + /// @enum ShapeEnum + /// Enum used to describe possible tree shapes + enum ShapeEnum { + CONICAL = 0, ///< Conical shape + SPHERICAL, ///< Spherical shape + HEMISPHERICAL, ///< Hemispherical shape + CYLINDRICAL, ///< Cylindrical shape + TAPERED_CYLINDRICAL, ///< Tapered cylindrical shape + FLAME, ///< Flame shape + INVERSE_CONICAL, ///< Inverse conical shape + TEND_FLAME, ///< Tend flame shape + //ENVELOPE ///< Envelope shape ---pruning + }; + + +} // CaduneTree + +#endif \ No newline at end of file Added: trunk/python-ogre/ThirdParty/cadunetree/CTSection.cpp =================================================================== --- trunk/python-ogre/ThirdParty/cadunetree/CTSection.cpp (rev 0) +++ trunk/python-ogre/ThirdParty/cadunetree/CTSection.cpp 2008-01-08 02:45:30 UTC (rev 532) @@ -0,0 +1,109 @@ +/* +This file is a part of the CaduneTree project, +library used to generate and render trees with OGRE. + +License: +Copyright (c) 2007 Wojciech Cierpucha + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +*/ + +#include "CTSection.h" + +namespace CaduneTree { + + Section::Section() { + mOrigin = Ogre::Vector3::ZERO; + mGlobalOrigin = Ogre::Vector3::ZERO; + mOrientation = Ogre::Quaternion::IDENTITY; + mTexVCoord = 0.0f; + } + + Section::~Section() { + + } + + void Section::create( unsigned int numLobes, float lobeDepth, float radius, unsigned int numVertices ) { + float angle = 2 * Ogre::Math::PI / numVertices; + float lobedRadius; + Ogre::Vector3 localVertex; + Ogre::Vector3 globalVertex; + for( unsigned int i = 0; i < numVertices; ++i ) { + lobedRadius = radius * ( 1.0f + lobeDepth * Ogre::Math::Sin( i * numLobes * angle ) ); + localVertex.x = Ogre::Math::Cos( i * angle ) * lobedRadius; + localVertex.y = 0.0f; + localVertex.z = Ogre::Math::Sin( i * angle ) * lobedRadius; + + globalVertex = mOrientation * ( mOrigin + localVertex ) + mGlobalOrigin; + mGlobalVertices.push_back( globalVertex ); + mNormals.push_back( ( mOrientation * localVertex ).normalisedCopy() ); + + mTexUCoords.push_back( ( float ) i / numVertices ); + } + // Additional vertex + mGlobalVertices.push_back( *mGlobalVertices.begin() ); + mNormals.push_back( *mNormals.begin() ); + mTexUCoords.push_back( 1.0f ); + } + + void Section::setGlobalOrigin( const Ogre::Vector3& globalOrigin ) { + mGlobalOrigin = globalOrigin; + } + + void Section::setOrigin( const Ogre::Vector3 &origin ) { + mOrigin = origin; + } + + void Section::setOrientation( const Ogre::Quaternion& orientation ) { + mOrientation = orientation; + } + + void Section::setTexVCoord( float v ) { + mTexVCoord = v; + } + + std::vector< Ogre::Vector3 >* Section::getGlobalVertices() { + return &mGlobalVertices; + } + + std::vector< Ogre::Vector3 >* Section::getNormals() { + return &mNormals; + } + + std::vector< float >* Section::getTexUCoords() { + return &mTexUCoords; + } + + Ogre::Quaternion Section::getOrientation() const { + return mOrientation; + } + + Ogre::Vector3 Section::getOrigin() const { + return mOrigin; + } + + Ogre::Vector3 Section::getGlobalOrigin() const { + return mGlobalOrigin; + } + + float Section::getTexVCoord() const { + return mTexVCoord; + } + +} // CaduneTree \ No newline at end of file Added: trunk/python-ogre/ThirdParty/cadunetree/CTSection.h =================================================================== --- trunk/python-ogre/ThirdParty/cadunetree/CTSection.h (rev 0) +++ trunk/python-ogre/ThirdParty/cadunetree/CTSection.h 2008-01-08 02:45:30 UTC (rev 532) @@ -0,0 +1,74 @@ +/* +This file is a part of the CaduneTree project, +library used to generate and render trees with OGRE. + +License: +Copyright (c) 2007 Wojciech Cierpucha + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +*/ + +#ifndef _CTSection_h_ +#define _CTSection_h_ + +#include "CTPrerequisites.h" +#include <Ogre.h> +#include <vector> + +/// @file + +namespace CaduneTree { + + /// @class Section + /// Objects of this type hold information about vertices, their normals and texture coordinates (one set). + /// This is used only internally in methods of Stem class. Thus there is no need to document the code. + + /// Used only internally. + class Section { + public: + Section(); + ~Section(); + + void create( unsigned int numLobes, float lobeDepth, float radius, unsigned int numVertices ); + void setOrientation( const Ogre::Quaternion& orientation ); + void setGlobalOrigin( const Ogre::Vector3& globalOrigin ); + void setOrigin( const Ogre::Vector3& origin ); + void setTexVCoord( float v ); + + std::vector< Ogre::Vector3 >* getGlobalVertices(); + std::vector< Ogre::Vector3 >* getNormals(); + std::vector< float >* getTexUCoords(); + + Ogre::Quaternion getOrientation() const; + Ogre::Vector3 getOrigin() const; + Ogre::Vector3 getGlobalOrigin() const; + float getTexVCoord() const; + private: + Ogre::Vector3 mOrigin; + Ogre::Vector3 mGlobalOrigin; + Ogre::Quaternion mOrientation; + std::vector< Ogre::Vector3 > mGlobalVertices; + std::vector< Ogre::Vector3 > mNormals; + std::vector< float > mTexUCoords; + float mTexVCoord; + }; + +} // CaduneTree + +#endif \ No newline at end of file Added: trunk/python-ogre/ThirdParty/cadunetree/CTSerializer.cpp =================================================================== --- trunk/python-ogre/ThirdParty/cadunetree/CTSerializer.cpp (rev 0) +++ trunk/python-ogre/ThirdParty/cadunetree/CTSerializer.cpp 2008-01-08 02:45:30 UTC (rev 532) @@ -0,0 +1,169 @@ +/* +This file is a part of the CaduneTree project, +library used to generate and render trees with OGRE. + +License: +Copyright (c) 2007 Wojciech Cierpucha + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +*/ + +#include "CTSerializer.h" +#include "CTParameters.h" +#include <OgreException.h> + +using namespace std; + +namespace CaduneTree { + + void Serializer::exportDefinition( const string &filename, Parameters *params ) { + if( !params ) + throw Ogre::Exception( Ogre::Exception::ERR_INVALIDPARAMS, "Passed Parameters pointer is null", "Serializer::exportDefinition" ); + + ofstream file( filename.c_str(), ios_base::binary ); + + // File header + file << "CTD"; + file << ( char ) 6; + + // General + file.write( ( char* ) ¶ms->mShape, sizeof( ShapeEnum ) ); + file.write( ( char* ) ¶ms->mBaseSize, sizeof( float ) ); + file.write( ( char* ) ¶ms->mScale, sizeof( float ) ); + file.write( ( char* ) ¶ms->mScaleV, sizeof( float ) ); + file.write( ( char* ) ¶ms->mNumLevels, sizeof( unsigned char ) ); + file.write( ( char* ) ¶ms->mRatio, sizeof( float ) ); + file.write( ( char* ) ¶ms->mRatioPower, sizeof( float ) ); + file.write( ( char* ) ¶ms->mNumLobes, sizeof( unsigned char ) ); + file.write( ( char* ) ¶ms->mLobeDepth, sizeof( float ) ); + file.write( ( char* ) ¶ms->mFlare, sizeof( float ) ); + file.write( ( char* ) ¶ms->mScale0, sizeof( float ) ); + file.write( ( char* ) ¶ms->mScale0V, sizeof( float ) ); + file.write( ( char* ) ¶ms->mAttractionUp, sizeof ( float ) ); + // file.write( ( char* ) ¶ms->mBarkMaterial, sizeof( string ) ); + + // Leaves + file.write( ( char* ) ¶ms->mNumLeaves, sizeof( unsigned char ) ); + file.write( ( char* ) ¶ms->mLeafScale, sizeof( float ) ); + file.write( ( char* ) ¶ms->mLeafScaleX, sizeof( float ) ); + file.write( ( char* ) ¶ms->mLeafQuality, sizeof( float ) ); + file.write( ( char* ) ¶ms->mLeafLayoutExp, sizeof( float ) ); + // file.write( ( char* ) ¶ms->mLeafMaterial, sizeof( string ) ); + + // Fronds + file.write( ( char* ) ¶ms->mNumFronds, sizeof( unsigned char ) ); + file.write( ( char* ) ¶ms->mFrondScale, sizeof( float ) ); + file.write( ( char* ) ¶ms->mFrondScaleX, sizeof( float ) ); + file.write( ( char* ) ¶ms->mFrondQuality, sizeof( float ) ); + //file.write( ( char* ) ¶ms->mFrondMaterial, sizeof( string ) ); + + // Branches + for( unsigned int i = 0; i < params->mMaxLevels + 1; ++i ) { + file.write( ( char* ) ¶ms->mNumVertices[ i ], sizeof( unsigned char ) ); + file.write( ( char* ) ¶ms->mNumBranches[ i ], sizeof( unsigned char ) ); + file.write( ( char* ) ¶ms->mDownAngle[ i ], sizeof( float ) ); + file.write( ( char* ) ¶ms->mDownAngleV[ i ], sizeof( float ) ); + file.write( ( char* ) ¶ms->mRotate[ i ], sizeof( float ) ); + file.write( ( char* ) ¶ms->mRotateV[ i ], sizeof( float ) ); + file.write( ( char* ) ¶ms->mLength[ i ], sizeof( float ) ); + file.write( ( char* ) ¶ms->mLengthV[ i ], sizeof( float ) ); + file.write( ( char* ) ¶ms->mCurve[ i ], sizeof( float ) ); + file.write( ( char* ) ¶ms->mCurveBack[ i ], sizeof( float ) ); + file.write( ( char* ) ¶ms->mCurveV[ i ], sizeof( float ) ); + file.write( ( char* ) ¶ms->mCurveRes[ i ], sizeof( unsigned char ) ); + } + // EOF + } + + Parameters* Serializer::importDefinition( const string &filename ) { + Parameters *params = 0; + + ifstream file( filename.c_str(), ios_base::binary ); + char cheader[4]; + file.read( ( char* ) cheader, 3 * sizeof( char ) ); + cheader[3] = '\0'; + string header( cheader ); + if( header != "CTD" ) + throw Ogre::Exception( Ogre::Exception::ERR_FILE_NOT_FOUND, "This is not a proper .ctd file!", "Serializer::importDefinition" ); + + char version; + file.read( ( char* ) &version, sizeof( char ) ); + if( version == 6 ) + params = import006( &file ); + else + throw Ogre::Exception( Ogre::Exception::ERR_FILE_NOT_FOUND, "Not supported CTD file version!", "Serializer::importDefinition" ); + + return params; + } + + Parameters* Serializer::import006( ifstream *file ) { + Parameters *params = new Parameters; + + // General + file->read( ( char* ) ¶ms->mShape, sizeof( ShapeEnum ) ); + file->read( ( char* ) ¶ms->mBaseSize, sizeof( float ) ); + file->read( ( char* ) ¶ms->mScale, sizeof( float ) ); + file->read( ( char* ) ¶ms->mScaleV, sizeof( float ) ); + file->read( ( char* ) ¶ms->mNumLevels, sizeof( unsigned char ) ); + file->read( ( char* ) ¶ms->mRatio, sizeof( float ) ); + file->read( ( char* ) ¶ms->mRatioPower, sizeof( float ) ); + file->read( ( char* ) ¶ms->mNumLobes, sizeof( unsigned char ) ); + file->read( ( char* ) ¶ms->mLobeDepth, sizeof( float ) ); + file->read( ( char* ) ¶ms->mFlare, sizeof( float ) ); + file->read( ( char* ) ¶ms->mScale0, sizeof( float ) ); + file->read( ( char* ) ¶ms->mScale0V, sizeof( float ) ); + file->read( ( char* ) ¶ms->mAttractionUp, sizeof ( float ) ); + // file->read( ( char* ) ¶ms->mBarkMaterial, sizeof( string ) ); + + // Leaves + file->read( ( char* ) ¶ms->mNumLeaves, sizeof( unsigned char ) ); + file->read( ( char* ) ¶ms->mLeafScale, sizeof( float ) ); + file->read( ( char* ) ¶ms->mLeafScaleX, sizeof( float ) ); + file->read( ( char* ) ¶ms->mLeafQuality, sizeof( float ) ); + file->read( ( char* ) ¶ms->mLeafLayoutExp, sizeof( float ) ); + // file->read( ( char* ) ¶ms->mLeafMaterial, sizeof( string ) ); + + // Fronds + file->read( ( char* ) ¶ms->mNumFronds, sizeof( unsigned char ) ); + file->read( ( char* ) ¶ms->mFrondScale, sizeof( float ) ); + file->read( ( char* ) ¶ms->mFrondScaleX, sizeof( float ) ); + file->read( ( char* ) ¶ms->mFrondQuality, sizeof( float ) ); + //file->read( ( char* ) ¶ms->mFrondMaterial, sizeof( string ) ); + + // Branches + for( unsigned int i = 0; i < params->mMaxLevels + 1; ++i ) { + file->read( ( char* ) ¶ms->mNumVertices[ i ], sizeof( unsigned char ) ); + file->read( ( char* ) ¶ms->mNumBranches[ i ], sizeof( unsigned char ) ); + file->read( ( char* ) ¶ms->mDownAngle[ i ], sizeof( float ) ); + file->read( ( char* ) ¶ms->mDownAngleV[ i ], sizeof( float ) ); + file->read( ( char* ) ¶ms->mRotate[ i ], sizeof( float ) ); + file->read( ( char* ) ¶ms->mRotateV[ i ], sizeof( float ) ); + file->read( ( char* ) ¶ms->mLength[ i ], sizeof( float ) ); + file->read( ( char* ) ¶ms->mLengthV[ i ], sizeof( float ) ); + file->read( ( char* ) ¶ms->mCurve[ i ], sizeof( float ) ); + file->read( ( char* ) ¶ms->mCurveBack[ i ], sizeof( float ) ); + file->read( ( char* ) ¶ms->mCurveV[ i ], sizeof( float ) ); + file->read( ( char* ) ¶ms->mCurveRes[ i ], sizeof( unsigned char ) ); + } + // EOF + + return params; + } +} + // CaduneTree \ No newline at end of file Added: trunk/python-ogre/ThirdParty/cadunetree/CTSerializer.h =================================================================== --- trunk/python-ogre/ThirdParty/cadunetree/CTSerializer.h (rev 0) +++ trunk/python-ogre/ThirdParty/cadunetree/CTSerializer.h 2008-01-08 02:45:30 UTC (rev 532) @@ -0,0 +1,58 @@ +/* +This file is a part of the CaduneTree project, +library used to generate and render trees with OGRE. + +License: +Copyright (c) 2007 Wojciech Cierpucha + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +*/ + +#ifndef _CTSerializer_h_ +#define _CTSerializer_h_ + +#include "CTPrerequisites.h" +#include <string> +#include <fstream> + +/// @file + +namespace CaduneTree { + + /// @class Serializer + /// Using this class one can import from file (every previous version is supported) parameters, as well as export them (only most current version of file format). + + /// Class used for import and export of parameters. + class Serializer { + public: + /// Export parameters to file + /// @param filename - path to file or file name (only direct) + /// @param params - pointer to Paramaters object, which will be exported + static void exportDefinition( const std::string &filename, Parameters *params ); + /// Import parameters from file + /// @param filename - path to file or file name (only direct) + static Parameters* importDefinition( const std::string &filename ); + private: + /// Import, file format version 0.6 + static Parameters* import006( std::ifstream *file ); + }; + +} // CaduneTree + +#endif \ No newline at end of file Added: trunk/python-ogre/ThirdParty/cadunetree/CTStem.cpp =================================================================== --- trunk/python-ogre/ThirdParty/cadunetree/CTStem.cpp (rev 0) +++ trunk/python-ogre/ThirdParty/cadunetree/CTStem.cpp 2008-01-08 02:45:30 UTC (rev 532) @@ -0,0 +1,584 @@ +/* +This file is a part of the CaduneTree project, +library used to generate and render trees with OGRE. + +License: +Copyright (c) 2007 Wojciech Cierpucha + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +*/ + +#include "CTStem.h" +#include "CTParameters.h" +#include "CTSection.h" + +using namespace Ogre; + +namespace CaduneTree { + + Stem::Stem( Parameters* params, Stem* parent ) { + if( !params ) + throw Exception( Exception::ERR_INVALIDPARAMS, "Parameters *params == NULL", "Stem::Stem" ); + + mParameters = params; + mParent = parent; + mNumSubStems = 0; + mNumLeaves = 0; + mNumFronds = 0; + mNumVertices = 0; + mNumTriangles = 0; + mLength = 1.0f; + mRadius = 1.0f; + mOffset = 0.0f; + mIsRoot = false; + mIsGrown = false; + } + + Stem::~Stem() { + std::vector< Section* >::iterator i; + for( i = mSections.begin(); i != mSections.end(); ++i ) { + delete *i; + } + mSections.clear(); + + std::list< Stem* >::iterator j; + for( j = mSubStems.begin(); j != mSubStems.end(); ++j ) { + delete *j; + } + mSubStems.clear(); + } + + void Stem::grow( const Quaternion& orientation, const Vector3& origin, float radius, float length, float offset, unsigned char level ) { + if( level >= mParameters->getNumLevels() && !mIsRoot ) + return; + + if( mParameters->getCurveRes( level ) == 0 ) + return; + + mOrigin = origin; + mOrientation = orientation; + + // Locals used + Vector3 localSectionOrigin = Vector3::ZERO; + Vector3 step = Vector3::ZERO; + Vector3 currentOrigin = mOrigin; + Quaternion localOrientation = mOrientation; + Quaternion newLocalOrientation = mOrientation; + Section* section = 0; + float sectionRadius = radius; + float y = 0.0f; + float angle = 0.0f; + float treeScale = mParameters->getScale() + getRandom( mParameters->getScaleV() ); + float trunkLength = treeScale * ( mParameters->getLength( 0 ) + getRandom( mParameters->getLengthV( 0 ) ) ); + float baseLength = mParameters->getBaseSize() * treeScale; + + // Trunk? + if( level == 0 ) { + mLength = trunkLength; + mRadius = mLength * mParameters->getRatio() * ( mParameters->getScale0() + getRandom( mParameters->getScale0V() ) ); + mOffset = 0.0f; + } else { + mRadius = radius; + mLength = length; + mOffset = offset; + } + + // to avoid having empty first block, ie to start from mOrigin + //localSectionOrigin = Vector3( 0.0f, mLength / mParameters->getCurveRes( level ), 0.0f ); + //currentOrigin -= mOrientation * localSectionOrigin; // wow, it works ;) + step = Vector3( 0.0f, mLength / mParameters->getCurveRes( level ), 0.0f ); + + for( unsigned int i = 0; i < mParameters->getCurveRes( level ); ++i ) { + if( !Math::RealEqual( mParameters->getCurveBack( level ), 0.0f ) ) { + if( mParameters->getCurveRes( level ) / ( i + 1 ) < 2 ) + angle = 2.0f * mParameters->getCurve( level ) / mParameters->getCurveRes( level ); + else + angle = 2.0f * mParameters->getCurveBack( level ) / mParameters->getCurveRes( level ); + } + else + angle = mParameters->getCurve( level ) / mParameters->getCurveRes( level ); + + angle += getRandom( mParameters->getCurveV( level ) / mParameters->getCurveRes( level ) ); + + // Calculate vertical attraction + if( level > 1 && !mIsRoot ) { + float decli = Math::ACos( Vector3( newLocalOrientation * Vector3::UNIT_Y ).y ).valueRadians(); + float orien = Math::ACos( Vector3( newLocalOrientation * Vector3::UNIT_Z ).y ).valueRadians(); + // No idea why Weber & Penn used acos and then cos ?! + angle += mParameters->getAttractionUp() * decli * Math::Cos( orien ) / mParameters->getCurveRes( level ); + } + + angle = Math::DegreesToRadians( angle ); + localOrientation.FromAngleAxis( Radian( angle ), Vector3::UNIT_X ); + localOrientation = newLocalOrientation * localOrientation; + + y = mLength * ( ( float ) i / mParameters->getCurveRes( level ) ); + sectionRadius = mRadius * ( 1.0f - Math::Pow( y / mLength, 2 ) ); + + // flaring + if( level == 0 ) { + float y2 = 1.0f - 8.0f * ( ( float ) i / mParameters->getCurveRes( level ) ); + if( y2 < 0.0f ) + y2 = 0.0f; + sectionRadius *= 1.0f + mParameters->getFlare() * ( Math::Pow( 100, y2 ) - 1.0f ) * 0.01f; + } + + section = new Section; + section->setOrientation( localOrientation ); + section->setOrigin( localSectionOrigin ); + section->setGlobalOrigin( currentOrigin ); + section->setTexVCoord( ( float ) 0.1f * mLength * i / mParameters->getCurveRes( level ) ); + + if( level == 0 ) // lobbed? + section->create( mParameters->getNumLobes(), mParameters->getLobeDepth(), sectionRadius, mParameters->getNumVertices( level ) ); + else + section->create( 0, 0.0f, sectionRadius, mParameters->getNumVertices( level ) ); + + mSections.push_back( section ); + + newLocalOrientation = localOrientation; + currentOrigin += localOrientation * step; + } + mEndVertex = currentOrigin + localOrientation * localSectionOrigin; + + // Situate and spawn substems if this is not a root stem + if( !mIsRoot ) + growChildren( level ); + + // Situate leaves and fronds + if( level == mParameters->getNumLevels() - 1 && !mIsRoot ) { + growLeaves( level ); + growFronds( level ); + } + + // this is a trunk stem => grow roots + if( level == 0 ) + growRoots(); + + mIsGrown = true; + } + + void Stem::growChildren( unsigned char level ) { + if( level > mParameters->getNumLevels() ) + return; + + Quaternion rotQuat = Quaternion::IDENTITY; + Quaternion downQuat = Quaternion::IDENTITY; + Section* currentSection = 0; + Vector3 stemOrigin = Vector3::ZERO; + float rotate = getRandom( Math::PI ); + float downAngle = 0.0f; + float treeScale = mParameters->getScale() + getRandom( mParameters->getScaleV() ); + float baseLength = mParameters->getBaseSize() * treeScale; + float lengthChildMax = mParameters->getLength( level + 1 ) + getRandom( mParameters->getLengthV( level + 1 ) ); + float offset = 0.0f; + float length = 1.0f; + float radius = 1.0f; + + if( level == 0 ) + mNumSubStems = mParameters->getNumBranches( level + 1 ); + else if( level == 1 ) + mNumSubStems = ( unsigned int ) mParameters->getNumBranches( level + 1 ) * ( 0.2f + 0.8f * ( mLength / mParent->mLength ) / lengthChildMax ); + else + mNumSubStems = ( unsigned int ) mParameters->getNumBranches( level + 1 ) * ( 1.0f - 0.5f * ( mOffset / mParent->mLength ) ); + + for( unsigned int i = 0; i < mNumSubStems; ++i ) { + if( level == 0 ) + offset = mLength * ( mParameters->getBaseSize() + ( ( i + 1 ) * ( 1.0f - mParameters->getBaseSize() ) / ( mNumSubStems + 1 ) ) ); + else + offset = mLength * ( ( float ) ( i + 1 ) / ( mNumSubStems + 1 ) ); + + currentSection = findSection( offset / mLength, mParameters->getCurveRes( level ) ); + + if( level == 0 ) + length = mLength * lengthChildMax * shapeRatio( mParameters->getShape(), ( mLength - offset ) / ( mLength - ( treeScale * mParameters->getBaseSize() ) ) ); + else + length = lengthChildMax * ( mLength - 0.6f * offset ); + + radius = mRadius * Math::Pow( ( length / mLength ), mParameters->getRatioPower() ); + + // Down angle + if( mParameters->getDownAngleV( level + 1 ) >= 0.0f ) + downAngle = Math::DegreesToRadians( mParameters->getDownAngle( level + 1 ) + getRandom( mParameters->getDownAngleV( level + 1 ) ) ); + else { + float temp = ( level == 0 ) ? mLength - baseLength : mLength; + downAngle = Math::DegreesToRadians( mParameters->getDownAngle( level + 1 ) + getRandom( mParameters->getDownAngleV( level + 1 ) * ( 1.0f - 2.0f * shapeRatio( CONICAL, ( mLength - offset ) / temp ) ) ) ); + } + downQuat.FromAngleAxis( Radian( downAngle ), Vector3::UNIT_X ); + + // Rotate angle + if( mParameters->getRotate( level + 1 ) > 0.0f ) + rotate += Math::DegreesToRadians( mParameters->getRotate( level + 1 ) + getRandom( mParameters->getRotateV( level + 1 ) ) ); + else + rotate += Math::DegreesToRadians( 180.0f + mParameters->getRotate( level + 1 ) + getRandom( mParameters->getRotateV( level + 1 ) ) ); + + if( rotate > Math::TWO_PI ) + rotate -= Math::TWO_PI; + + rotQuat.FromAngleAxis( Radian( rotate ), Vector3::UNIT_Y ); + + + stemOrigin = currentSection->getOrientation() + * Vector3( 0.0f, offset - findSectionIndex( offset / mLength, mParameters->getCurveRes( level ) ) * mLength / mParameters->getCurveRes( level ), 0.0f ) + + currentSection->getGlobalOrigin(); + + // spawn + Stem* child = new Stem( mParameters, this ); + mSubStems.push_back( child ); + child->grow( currentSection->getOrientation() * rotQuat * downQuat, stemOrigin, radius, length, offset, level + 1 ); + } + } + + // TODO - this is almost a copy of growChildren + void Stem::growRoots() { + Quaternion rotQuat = Quaternion::IDENTITY; + Quaternion downQuat = Quaternion::IDENTITY; + Section* currentSection = mSections[0]; + float rotate = getRandom( Math::PI ); + float downAngle = 0.0f; + float treeScale = mParameters->getScale() + getRandom( mParameters->getScaleV() ); + float baseLength = mParameters->getBaseSize() * treeScale; + float lengthChildMax = mParameters->getLength( mParameters->getMaxLevels() ) + getRandom( mParameters->getLengthV( mParameters->getMaxLevels() ) ); + float length = 1.0f; + float radius = 1.0f; + + unsigned int numRoots = mParameters->getNumBranches( mParameters->getMaxLevels() ); + for( unsigned int i = 0; i < numRoots; ++i ) { + length = mLength * lengthChildMax; + radius = 3 * mRadius * Math::Pow( ( length / mLength ), mParameters->getRatioPower() ); + + // Down angle + if( mParameters->getDownAngleV( mParameters->getMaxLevels() ) >= 0.0f ) + downAngle = Math::DegreesToRadians( mParameters->getDownAngle( mParameters->getMaxLevels() ) + getRandom( mParameters->getDownAngleV( mParameters->getMaxLevels() ) ) ); + else { + float temp = mLength - baseLength; + downAngle = Math::DegreesToRadians( mParameters->getDownAngle( mParameters->getMaxLevels() ) + getRandom( mParameters->getDownAngleV( mParameters->getMaxLevels() ) * ( 1.0f - 2.0f * shapeRatio( CONICAL, mLength / temp ) ) ) ); + } + downQuat.FromAngleAxis( Radian( downAngle ), Vector3::UNIT_X ); + + // Rotate angle + if( mParameters->getRotate( mParameters->getMaxLevels() ) > 0.0f ) + rotate += Math::DegreesToRadians( mParameters->getRotate( mParameters->getMaxLevels() ) + getRandom( mParameters->getRotateV( mParameters->getMaxLevels() ) ) ); + else + rotate += Math::DegreesToRadians( 180.0f + mParameters->getRotate( mParameters->getMaxLevels() ) + getRandom( mParameters->getRotateV( mParameters->getMaxLevels() ) ) ); + + if( rotate > Math::TWO_PI ) + rotate -= Math::TWO_PI; + + rotQuat.FromAngleAxis( Radian( rotate ), Vector3::UNIT_Y ); + + // spawn + Stem* child = new Stem( mParameters, this ); + child->mIsRoot = true; + mSubStems.push_back( child ); + child->grow( currentSection->getOrientation() * rotQuat * downQuat, mOrigin, radius, length, 0.0f, mParameters->getMaxLevels() ); + } + } + + void Stem::growLeaves( unsigned char level ) { + float offset = 0.0f; + Section* currentSection = 0; + Vector3 leafPosition = Vector3::ZERO; + + float randomX = 0.0f; + float randomZ = 0.0f; + + mNumLeav... [truncated message content] |
From: <and...@us...> - 2008-01-16 05:28:48
|
Revision: 550 http://python-ogre.svn.sourceforge.net/python-ogre/?rev=550&view=rev Author: andy_miller Date: 2008-01-15 21:28:52 -0800 (Tue, 15 Jan 2008) Log Message: ----------- Cleanup a few extra files Removed Paths: ------------- trunk/python-ogre/ThirdParty/CaelumPrerequisites.h trunk/python-ogre/ThirdParty/NxOgreResourceStreamPtr.h Deleted: trunk/python-ogre/ThirdParty/CaelumPrerequisites.h =================================================================== --- trunk/python-ogre/ThirdParty/CaelumPrerequisites.h 2008-01-16 05:26:11 UTC (rev 549) +++ trunk/python-ogre/ThirdParty/CaelumPrerequisites.h 2008-01-16 05:28:52 UTC (rev 550) @@ -1,39 +0,0 @@ -#ifndef CAELUMPREREQUISITES_H -#define CAELUMPREREQUISITES_H - -// Include external headers -#include "Ogre.h" - -#define DllExport - -// Define the version code -#define CAELUM_VERSION_MAIN 0 -#define CAELUM_VERSION_SEC 2 -#define CAELUM_VERSION_TER 1 -#define CAELUM_VERSION = (CAELUM_VERSION_MAIN << 16) | (CAELUM_VERSION_SEC << 8) | CAELUM_VERSION_TER - -namespace caelum { - /// Resource group name for caelum resources. - extern DllExport Ogre::String RESOURCE_GROUP_NAME; - - /* Set a global camera distances modifier for the clipping distance. - This threshold will be substracted from the far clipping distance if applicable, else it will be - added to the near clipping distance (ie, if infinite far clipping distance is used). - */ - const float CAMERA_DISTANCE_MODIFIER = 0; - - // Render grounp for caelum stuff - // It's best to have them all together - enum CaelumRenderQueueGroupId - { - CAELUM_RENDER_QUEUE_STARFIELD = Ogre::RENDER_QUEUE_SKIES_EARLY + 0, - CAELUM_RENDER_QUEUE_SKYDOME = Ogre::RENDER_QUEUE_SKIES_EARLY + 1, - CAELUM_RENDER_QUEUE_SUN = Ogre::RENDER_QUEUE_SKIES_EARLY + 2, - CAELUM_RENDER_QUEUE_CLOUDS = Ogre::RENDER_QUEUE_SKIES_EARLY + 3, - }; -} - -// Log macro -#define LOG(msg) Ogre::LogManager::getSingleton().logMessage(msg); - -#endif //CAELUMPREREQUISITES_H Deleted: trunk/python-ogre/ThirdParty/NxOgreResourceStreamPtr.h =================================================================== --- trunk/python-ogre/ThirdParty/NxOgreResourceStreamPtr.h 2008-01-16 05:26:11 UTC (rev 549) +++ trunk/python-ogre/ThirdParty/NxOgreResourceStreamPtr.h 2008-01-16 05:28:52 UTC (rev 550) @@ -1,175 +0,0 @@ -// -// NxOgre a wrapper for the PhysX (formerly Novodex) physics library and the Ogre 3D rendering engine. -// Copyright (C) 2005 - 2007 Robin Southern and NxOgre.org http://www.nxogre.org -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License, or (at your option) any later version. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -// - -#ifndef __NXOGRE_RESOURCESTREAMPTR_H__ -#define __NXOGRE_RESOURCESTREAMPTR_H__ - -#include "NxOgrePrerequisites.h" - -namespace NxOgre { - - /** @brief A generic abstract class to read or to write to a Resource, without exacting knowing - what exactly it is. It takes on a SmartPtr role in life, and the resource will be only - deleted from memory when it is no longer used. - - @note All of ResourceStreamPtr code was used from the Ogre SmartPtr class, except for a changed - constructor and removal of template. - - @see Ogre::SmartPtr - */ - class NxExport ResourceStreamPtr { - - protected: - - ResourceStream* pStream; - unsigned int* pUseCount; - - public: - - OGRE_AUTO_SHARED_MUTEX // public to allow external locking - /** Constructor, does not initialise the ResourceStreamPtr. - @remarks - <b>Dangerous!</b> You have to call bind() before using the ResourceStreamPtr. - */ - ResourceStreamPtr(); - - ResourceStreamPtr(ResourceIdentifier); - ResourceStreamPtr(ResourceIdentifier, void*); - - ResourceStreamPtr(const ResourceStreamPtr& r) - : pStream(0), pUseCount(0) - { - // lock & copy other mutex pointer - - OGRE_SET_AUTO_SHARED_MUTEX_NULL - OGRE_MUTEX_CONDITIONAL(r.OGRE_AUTO_MUTEX_NAME) - { - OGRE_LOCK_MUTEX(*r.OGRE_AUTO_MUTEX_NAME) - OGRE_COPY_AUTO_SHARED_MUTEX(r.OGRE_AUTO_MUTEX_NAME) - pStream = r.pStream; - pUseCount = r.pUseCount; - // Handle zero pointer gracefully to manage STL containers - if(pUseCount) - { - ++(*pUseCount); - } - } - } - - void createStream(ResourceIdentifier); - void destroyStream(); - - ResourceStreamPtr& operator=(const ResourceStreamPtr& r) { - if (pStream == r.pStream) - return *this; - // Swap current data into a local copy - // this ensures we deal with rhs and this being dependent - ResourceStreamPtr tmp(r); - swap(tmp); - return *this; - } - - virtual ~ResourceStreamPtr() { - release(); - } - - ResourceStream& operator*() const { assert(pStream); return *pStream; } - ResourceStream* operator->() const { assert(pStream); return pStream; } - ResourceStream* get() const { return pStream; } - - /** Binds rep to the ResourceStreamPtr. - @remarks - Assumes that the ResourceStreamPtr is uninitialised! - */ - void bind(ResourceStream* rep) { - assert(!pStream && !pUseCount); - OGRE_NEW_AUTO_SHARED_MUTEX - OGRE_LOCK_AUTO_SHARED_MUTEX - pUseCount = new unsigned int(1); - pStream = rep; - } - - bool unique() const { OGRE_LOCK_AUTO_SHARED_MUTEX assert(pUseCount); return *pUseCount == 1; } - unsigned int useCount() const { OGRE_LOCK_AUTO_SHARED_MUTEX assert(pUseCount); return *pUseCount; } - unsigned int* useCountPointer() const { return pUseCount; } - - ResourceStream* getPointer() const { return pStream; } - - bool isNull(void) const { return pStream == 0; } - - void setNull(void) { - if (pStream) - { - // can't scope lock mutex before release incase deleted - release(); - pStream = 0; - pUseCount = 0; - } - } - - protected: - - void release(void) - { - bool destroyThis = false; - - /* If the mutex is not initialized to a non-zero value, then neither is pUseCount nor pStream. - */ - - OGRE_MUTEX_CONDITIONAL(OGRE_AUTO_MUTEX_NAME) - { - // lock own mutex in limited scope (must unlock before destroy) - OGRE_LOCK_AUTO_SHARED_MUTEX - if (pUseCount) - { - if (--(*pUseCount) == 0) - { - destroyThis = true; - } - } - } - if (destroyThis) - destroy(); - - OGRE_SET_AUTO_SHARED_MUTEX_NULL - } - - virtual void destroy(void); - - virtual void swap(ResourceStreamPtr &other) { - std::swap(pStream, other.pStream); - std::swap(pUseCount, other.pUseCount); - #if OGRE_THREAD_SUPPORT - std::swap(OGRE_AUTO_MUTEX_NAME, other.OGRE_AUTO_MUTEX_NAME); - #endif - } - - }; - - bool operator==(ResourceStreamPtr const& a, ResourceStreamPtr const& b){ - return a.get() == b.get(); - } - - bool operator!=(ResourceStreamPtr const& a, ResourceStreamPtr const& b) { - return a.get() != b.get(); - } - -}; // End of namespace - -#endif This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <and...@us...> - 2008-01-16 02:52:56
|
Revision: 547 http://python-ogre.svn.sourceforge.net/python-ogre/?rev=547&view=rev Author: andy_miller Date: 2008-01-15 18:53:00 -0800 (Tue, 15 Jan 2008) Log Message: ----------- Adding the 0.9 version of NxOgre Added Paths: ----------- trunk/python-ogre/ThirdParty/nxogre_0.9/ trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgre.h trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreActor.cpp trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreActor.h trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreActorBlueprint.cpp trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreActorBlueprint.h trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreBlueprint.h trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreBody.cpp trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreBody.h trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreCharacter.cpp trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreCharacter.h trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreCharacterController.cpp trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreCharacterController.h trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreCharacterHitReport.cpp trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreCharacterHitReport.h trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreCloth.cpp trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreCloth.h trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreClothRaycaster.cpp trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreClothRaycaster.h trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreCollisionModel.h trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreCompound.cpp trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreCompound.h trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreContainer.cpp trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreContainer.h trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreCooking.cpp trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreCooking.h trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreDebugRenderer.cpp trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreDebugRenderer.h trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreDominanceGroup.cpp trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreDominanceGroup.h trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreEnumsBlueprint.cpp trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreEnumsBlueprint.h trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreError.cpp trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreError.h trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreFluid.cpp trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreFluid.h trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreFluidMesh.cpp trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreFluidMesh.h trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreForceField.cpp trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreForceField.h trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreGlobalFunctions.cpp trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreGroup.cpp trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreGroup.h trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreHelper.cpp trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreHelper.h trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreHelpers.cpp trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreHelpers.h trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreIntersection.cpp trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreIntersection.h trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreJSON.cpp trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreJSON.h trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreJSONCollection.h trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreJSONRead.cpp trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreJSONSchema.h trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreJSONWrite.cpp trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreJoint.cpp trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreJoint.h trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreJointSet1.cpp trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreJointSet1.h trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreJointSet2.cpp trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreJointSet2.h trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreLog.cpp trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreLog.h trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreMaterial.cpp trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreMaterial.h trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreMeshManager.cpp trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreMeshManager.h trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreMotor.cpp trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreMotor.h trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreNxSerialiser.cpp trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreNxSerialiser.h trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreNxuStreamSerialiser.h trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreParametersBlueprint.h trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreParams.cpp trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreParams.h trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgrePhysXDriver.cpp trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgrePhysXDriver.h trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgrePose.cpp trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgrePose.h trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgrePrerequisites.h trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreRaycaster.cpp trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreRaycaster.h trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreRemoteDebuggerConnection.cpp trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreRemoteDebuggerConnection.h trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreScene.cpp trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreScene.h trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreSceneBlueprint.cpp trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreSceneBlueprint.h trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreSceneContactController.cpp trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreSceneContactController.h trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreSceneController.cpp trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreSceneController.h trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreSceneTriggerController.cpp trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreSceneTriggerController.h trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreSerialiser.cpp trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreSerialiser.h trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreShape.cpp trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreShape.h trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreShapeBlueprint.cpp trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreShapeBlueprint.h trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreShapeBlueprintConvex.cpp trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreShapeBlueprintConvex.h trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreShapeBlueprintMesh.cpp trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreShapeBlueprintMesh.h trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreShapeBlueprintPrimitives.cpp trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreShapeBlueprintPrimitives.h trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreShapeBlueprintTerrain.cpp trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreShapeBlueprintTerrain.h trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreShapeBlueprintWheel.cpp trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreShapeBlueprintWheel.h trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreShapeConvex.cpp trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreShapeConvex.h trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreShapeDescription.h trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreShapeDescriptionConvex.h trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreShapeDescriptionMesh.h trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreShapeDescriptionPrimitives.h trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreShapeDescriptionTerrain.h trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreShapeDescriptionWheel.h trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreShapeMesh.cpp trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreShapeMesh.h trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreShapePrimitives.cpp trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreShapePrimitives.h trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreShapeTerrain.cpp trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreShapeTerrain.h trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreShapeWheel.cpp trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreShapeWheel.h trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreSimpleShape.cpp trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreSimpleShape.h trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreSkeleton.cpp trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreSkeleton.h trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreSoftBody.cpp trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreSoftBody.h trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreStable.cpp trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreStable.h trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreState.h trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreStateMachine.h trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreSummary.cpp trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreSummary.h trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreTesting.cpp trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreTesting.h trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreTrigger.cpp trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreTrigger.h trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreUserAllocator.cpp trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreUserAllocator.h trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreUserData.h trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreUserStream.cpp trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreUserStream.h trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreWorld.cpp trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreWorld.h trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreWorldBlueprint.cpp trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreWorldBlueprint.h trunk/python-ogre/ThirdParty/nxogre_0.9/NxuStream2/ trunk/python-ogre/ThirdParty/nxogre_0.9/NxuStream2/NXU_Asc2Bin.cpp trunk/python-ogre/ThirdParty/nxogre_0.9/NxuStream2/NXU_Asc2Bin.h trunk/python-ogre/ThirdParty/nxogre_0.9/NxuStream2/NXU_ColladaExport.cpp trunk/python-ogre/ThirdParty/nxogre_0.9/NxuStream2/NXU_ColladaExport.h trunk/python-ogre/ThirdParty/nxogre_0.9/NxuStream2/NXU_ColladaImport.cpp trunk/python-ogre/ThirdParty/nxogre_0.9/NxuStream2/NXU_ColladaImport.h trunk/python-ogre/ThirdParty/nxogre_0.9/NxuStream2/NXU_File.cpp trunk/python-ogre/ThirdParty/nxogre_0.9/NxuStream2/NXU_File.h trunk/python-ogre/ThirdParty/nxogre_0.9/NxuStream2/NXU_Geometry.cpp trunk/python-ogre/ThirdParty/nxogre_0.9/NxuStream2/NXU_Geometry.h trunk/python-ogre/ThirdParty/nxogre_0.9/NxuStream2/NXU_GraphicsMesh.cpp trunk/python-ogre/ThirdParty/nxogre_0.9/NxuStream2/NXU_GraphicsMesh.h trunk/python-ogre/ThirdParty/nxogre_0.9/NxuStream2/NXU_PhysicsExport.cpp trunk/python-ogre/ThirdParty/nxogre_0.9/NxuStream2/NXU_PhysicsExport.h trunk/python-ogre/ThirdParty/nxogre_0.9/NxuStream2/NXU_PhysicsInstantiator.cpp trunk/python-ogre/ThirdParty/nxogre_0.9/NxuStream2/NXU_PhysicsInstantiator.h trunk/python-ogre/ThirdParty/nxogre_0.9/NxuStream2/NXU_Schema.cpp trunk/python-ogre/ThirdParty/nxogre_0.9/NxuStream2/NXU_Schema.h trunk/python-ogre/ThirdParty/nxogre_0.9/NxuStream2/NXU_SchemaStream.cpp trunk/python-ogre/ThirdParty/nxogre_0.9/NxuStream2/NXU_SchemaStream.h trunk/python-ogre/ThirdParty/nxogre_0.9/NxuStream2/NXU_SchemaTypes.h trunk/python-ogre/ThirdParty/nxogre_0.9/NxuStream2/NXU_Streaming.cpp trunk/python-ogre/ThirdParty/nxogre_0.9/NxuStream2/NXU_Streaming.h trunk/python-ogre/ThirdParty/nxogre_0.9/NxuStream2/NXU_cooking.cpp trunk/python-ogre/ThirdParty/nxogre_0.9/NxuStream2/NXU_cooking.h trunk/python-ogre/ThirdParty/nxogre_0.9/NxuStream2/NXU_customcopy.cpp trunk/python-ogre/ThirdParty/nxogre_0.9/NxuStream2/NXU_customcopy.h trunk/python-ogre/ThirdParty/nxogre_0.9/NxuStream2/NXU_helper.cpp trunk/python-ogre/ThirdParty/nxogre_0.9/NxuStream2/NXU_helper.h trunk/python-ogre/ThirdParty/nxogre_0.9/NxuStream2/NXU_hull.cpp trunk/python-ogre/ThirdParty/nxogre_0.9/NxuStream2/NXU_hull.h trunk/python-ogre/ThirdParty/nxogre_0.9/NxuStream2/NXU_string.cpp trunk/python-ogre/ThirdParty/nxogre_0.9/NxuStream2/NXU_string.h trunk/python-ogre/ThirdParty/nxogre_0.9/NxuStream2/NXU_tinystr.cpp trunk/python-ogre/ThirdParty/nxogre_0.9/NxuStream2/NXU_tinystr.h trunk/python-ogre/ThirdParty/nxogre_0.9/NxuStream2/NXU_tinyxml.cpp trunk/python-ogre/ThirdParty/nxogre_0.9/NxuStream2/NXU_tinyxml.h trunk/python-ogre/ThirdParty/nxogre_0.9/NxuStream2/NXU_tinyxmlerror.cpp trunk/python-ogre/ThirdParty/nxogre_0.9/NxuStream2/NXU_tinyxmlparser.cpp Removed Paths: ------------- trunk/python-ogre/ThirdParty/nxogreOld/ Added: trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgre.h =================================================================== --- trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgre.h (rev 0) +++ trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgre.h 2008-01-16 02:53:00 UTC (rev 547) @@ -0,0 +1,90 @@ +// +// NxOgre a wrapper for the PhysX (formerly Novodex) physics library and the Ogre 3D rendering engine. +// Copyright (C) 2005 - 2007 Robin Southern and NxOgre.org http://www.nxogre.org +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +// + +#ifndef __NXOGRE_H__ +#define __NXOGRE_H__ + +/////////////////////////////////////////// + +#include "NxOgreStable.h" +#include "NxOgrePrerequisites.h" +#include "NxOgrePhysXDriver.h" +#include "NxOgreError.h" +#include "NxOgreLog.h" + +/////////////////////////////////////////// + +#include "NxOgreActor.h" +#include "NxOgreActorBlueprint.h" +#include "NxOgreBody.h" +#include "NxOgreContainer.h" +#include "NxOgreCooking.h" +#include "NxOgreCharacter.h" +#include "NxOgreCharacterController.h" +#include "NxOgreCharacterHitReport.h" +#include "NxOgreCloth.h" +#include "NxOgreClothRaycaster.h" +#include "NxOgreCompound.h" +#include "NxOgreDebugRenderer.h" +#include "NxOgreDominanceGroup.h" +#include "NxOgreEnumsBlueprint.h" +#include "NxOgreFluid.h" +#include "NxOgreFluidMesh.h" +#include "NxOgreForceField.h" +#include "NxOgreGroup.h" +#include "NxOgreHelpers.h" +#include "NxOgreJointSet1.h" +#include "NxOgreJointSet2.h" +#include "NxOgreHelper.h" +#include "NxOgreIntersection.h" +#include "NxOgreMaterial.h" +#include "NxOgreMotor.h" +#include "NxOgreParams.h" +#include "NxOgrePose.h" +#include "NxOgreRaycaster.h" +#include "NxOgreRemoteDebuggerConnection.h" +#include "NxOgreSerialiser.h" +#include "NxOgreScene.h" +#include "NxOgreSceneBlueprint.h" +#include "NxOgreSceneController.h" +#include "NxOgreSceneContactController.h" +#include "NxOgreShape.h" +#include "NxOgreShapeBlueprint.h" +#include "NxOgreShapeBlueprintConvex.h" +#include "NxOgreShapeBlueprintMesh.h" +#include "NxOgreShapeBlueprintPrimitives.h" +#include "NxOgreShapeBlueprintTerrain.h" +#include "NxOgreShapeBlueprintWheel.h" +#include "NxOgreShapeConvex.h" +#include "NxOgreShapeMesh.h" +#include "NxOgreShapePrimitives.h" +#include "NxOgreShapeTerrain.h" +#include "NxOgreShapeWheel.h" +#include "NxOgreSimpleShape.h" +#include "NxOgreSoftBody.h" +#include "NxOgreState.h" +#include "NxOgreStateMachine.h" +#include "NxOgreTesting.h" +#include "NxOgreTrigger.h" +#include "NxOgreUserStream.h" +#include "NxOgreUserAllocator.h" +#include "NxOgreWorld.h" +#include "NxOgreWorldBlueprint.h" + +#endif Added: trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreActor.cpp =================================================================== --- trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreActor.cpp (rev 0) +++ trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreActor.cpp 2008-01-16 02:53:00 UTC (rev 547) @@ -0,0 +1,1117 @@ +// +// NxOgre a wrapper for the PhysX (formerly Novodex) physics library and the Ogre 3D rendering engine. +// Copyright (C) 2005 - 2007 Robin Southern and NxOgre.org http://www.nxogre.org +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +// + +#include "NxOgreStable.h" +#include "NxOgreActor.h" +#include "NxOgreActorBlueprint.h" +#include "NxOgreUserData.h" // For NxActorUserData for NxActor +#include "NxOgrePose.h" // For conversions +#include "NxOgreHelpers.h" // For conversions +#include "NxOgreScene.h" // For Actor::mOwner +#include "NxOgreShapeBlueprint.h" // For ShapeBlueprint System +#include "NxOgreDominanceGroup.h" // For Dominance Groups +#include "NxOgreGroup.h" // For ActorGroup and ShapeGroups +#include "NxOgreContainer.h" // For Getting an ActorGroup +#include "NxOgreActorBlueprint.h" // For Quick Duplication. + +namespace NxOgre { + +////////////////////////////////////////////////////////// + +void ActorParams::setToDefault() { + + mDensity = 0.0f; + mActorFlags = 0; + mGroupAsIndex = 0; + mGroupAsName = ""; +#if NX_SDK_VERSION_NUMBER >= 272 + mDominanceGroupAsIndex = 0; + mDominanceGroupAsName = ""; +#endif +#if NX_SDK_VERSION_NUMBER >= 260 + mCompartment = NULL; +#endif + mMassLocalPose . id(); + mMassSpaceInertia . zero(); + mLinearVelocity . zero(); + mAngularVelocity . zero(); + mWakeUpCounter = 20.0f*0.02f; + mMass = 10.0f; + mLinearDamping = 0.0f; + mAngularDamping = 0.05f; + mMaxAngularVelocity = -1.0f; + mBodyFlags = NX_BF_VISUALIZATION; + mSleepLinearVelocity = -1.0f; + mSleepAngularVelocity = -1.0f; + mCCDMotionThreshold = 0.0f; + mSolverIterationCount = 4; + mBodyFlags = NX_BF_ENERGY_SLEEP_TEST; + mSleepEnergyThreshold = -1.0f; + mSleepDamping = 0.0f; + + mNodeScale = Ogre::Vector3(1,1,1); + mNodeName = ""; + mNodeShadows = true; + +} + +////////////////////////////////////////////////////////// + +void ActorParams::parse(Parameters P) { + + for (Parameters::iterator p = P.begin(); p != P.end();p++) { + + if ((*p).first == "static") { + if ( (*p).second.substr(0,1) == "y" || (*p).second.substr(0,1) == "Y") { + mMass = 0; + mDensity = 0; + continue; + } + else { + mMass = 10; + mDensity = 0; + } + } + + if ((*p).first == "kinematic") { + if ( (*p).second.substr(0,1) == "y" || (*p).second.substr(0,1) == "Y") { + mBodyFlags |= NX_BF_KINEMATIC; + if (mMass == 0 || mDensity == 0) { + mMass = 1; + mDensity = 0; + } + } + } + + if (Set("density", (*p), mDensity)) continue; + if (Set("group", (*p), mGroupAsName)) continue; + if (Set("group-index", (*p), mGroupAsIndex)) continue; +#if NX_SDK_VERSION_NUMBER >= 272 + if (Set("dominancegroup", (*p), mDominanceGroupAsName)) continue; + if (Set("dominancegroup-index", (*p), mDominanceGroupAsIndex)) continue; +#endif + if (Set("massspaceinertia", (*p), mMassSpaceInertia)) continue; + if (Set("linearvelocity", (*p), mLinearVelocity)) continue; + if (Set("angularvelocity", (*p), mAngularVelocity)) continue; + if (Set("wakeupcounter", (*p), mWakeUpCounter)) continue; + if (Set("mass", (*p), mMass)) continue; + if (Set("lineardamping", (*p), mLinearDamping)) continue; + if (Set("angulardamping", (*p), mAngularDamping)) continue; + if (Set("maxangularvelocity", (*p), mMaxAngularVelocity)) continue; + if (Set("sleepangularvelocity", (*p), mSleepAngularVelocity)) continue; + if (Set("ccdmotionthreshold", (*p), mCCDMotionThreshold)) continue; + if (Set("solveriterationcount", (*p), mSolverIterationCount)) continue; + if (Set("sleepenergythreshold", (*p), mSleepEnergyThreshold)) continue; + if (Set("sleepdamping", (*p), mSleepDamping)) continue; + if (Set("node-scale", (*p), mNodeScale)) continue; + if (Set("node-shadows", (*p), mNodeShadows)) continue; + if (Set("node", (*p), mNodeName)) continue; + + } + +} + +////////////////////////////////////////////////////////// + +void ActorParams::fromNxActorDesc(NxActorDesc& desc) { + + mDensity = desc.density; + mActorFlags = desc.flags; + mGroupAsIndex = desc.group; +#if NX_SDK_VERSION_NUMBER >= 272 + mDominanceGroupAsIndex = desc.dominanceGroup; +#endif +#if NX_SDK_VERSION_NUMBER >= 260 + mCompartment = desc.compartment; +#endif +} + +////////////////////////////////////////////////////////// + +void ActorParams::fromNxBodyDesc(NxBodyDesc& desc) { + + mMassLocalPose = desc.massLocalPose; + mMassSpaceInertia = desc.massSpaceInertia; + mLinearVelocity = desc.linearVelocity; + mAngularVelocity = desc.angularVelocity; + mWakeUpCounter = desc.wakeUpCounter; + mMass = desc.mass; + mLinearDamping = desc.linearDamping; + mAngularDamping = desc.angularDamping; + mMaxAngularVelocity = desc.maxAngularVelocity; + mBodyFlags = desc.flags; + mSleepLinearVelocity = desc.sleepLinearVelocity; + mSleepAngularVelocity = desc.sleepAngularVelocity; + mCCDMotionThreshold = desc.CCDMotionThreshold; + mSolverIterationCount = desc.solverIterationCount; + mBodyFlags = desc.flags; + mSleepEnergyThreshold = desc.sleepEnergyThreshold; + mSleepDamping = desc.sleepDamping; + +} + +////////////////////////////////////////////////////////// + +Actor::Actor(const NxString& Identifier, Scene* scene, bool isActorBased) : mName(Identifier), mOwner(scene) { + mActor = 0; + if (isActorBased) + mOwner->_registerActor(mName, this); +} + +////////////////////////////////////////////////////////// + +Actor::Actor(const NxString& name, Scene* scene, ShapeBlueprint *shape, const Pose& pose, ActorParams params) : mName(name), mOwner(scene) { + + if (name.length() == 0) { + mName = NxCreateID(scene->getNbActors(), "Actor"); + mVisualIdentifier = NxString(); + } + else { + + std::vector<NxString> splitID = Ogre::StringUtil::split(name, ";", 2); + + NxString identifier; + + if (splitID.size() == 1) { + identifier = name; + mVisualIdentifier = name; + } + else { + identifier = splitID[0]; + mVisualIdentifier = splitID[1]; + Ogre::StringUtil::trim(mVisualIdentifier); + } + + Ogre::StringUtil::trim(identifier); + + if (identifier.substr(0,1) == ">") { + mName = identifier.substr(1, identifier.length() - 1); + if (scene->getActors()->has(mName)) { + NxThrow_Error("Duplicate Actor with identifier '" + mName + "' found!"); + } + + } + else if (scene->getActors()->has(identifier)) { + // Generate a identifier based on the the suggested name. + // i.e. + // myBody -> myBody 1 + // myBody10 -> myBody 11 + + Actors actors; + scene->getActors()->CopyTo(actors); + + NxU32 highest = 0; + NxString workingName; + for(Actor* a = actors.begin();a = actors.next();) { + if (Ogre::StringUtil::startsWith(a->getName(), identifier, false)) { + workingName = a->getName(); + workingName = workingName.substr(identifier.length(), workingName.length() - identifier.length()); + std::stringstream ss(workingName); + NxU32 current = 0; + ss >> current; + if (current > highest) + highest = current; + } + } + + highest++; + mName = identifier; + mName.append(Ogre::StringConverter::toString(highest)); + } + else { + mName = identifier; + } + } + + _createActor(shape,pose,params); + mOwner->_registerActor(mName, this); +} + +////////////////////////////////////////////////////////// + +Actor::~Actor() { + + mOwner->_unregisterActor(mName); + + if (!isDead()) + _destroyActor(); + +} + +////////////////////////////////////////////////////////// + +void Actor::_createActor(ShapeBlueprint *shape, const Pose& pose, ActorParams params) { + + NxActorDesc ad; + NxBodyDesc bd; + ad.setToDefault(); + bd.setToDefault(); + + mNxActorUserData = new NxActorUserData(this, NxActorUserData::T_Actor); +#if NX_SDK_VERSION_NUMBER >= 260 + ad.compartment = params.mCompartment; +#endif + if (params.mMass == 0) + ad.density = params.mDensity; +#if NX_SDK_VERSION_NUMBER >= 272 + if (params.mDominanceGroupAsIndex != 0) + ad.dominanceGroup = params.mDominanceGroupAsIndex; + else if (params.mDominanceGroupAsName.length() > 0) + ad.dominanceGroup = mOwner->getDominanceGroup(params.mDominanceGroupAsName)->getGroupID(); +#endif + ad.flags = params.mActorFlags; + + ad.globalPose.t = pose.getVec3(); + ad.globalPose.M.fromQuat(pose.getQuat()); + + if (params.mGroupAsIndex != 0) + ad.group = params.mGroupAsIndex; + else if (params.mGroupAsName.length() > 0) + ad.group = mOwner->getActorGroup(params.mGroupAsName)->getGroupID(); + + ad.userData = mNxActorUserData; + + if (params.mDensity == 0 && params.mMass == 0) { + ad.body = NULL; + } + else { + bd.angularDamping = params.mAngularDamping; + bd.angularVelocity = params.mAngularVelocity; + bd.CCDMotionThreshold = params.mCCDMotionThreshold; + bd.flags = params.mBodyFlags; + bd.linearDamping = params.mLinearDamping; + bd.linearVelocity = params.mLinearVelocity; + if (ad.density == 0) + bd.mass = params.mMass; + bd.massLocalPose = params.mMassLocalPose; + bd.massSpaceInertia = params.mMassSpaceInertia; + bd.maxAngularVelocity = params.mMaxAngularVelocity; + bd.sleepAngularVelocity = params.mSleepAngularVelocity; + bd.sleepDamping = params.mSleepDamping; + bd.sleepEnergyThreshold = params.mSleepEnergyThreshold; + bd.sleepLinearVelocity = params.mSleepLinearVelocity; + bd.solverIterationCount = params.mSolverIterationCount; + bd.wakeUpCounter = params.mWakeUpCounter; + ad.body = &bd; + } + + shape->_bindToActorDescription(this, 0, ad.shapes); + + mActor = mOwner->mScene->createActor(ad); + + if (!mActor) { + std::stringstream ss; + ss << "Creation of Actor with the identifier '" << mName << "' failed." << std::endl; + NxThrow_Error(ss.str()); + return; + } + + if (!shape->isShared()) + delete shape; + + NxU32 nbShapes = mActor->getNbShapes(); + NxShape*const* shapes = mActor->getShapes(); + + int i=0; + while (nbShapes--) { + mCollisionModel[i]->_bindNxShapeToShape(shapes[nbShapes]); + i++; + } + +#if (OGRE_VERSION_MINOR >= 5) + mBirthFrame = Ogre::Root::getSingletonPtr()->getNextFrameNumber() - 1; +#else + mBirthFrame = Ogre::Root::getSingletonPtr()->getCurrentFrameNumber(); +#endif +} + +////////////////////////////////////////////////////////// + +void Actor::_destroyActor() { + mCollisionModel.destroyAllOwned(); + delete mNxActorUserData; + mOwner->mScene->releaseActor(*mActor); + mActor = 0; +} + +////////////////////////////////////////////////////////// + +void Actor::simulate(float dT) { + shapeSimulate(dT); +} + +////////////////////////////////////////////////////////// + +void Actor::render(float) { + // No. +} + +////////////////////////////////////////////////////////// + +void Actor::shapeSimulate(float t) { + for(Shape* shape = mDynamicCollisionModel.begin();shape = mDynamicCollisionModel.next();) + shape->simulate(t); +} + +////////////////////////////////////////////////////////// + +void Actor::shapeRender(float t) { + for(Shape* shape = mDynamicCollisionModel.begin();shape = mDynamicCollisionModel.next();) + shape->render(t); +} + +////////////////////////////////////////////////////////// + +void Actor::setName(NxString name) { + mOwner->mActors.rename(mName, name); + mName = name; +} + +////////////////////////////////////////////////////////// + +NxString Actor::getName() { + return mName; +} + +////////////////////////////////////////////////////////// + +NxScene* Actor::getNxScene() { + return mOwner->getNxScene(); +} + +////////////////////////////////////////////////////////// + +Actor* Actor::duplicate(const NxString& name, const Pose& p) { + Blueprints::ActorBlueprint* ab = new Blueprints::ActorBlueprint(); + ab->serialise(this, mOwner); + Actor* a = ab->unserialise(name, mOwner); + a->setGlobalPose(p); + delete ab; + return a; +} + +////////////////////////////////////////////////////////// + +void Actor::setGlobalPose(const Pose& pose) { + mActor->setGlobalPose(pose.toMat34()); +} + +////////////////////////////////////////////////////////// + +Pose Actor::getGlobalPose() { + static Pose p; + p.fromMat34(mActor->getGlobalPose()); + return p; +} + +////////////////////////////////////////////////////////// + +Ogre::Quaternion Actor::getGlobalOrientation() { + return toQuaternion(mActor->getGlobalOrientationQuat()); +} + +////////////////////////////////////////////////////////// + +void Actor::setGlobalOrientation(const Ogre::Quaternion& quat) { + mActor->setGlobalOrientation(toNxQuat(quat)); +} + +////////////////////////////////////////////////////////// + +Ogre::Vector3 Actor::getGlobalPosition() { + return toVector3(mActor->getGlobalPosition()); +} + +////////////////////////////////////////////////////////// + +void Actor::setGlobalPosition(const Ogre::Vector3& vec) { + mActor->setGlobalPosition(toNxVec3(vec)); +} + +////////////////////////////////////////////////////////// + +void Actor::moveGlobalPose(const Pose& pose) { + mActor->moveGlobalPose(pose.toMat34()); +} + +////////////////////////////////////////////////////////// + +void Actor::moveGlobalPosition(const Ogre::Vector3& vec) { + mActor->moveGlobalPosition(toNxVec3(vec)); +} + +////////////////////////////////////////////////////////// + +void Actor::moveGlobalOrientation(const Ogre::Quaternion& quat) { + mActor->moveGlobalOrientationQuat(toNxQuat(quat)); +} + +//////////////////////////////////////////////////////// + +void Actor::moveTowards(const Pose& p, float force) { + NxVec3 fc = p.v - mActor->getGlobalPosition(); + fc *= force; + fc -= mActor->getPointVelocity(mActor->getGlobalPosition()); + mActor->addForceAtPos(fc, mActor->getGlobalPosition()); +} + +//////////////////////////////////////////////////////// + +#if 0 +const ShapeBlueprint& Actor::createShapeDescription(const ShapeBlueprint& s) { + NxUnderConstruction; + return s; +} + +////////////////////////////////////////////////////////// + +void Actor::destroyShapeDescription(const ShapeBlueprint&) { + NxUnderConstruction; +} + +////////////////////////////////////////////////////////// + +Ogre::uint Actor::getNbShapeDescriptions() { + return mActor->getNbShapeDescriptions(); +} + +////////////////////////////////////////////////////////// + +std::vector<const ShapeBlueprint&> Actor::getAllShapeDescriptions() { + NxUnderConstruction; + std::vector<const ShapeBlueprint&> s; + return s; +} + +////////////////////////////////////////////////////////// + +ShapeBlueprint Actor::getFirstShapeDescription() { + NxUnderConstruction; + return NULL; +} + +////////////////////////////////////////////////////////// + +ShapeBlueprint Actor::getShapeDescription(Ogre::uint id) { + NxUnderConstruction; + return NULL; +} +#endif + +////////////////////////////////////////////////////////// + +void Actor::setGroup(ActorGroup* ag) { + mActor->setGroup(ag->getGroupID()); +} + +////////////////////////////////////////////////////////// + +void Actor::setGroup(const NxString& GroupIdentifier) { + mActor->setGroup(mOwner->getActorGroups()->get(GroupIdentifier)->getGroupID()); +} + +////////////////////////////////////////////////////////// + +void Actor::setGroup(NxActorGroup agid) { + mActor->setGroup(agid); +} + +////////////////////////////////////////////////////////// + +ActorGroup* Actor::getGroup() const { + NxActorGroup agid = mActor->getGroup(); + return mOwner->getActorGroupsByIndex()->get(agid); +} + +////////////////////////////////////////////////////////// + +void Actor::raiseActorFlag(NxActorFlag f) { + mActor->raiseActorFlag(f); +} + +////////////////////////////////////////////////////////// + +void Actor::clearActorFlag(NxActorFlag f) { + mActor->clearActorFlag(f); +} + +////////////////////////////////////////////////////////// + +bool Actor::hasActorFlag(NxActorFlag f) const { + return mActor->readActorFlag(f); +} +////////////////////////////////////////////////////////// + +bool Actor::isDynamic() const { + return mActor->isDynamic(); +} + +////////////////////////////////////////////////////////// + +void Actor::setCMassOffsetLocalPose(const Pose& pose) { + mActor->setCMassOffsetLocalPose(pose.toMat34()); +} + +////////////////////////////////////////////////////////// + +void Actor::setCMassOffsetLocalPosition(const Ogre::Vector3& vec) { + mActor->setCMassOffsetLocalPosition(toNxVec3(vec)); +} + +////////////////////////////////////////////////////////// + +void Actor::setCMassOffsetLocalOrientation(const NxMat33& m) { + mActor->setCMassOffsetLocalOrientation(m); +} + +////////////////////////////////////////////////////////// + +void Actor::setCMassOffsetLocalOrientation(const Ogre::Matrix3& vec) { + NxUnderConstruction; + +} + +////////////////////////////////////////////////////////// + +void Actor::setCMassOffsetGlobalPose(const Pose& pose) { + mActor->setCMassOffsetGlobalPose(pose.toMat34()); +} + +////////////////////////////////////////////////////////// + +void Actor::setCMassOffsetGlobalPosition(const Ogre::Vector3& vec) { + mActor->setCMassOffsetGlobalPosition(toNxVec3(vec)); +} + +////////////////////////////////////////////////////////// + +void Actor::setCMassOffsetGlobalOrientation(const NxMat33& m) { + mActor->setCMassOffsetGlobalOrientation(m); +} + +////////////////////////////////////////////////////////// + +void Actor::setCMassOffsetGlobalOrientation(const Ogre::Matrix3& quat) { + NxUnderConstruction; + NxMat33 m; + mActor->setCMassOffsetGlobalOrientation(m); +} + +////////////////////////////////////////////////////////// + +void Actor::setCMassGlobalPose(const Pose& pose) { + mActor->setCMassGlobalPose(pose.toMat34()); +} + +////////////////////////////////////////////////////////// + +void Actor::setCMassGlobalPosition(const Ogre::Vector3& vec) { + mActor->setCMassGlobalPosition(toNxVec3(vec)); +} + +////////////////////////////////////////////////////////// + +void Actor::setCMassGlobalOrientation(const Ogre::Quaternion& quat) { + NxUnderConstruction; + NxMat33 m; + mActor->setCMassGlobalOrientation(m); +} +////////////////////////////////////////////////////////// + + +Pose Actor::getCMassLocalPose() const { + Pose pose; + pose.fromMat34(mActor->getCMassLocalPose()); + return pose; +} + +////////////////////////////////////////////////////////// + +Ogre::Vector3 Actor::getCMassLocalPosition() const { + return toVector3(mActor->getCMassLocalPosition()); +} + +////////////////////////////////////////////////////////// + +Ogre::Quaternion Actor::getCMassLocalOrientation() const { + return toQuaternion(mActor->getCMassLocalOrientation()); +} + +////////////////////////////////////////////////////////// + +Pose Actor::getCMassGlobalPose() const { + Pose pose; + pose.fromMat34(mActor->getCMassGlobalPose()); + return pose; +} + +////////////////////////////////////////////////////////// + +Ogre::Vector3 Actor::getCMassGlobalPosition() const { + return toVector3(mActor->getCMassGlobalPosition()); +} + +////////////////////////////////////////////////////////// + +Ogre::Quaternion Actor::getCMassGlobalOrientation() const { + NxQuat quat; + mActor->getCMassGlobalOrientation().toQuat(quat); + return toQuaternion(quat); +} + +////////////////////////////////////////////////////////// + + +void Actor::setMass(NxReal r) { + mActor->setMass(r); +} + +////////////////////////////////////////////////////////// + +NxReal Actor::getMass() const { + return mActor->getMass(); +} + +////////////////////////////////////////////////////////// + + +void Actor::setMassSpaceInertiaTensor(const Ogre::Vector3& vec) { + mActor->setMassSpaceInertiaTensor(toNxVec3(vec)); +} + +////////////////////////////////////////////////////////// + +Ogre::Vector3 Actor::getMassSpaceInertiaTensor() const { + return toVector3(mActor->getMassSpaceInertiaTensor()); +} + +////////////////////////////////////////////////////////// + +Ogre::Matrix3 Actor::getGlobalInertiaTensor() const { + NxUnderConstruction; + Ogre::Matrix3 m; + return m; +} + +////////////////////////////////////////////////////////// + +Ogre::Matrix3 Actor::getGlobalInertiaTensorInverse() const { + NxUnderConstruction; + Ogre::Matrix3 m; + return m; +} + +////////////////////////////////////////////////////////// + + +void Actor::updateMassFromShapeFromDensity(NxReal r) { + mActor->updateMassFromShapes(r,0); +} + +////////////////////////////////////////////////////////// + +void Actor::updateMassFromShapeAsMass(NxReal r) { + mActor->updateMassFromShapes(0,r); +} + +////////////////////////////////////////////////////////// + +void Actor::setLinearDamping(NxReal r) { + mActor->setLinearDamping(r); +} + +////////////////////////////////////////////////////////// + +NxReal Actor::getLinearDamping() const { + return mActor->getLinearDamping(); +} + +////////////////////////////////////////////////////////// + + +void Actor::setAngularDamping(NxReal r) { + mActor->setAngularDamping(r); +} + +////////////////////////////////////////////////////////// + +NxReal Actor::getAngularDamping() const { + return mActor->getAngularDamping(); +} + +////////////////////////////////////////////////////////// + +void Actor::setLinearVelocity(const Ogre::Vector3& vec) { + mActor->setLinearVelocity(toNxVec3(vec)); +} + +////////////////////////////////////////////////////////// + +void Actor::setAngularVelocity(const Ogre::Vector3& vec) { + mActor->setAngularVelocity(toNxVec3(vec)); +} + +////////////////////////////////////////////////////////// + + +Ogre::Vector3 Actor::getLinearVelocity() const { + return toVector3(mActor->getLinearVelocity()); +} + +////////////////////////////////////////////////////////// + +Ogre::Vector3 Actor::getAngularVelocity() const { + return toVector3(mActor->getAngularVelocity()); +} + +////////////////////////////////////////////////////////// + + +void Actor::setMaxAngularVelocity(NxReal r) { + mActor->setMaxAngularVelocity(r); +} + +////////////////////////////////////////////////////////// + +NxReal Actor::getMaxAngularVelocity() const { + return mActor->getMaxAngularVelocity(); +} + +////////////////////////////////////////////////////////// + +void Actor::setCCDMotionThreshold(NxReal r) { + mActor->setCCDMotionThreshold(r); +} + +////////////////////////////////////////////////////////// + +NxReal Actor::getCCDMotionThreshold() const { + return mActor->getCCDMotionThreshold(); +} + +////////////////////////////////////////////////////////// + +void Actor::setLinearMomentum(const Ogre::Vector3& vec) { + mActor->setLinearMomentum(toNxVec3(vec)); +} + +////////////////////////////////////////////////////////// + +void Actor::setAngularMomentum(const Ogre::Vector3& vec) { + mActor->setAngularMomentum(toNxVec3(vec)); +} + +////////////////////////////////////////////////////////// + +Ogre::Vector3 Actor::getLinearMomentum() const { + return toVector3(mActor->getLinearMomentum()); +} + +////////////////////////////////////////////////////////// + +Ogre::Vector3 Actor::getAngularMomentum() const { + return toVector3(mActor->getAngularMomentum()); +} + +////////////////////////////////////////////////////////// + +void Actor::addForceAtPos(const Ogre::Vector3& force, const Ogre::Vector3& pos, NxForceMode mode, bool wakeup) { + mActor->addForceAtPos(toNxVec3(force), toNxVec3(pos), mode, wakeup); +} + +////////////////////////////////////////////////////////// + +void Actor::addForceAtLocalPos(const Ogre::Vector3& force, const Ogre::Vector3& pos, NxForceMode mode, bool wakeup) { + mActor->addForceAtLocalPos(toNxVec3(force), toNxVec3(pos), mode, wakeup); +} + +////////////////////////////////////////////////////////// + +void Actor::addLocalForceAtPos(const Ogre::Vector3& force, const Ogre::Vector3& pos, NxForceMode mode, bool wakeup) { + mActor->addLocalForceAtPos(toNxVec3(force), toNxVec3(pos), mode, wakeup); +} + +////////////////////////////////////////////////////////// + +void Actor::addLocalForceAtLocalPos(const Ogre::Vector3& force, const Ogre::Vector3& pos, NxForceMode mode, bool wakeup) { + mActor->addLocalForceAtLocalPos(toNxVec3(force), toNxVec3(pos), mode, wakeup); +} + +////////////////////////////////////////////////////////// + +void Actor::addForce(const Ogre::Vector3& force, NxForceMode mode, bool wakeup) { + mActor->addForce(toNxVec3(force), mode, wakeup); +} + +////////////////////////////////////////////////////////// + +void Actor::addLocalForce(const Ogre::Vector3& force, NxForceMode mode, bool wakeup) { + mActor->addLocalForce(toNxVec3(force), mode, wakeup); +} + +////////////////////////////////////////////////////////// + +void Actor::addTorque(const Ogre::Vector3& torque, NxForceMode mode, bool wakeup) { + mActor->addTorque(toNxVec3(torque), mode, wakeup); +} + +////////////////////////////////////////////////////////// + +void Actor::addLocalTorque(const Ogre::Vector3& torque, NxForceMode mode, bool wakeup) { + mActor->addLocalTorque(toNxVec3(torque), mode, wakeup); +} + +////////////////////////////////////////////////////////// + +NxReal Actor::computeKineticEnergy() const { + return mActor->computeKineticEnergy(); +} + +////////////////////////////////////////////////////////// + +Ogre::Vector3 Actor::getPointVelocity(const Ogre::Vector3& vec) const { + return toVector3(mActor->getPointVelocity(toNxVec3(vec))); +} + +////////////////////////////////////////////////////////// + +Ogre::Vector3 Actor::getLocalPointVelocity(const Ogre::Vector3& vec) const { + return toVector3(mActor->getLocalPointVelocity(toNxVec3(vec))); +} + +////////////////////////////////////////////////////////// + +bool Actor::isGroupSleeping() const { + return mActor->isGroupSleeping(); +} + +////////////////////////////////////////////////////////// + +bool Actor::isSleeping() const { + return mActor->isSleeping(); +} + +////////////////////////////////////////////////////////// + +NxReal Actor::getSleepLinearVelocity() const { + return mActor->getSleepLinearVelocity(); +} + +////////////////////////////////////////////////////////// + +void Actor::setSleepLinearVelocity(NxReal threshold) { + mActor->setSleepLinearVelocity(threshold); +} + +////////////////////////////////////////////////////////// + +NxReal Actor::getSleepAngularVelocity() const { + return mActor->getSleepAngularVelocity(); +} + +////////////////////////////////////////////////////////// + +void Actor::setSleepAngularVelocity(NxReal threshold) { + mActor->setSleepAngularVelocity(threshold); +} + +////////////////////////////////////////////////////////// + +NxReal Actor::getSleepEnergyThreshold() const { + return mActor->getSleepEnergyThreshold(); +} + +////////////////////////////////////////////////////////// + +void Actor::setSleepEnergyThreshold(NxReal threshold) { + mActor->setSleepEnergyThreshold(threshold); +} + +////////////////////////////////////////////////////////// + +void Actor::wakeUp(NxReal wakeCounterValue) { + mActor->wakeUp(wakeCounterValue); +} + +////////////////////////////////////////////////////////// + +void Actor::putToSleep() { + mActor->putToSleep(); +} + +////////////////////////////////////////////////////////// + +void Actor::raiseBodyFlag(NxBodyFlag f) { + mActor->raiseBodyFlag(f); +} + +////////////////////////////////////////////////////////// + +void Actor::clearBodyFlag(NxBodyFlag f) { + mActor->clearBodyFlag(f); +} + +////////////////////////////////////////////////////////// + +bool Actor::hasBodyFlag(NxBodyFlag f) const { + return mActor->readBodyFlag(f); +} + +////////////////////////////////////////////////////////// + +void Actor::setSolverIterationCount(NxU32 c) { + mActor->setSolverIterationCount(c); +} + +////////////////////////////////////////////////////////// + +NxU32 Actor::getSolverIterationCount() const { + return mActor->getSolverIterationCount(); +} + +////////////////////////////////////////////////////////// + +#if NX_SUPPORT_SWEEP_API + +NxU32 Actor::linearSweep(const Ogre::Vector3& motion, NxU32 flags, void* userData, NxU32 nbShapeDescriptions, NxSweepQueryHit* shapes, NxUserEntityReport<NxSweepQueryHit>* callback, const NxSweepCache* sweepCache) { + return mActor->linearSweep(toNxVec3(motion), flags, userData, nbShapeDescriptions, shapes, callback, sweepCache); +} + +#endif + +////////////////////////////////////////////////////////// + +#if NX_SDK_VERSION_NUMBER >= 260 + +Compartment* Actor::getCompartment() const { + NxUnderConstruction; + return NULL; +} + +#endif + +////////////////////////////////////////////////////////// + +Shape* Actor::addShape(ShapeBlueprint* sd) { + + + NxShapeIndex id = mCollisionModel.count(); + sd->_bindToNxActor(this, id); + delete sd; + Shape* s = mCollisionModel.get(id); + + + return s; + +} + +////////////////////////////////////////////////////////// + +void Actor::removeShape(Shape* sh) { + + + for (Shape* shape = mCollisionModel.begin();shape = mCollisionModel.next();) { + if (shape == sh) { + mActor->releaseShape(*sh->getNxShape()); + mCollisionModel.remove(sh->getIndex()); + + if (mDynamicCollisionModel.has(sh->getIndex())) + mDynamicCollisionModel.remove(sh->getIndex()); + + delete shape; + + return; + } + } + +} + +////////////////////////////////////////////////////////// + +void Actor::removeShape(NxShapeIndex id) { + + Shape* shape = mCollisionModel[id]; + + if (shape == 0) + return; + + shape->releaseShape(); + mCollisionModel.remove(id); + + delete shape; +} + +////////////////////////////////////////////////////////// + +NxU32 Actor::getNbShapes() const { + return mCollisionModel.count(); +} + +////////////////////////////////////////////////////////// + +CollisionModel* Actor::getCollisionModel() { + return &mCollisionModel; +} + +////////////////////////////////////////////////////////// + +CollisionModel* Actor::getDynamicCollisionModel() { + return &mDynamicCollisionModel; +} + +////////////////////////////////////////////////////////// + +void* Actor::getNxActorUserData() { + return mActor->userData; +} + +////////////////////////////////////////////////////////// + +StringPairList Actor::saveCustom() { + StringPairList l; + l.insert("ActorType", "Actor"); + + return l; +} + +////////////////////////////////////////////////////////// + +void Actor::disable() { + mActor->raiseActorFlag(NX_AF_DISABLE_COLLISION); + mActor->raiseActorFlag(NX_AF_DISABLE_RESPONSE); + mActor->raiseActorFlag(NX_AF_FLUID_DISABLE_COLLISION); + mActor->raiseBodyFlag(NX_BF_FROZEN); + mActor->raiseBodyFlag(NX_BF_FROZEN_ROT); + mActor->setAngularVelocity(NxVec3(0,0,0)); + mActor->setAngularMomentum(NxVec3(0,0,0)); + mActor->setLinearMomentum(NxVec3(0,0,0)); + mActor->setLinearVelocity(NxVec3(0,0,0)); + + disableVisualisation(); +} + +////////////////////////////////////////////////////////// + +FixedJoint* Actor::joinWith(Actor* actorB, JointParams jp) { + return mOwner->createFixedJoint(this, actorB, jp); +} + +////////////////////////////////////////////////////////// + +} //End of NxOgre namespace. Added: trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreActor.h =================================================================== --- trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreActor.h (rev 0) +++ trunk/python-ogre/ThirdParty/nxogre_0.9/NxOgreActor.h 2008-01-16 02:53:00 UTC (rev 547) @@ -0,0 +1,734 @@ +// +// NxOgre a wrapper for the PhysX (formerly Novodex) physics library and the Ogre 3D rendering engine. +// Copyright (C) 2005 - 2007 Robin Southern and NxOgre.org http://www.nxogre.org +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +// + +#ifndef __NXOGRE_ACTOR_H__ +#define __NXOGRE_ACTOR_H__ + +#include "NxOgrePrerequisites.h" +#include "NxOgreContainer.h" // For: mCollisionList +#include "NxOgreParams.h" + +namespace NxOgre { + + /** + \page actorparams ActorParams + + String base params are case and space insensitive. + + Examples: + + <code> + "mass: 1" + + "mass: 1, group: myActors" + + "mass: 1, group: myActors, lineardamping: 3" + </code> + + Non-String based params can be used as well, and offer access to some variables of the params + that cannot be converted into a string (pointers, etc.). + + Due to efficency purposes and insane string conversion. With string parameters more than four, + you should work with the non-string based params system. + + <code> + ActorParams params; + params.setToDefault(); + params.mMass = 10; + params.mGroupAsIndex = 1; + </code> + + Is exactly the same as: + + <code> + "mass: 10, group-index: 1" + </code> + + Current Supported String Params + ----------------------------- + + - density (float) + - Description: Density of this Actor. Use this or mass, do not use both. + - Example: "Density: 1.5" + - See: ActorParams::mDensity and NxActorDesc::density for more information. + + - group (string) + - Description: Actor Group name of this actor. Use this or group-index, but not both. + - Example: "group: myGroup" + - See: ActorParams::mGroupAsName + + - group-index (unsigned int) + - Description: Actor Group ID of this actor. Use this or group, but not both. + - Example: "group-index: 0" + - See: ActorParams::mGroupAsIndex + + - dominancegroup (unsigned int) + - Description: Dominance Group ID of this actor. + - Example: "dominancegroup: 0" + - See: ActorParams::mDominanceGroup + + - massspaceinertia (Vector3) + - Description: Mass Space Inertia of this Actor + - Example: "massspaceinertia: 1 0 1" + - See: ActorParams::mMassSpaceInertia + + - linearvelocity (Vector3) + - Description: Linear Velocity of this Actor + - Example: "linearvelocity: 1 0 1" + - See: ActorParams::mLinearVelocity + + - angularvelocity (Vector3) + - Description: Angular Velocity of this Actor + - Example: "angularvelocity: 1 0 1" + - See: ActorParams::mAngularVelocity + + - wakeupcounter (float) + - Description: Wake up time counter + - Example: "wakeupcounter: 1000.0" + - See: ActorParams::mWakeupCounter + + - mass (float) + - Description: Mass of this Actor. Use this or density, do not use both. + - Example: "mass: 10" + - See: ActorParams::mMass and NxBodyDesc::mass for more information. + + - lineardamping (float) + - Description: Linear Damping of the Actor + - Example: "lineardamping: 0.1" + - See: ActorParams::mLinearDamping + + - angulardamping (float) + - Description: Angular Damping of the Actor + - Example: "angulardamping: 0.1" + - See: ActorParams::mAngularDamping + + - maxangularvelocity (float) + - Description: Maximum allowed angular velocity + - Example: "maxangularvelocity: 10" + - See: ActorParams::mMaxAngularVelocity + + - sleepangularvelocity (float) + - Description: Maximum angular velocity at which the Actor can go to sleep. + - Example: "sleepangularvelocity: 20" + - See: ActorParams:mSleepAngularVelocity + + - ccdmotionthreshold (float) + - Description: When CCD is globally enabled, it is still not performed if the + motion distance of all points on the Actor is below this threshold. + - Example: "ccdmotionthreshold: 5" + - See: ActorParams::mCCDMotionThreshold + + - solveriterationcount (unsigned int) + - Description: Number of solver iterations performed when processing joint/contacts + connected to this Actor. + - Example: "solveriterationcount: 5" + - Range: 1 to 255 + - See: ActorParams::mSolverIterationCount + + - sleepenergytheshold (float) + - Description: Threshold for the energy-based sleeping algorithm. Only used when + the NX_BF_ENERGY_SLEEP_TEST flag is set + - Example: "sleepenergythreshold: 0.006" + - See: ActorParams::mSleepEnergyThreshold + + - sleepdamping (float) + - Description: Damping factor for bodies that are about to sleep. + - Example: "sleepdamping: 0.5" + - See: ActorParams::mSleepDamping + + - node-scale (Vector3) + - Applicable to Body and Actors that use a visual representation of the NxActor. + - Description: Scale factor of the SceneNode + - Example: "node-slace: 2 2 2" + - See: ActorParams::mNodeScale + + - node-shadows (bool) + - Applicable to Body and Actors that use a visual representation of the NxActor. + - Description: Apply shadows to the first entity (Body class). See other custom Actors + to see how shadows apply to it. + - Example: "node-shadows: yes" + - See: ActorParams::mNodeShaodws + + - node (string) + - Applicable to Body and Actors that use a visual representation of the NxActor. + - Description: Name of the SceneNode, or name of an existing SceneNode to use (Body only). + - Example: "node: myNodeName" + - See: ActorParams::mNodeName + + */ + + /** ActorParams + + See \ref actorparams for the full string argument documentation. + */ + class NxExport ActorParams : public Params { + + public: + + + ActorParams(){setToDefault();} + ActorParams(const char* p) {process(p);} + ActorParams(NxString p) {process(p);} + + void setToDefault(); + void parse(Parameters); + void fromNxActorDesc(NxActorDesc&); + void fromNxBodyDesc(NxBodyDesc&); + + //////////////////////////////////////////////////////////////// + +#if NX_SDK_VERSION_NUMBER >= 260 + /// NxCompartment of the Actor to sit in. + /// @todo NxOgre-ify + /// @default NULL + NxCompartment* mCompartment; +#endif + + /// Density, mass must be 0 when density is used. + NxReal mDensity; + +#if NX_SDK_VERSION_NUMBER >= 272 + + /// DominanceGroup (as Name). + /// @default "" + NxString mDominanceGroupAsName; + + /// DominanceGroup (as Index) + /// @default 0 + NxDominanceGroup mDominanceGroupAsIndex; +#endif + + /// Flags for the NxActor + /// @see NxActorFlags + /// @default 0 + NxU32 mActorFlags; + + + /// Group to use as index. GroupAsName must be blank. + /// @default 0 + NxActorGroup mGroupAsIndex; + + + /// Group to use from name. GroupAsIndex must be 0. + /// @default Blank String + NxString mGroupAsName; + + + //////////////////////////////////////////////////////////////// + + + /// Angular Damping + NxReal mAngularDamping; + + + /// Angular Velocity + NxVec3 mAngularVelocity; + + + /// + NxReal mCCDMotionThreshold; + + + /// + NxU32 mBodyFlags; + + + /// + NxReal mLinearDamping; + + + /// + NxVec3 mLinearVelocity; + + + /// Mass of the Actor. When used, make sure density is zero. + NxReal mMass; + + + /// + NxMat34 mMassLocalPose; + + /// + NxVec3 mMassSpaceInertia; + + + /// + NxReal mMaxAngularVelocity; + + /// + NxReal mSleepAngularVelocity; + + + /// + NxReal mSleepDamping; + + + /// + NxReal mSleepEnergyThreshold; + + + /// + NxReal mSleepLinearVelocity; + + + /// + NxU32 mSolverIterationCount; + + + /// + NxReal mWakeUpCounter; + + + //////////////////////////////////////////////////////////////// + + + /// SceneNode for Visual based Actors. If the node already exists then it will use it. + NxString mNodeName; + + /// Scale the SceneNode for Visual based Actors + Ogre::Vector3 mNodeScale; + + /// Set the first Entity of the Visual based Actors to have shadows or not. + bool mNodeShadows; + + + + }; // End of ActorParams class + + class NxExport Actor { + + public: + + Actor(const NxString& Identifier, Scene*, bool isActorBased = true); + Actor(const NxString& Identifier, Scene*, ShapeBlueprint*, const Pose&, ActorParams = ActorParams()); + virtual ~Actor(); + + ////////////////////////////////////////////////////////// + + Scene* getScene() { + return mOwner; + } + + NxScene* getNxScene(); + + ////////////////////////////////////////////////////////// + + virtual bool hasVisualisation() const {return false;} + virtual void simulate(float); + virtual void render(float); + virtual void shapeSimulate(float); + virtual void shapeRender(float); + bool isDead() { return (mActor == NULL); } + + + /** Duplicate this actor + + @param name Name of the new Actor + @param pose Position/Orientation of the new actor. + + @note + This function is rather slow and inefficent when used repeatedly. Use a ActorBlueprint instead to + keep a single blueprint of the actor and create as many as you want from that. + + */ + Actor* duplicate(const NxString& name, const Pose& p); + + ////////////////////////////////////////////////////////// + + void _createActor(ShapeBlueprint*,const Pose&,ActorParams params); + void _destroyActor(); + + NxActor* getNxActor(){return mActor;} + + ////////////////////////////////////////////////////////// + + void setName(NxString); + NxString getName(); + + //////////////////////////////////////////////////////// + + void setGlobalPose(const Pose&); + Pose getGlobalPose(); + + Ogre::Quaternion getGlobalOrientation(); + void setGlobalOrientation(const Ogre::Quaternion&); + + Ogre::Vector3 getGlobalPosition(); + void setGlobalPosition(const Ogre::Vector3&); + + void moveGlobalPose(const Pose&); + void moveGlobalPosition(const Ogre::Vector3&); + void moveGlobalOrientation(const Ogre::Quaternion&); + + void moveTowards(const Pose&, float force = 10.0f); + + ////////////////////////////////////////////////////////// + + Shape* addShape(ShapeBlueprint*); + void removeShape(Shape*); + void removeShape(NxShapeIndex); + NxU32 getNbShapes() const; + CollisionModel* getCollisionModel(); + CollisionModel* getDynamicCollisionModel(); + + ////////////////////////////////////////////////////////// + + void setGroup(ActorGroup*); + void setGroup(const NxString& GroupIdentifier); + void setGroup(NxActorGroup); + ActorGroup* getGroup() const; + + ////////////////////////////////////////////////////////// + + void raiseActorFlag(NxActorFlag); + void clearActorFlag(NxActorFlag); + bool hasActorFlag(NxActorFlag) const; + bool isDynamic() const; + + ////////////////////////////////////////////////////////// + + void setCMassOffsetLocalPose(const Pose&); + void setCMassOffsetLocalPosition(const Ogre::Vector3&); + void setCMassOffsetLocalOrientation(const NxMat33&); + void setCMassOffsetLocalOrientation(const Ogre::Matrix3&); + void setCMassOffsetGlobalPose(const Pose&); + void setCMassOffsetGlobalPosition(const Ogre::Vector3&); + void setCMassOffsetGlobalOrientation(const NxMat33&); + void setCMassOffsetGlobal... [truncated message content] |
From: <and...@us...> - 2008-01-16 05:33:48
|
Revision: 551 http://python-ogre.svn.sourceforge.net/python-ogre/?rev=551&view=rev Author: andy_miller Date: 2008-01-15 21:33:53 -0800 (Tue, 15 Jan 2008) Log Message: ----------- Updating NxOgre library to the Bleeding svn rev Added Paths: ----------- trunk/python-ogre/ThirdParty/nxogre/ trunk/python-ogre/ThirdParty/nxogre/FireState.cpp trunk/python-ogre/ThirdParty/nxogre/FireState.h trunk/python-ogre/ThirdParty/nxogre/NxOgre.h trunk/python-ogre/ThirdParty/nxogre/NxOgreActor.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreActor.h trunk/python-ogre/ThirdParty/nxogre/NxOgreActorBlueprint.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreActorBlueprint.h trunk/python-ogre/ThirdParty/nxogre/NxOgreAnimatedRenderable.h trunk/python-ogre/ThirdParty/nxogre/NxOgreBlueprint.h trunk/python-ogre/ThirdParty/nxogre/NxOgreBody.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreBody.h trunk/python-ogre/ThirdParty/nxogre/NxOgreCharacter.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreCharacter.h trunk/python-ogre/ThirdParty/nxogre/NxOgreCharacterController.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreCharacterController.h trunk/python-ogre/ThirdParty/nxogre/NxOgreCharacterModel.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreCharacterModel.h trunk/python-ogre/ThirdParty/nxogre/NxOgreCharacterMovementModel.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreCharacterMovementModel.h trunk/python-ogre/ThirdParty/nxogre/NxOgreCharacterSystem.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreCharacterSystem.h trunk/python-ogre/ThirdParty/nxogre/NxOgreCloth.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreCloth.h trunk/python-ogre/ThirdParty/nxogre/NxOgreClothRaycaster.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreClothRaycaster.h trunk/python-ogre/ThirdParty/nxogre/NxOgreCollisionModel.h trunk/python-ogre/ThirdParty/nxogre/NxOgreCompound.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreCompound.h trunk/python-ogre/ThirdParty/nxogre/NxOgreCompoundActor.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreCompoundActor.h trunk/python-ogre/ThirdParty/nxogre/NxOgreCompoundActorBlueprint.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreCompoundActorBlueprint.h trunk/python-ogre/ThirdParty/nxogre/NxOgreContactStream.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreContactStream.h trunk/python-ogre/ThirdParty/nxogre/NxOgreContainer.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreContainer.h trunk/python-ogre/ThirdParty/nxogre/NxOgreCooking.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreCooking.h trunk/python-ogre/ThirdParty/nxogre/NxOgreDebugRenderer.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreDebugRenderer.h trunk/python-ogre/ThirdParty/nxogre/NxOgreDominanceGroup.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreDominanceGroup.h trunk/python-ogre/ThirdParty/nxogre/NxOgreEngine.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreEngine.h trunk/python-ogre/ThirdParty/nxogre/NxOgreEnumsBlueprint.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreEnumsBlueprint.h trunk/python-ogre/ThirdParty/nxogre/NxOgreEnumsDefinesTypedefs.h trunk/python-ogre/ThirdParty/nxogre/NxOgreError.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreError.h trunk/python-ogre/ThirdParty/nxogre/NxOgreExtendedTypes.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreExtendedTypes.h trunk/python-ogre/ThirdParty/nxogre/NxOgreFileResourceSystem.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreFileResourceSystem.h trunk/python-ogre/ThirdParty/nxogre/NxOgreFluid.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreFluid.h trunk/python-ogre/ThirdParty/nxogre/NxOgreFluidMesh.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreFluidMesh.h trunk/python-ogre/ThirdParty/nxogre/NxOgreForceField.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreForceField.h trunk/python-ogre/ThirdParty/nxogre/NxOgreGlobalFunctions.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreGroup.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreGroup.h trunk/python-ogre/ThirdParty/nxogre/NxOgreHash.h trunk/python-ogre/ThirdParty/nxogre/NxOgreHelpers.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreHelpers.h trunk/python-ogre/ThirdParty/nxogre/NxOgreIntersection.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreIntersection.h trunk/python-ogre/ThirdParty/nxogre/NxOgreJSON.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreJSON.h trunk/python-ogre/ThirdParty/nxogre/NxOgreJSONCollection.h trunk/python-ogre/ThirdParty/nxogre/NxOgreJSONRead.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreJSONSchema.h trunk/python-ogre/ThirdParty/nxogre/NxOgreJSONWrite.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreJoint.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreJoint.h trunk/python-ogre/ThirdParty/nxogre/NxOgreJointSet1.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreJointSet1.h trunk/python-ogre/ThirdParty/nxogre/NxOgreJointSet2.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreJointSet2.h trunk/python-ogre/ThirdParty/nxogre/NxOgreLegacyCharacter.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreLegacyCharacter.h trunk/python-ogre/ThirdParty/nxogre/NxOgreLegacyCharacterController.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreLegacyCharacterController.h trunk/python-ogre/ThirdParty/nxogre/NxOgreLegacyCharacterHitReport.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreLegacyCharacterHitReport.h trunk/python-ogre/ThirdParty/nxogre/NxOgreLog.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreLog.h trunk/python-ogre/ThirdParty/nxogre/NxOgreMachine.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreMachine.h trunk/python-ogre/ThirdParty/nxogre/NxOgreMaterial.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreMaterial.h trunk/python-ogre/ThirdParty/nxogre/NxOgreMemoryStream.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreMemoryStream.h trunk/python-ogre/ThirdParty/nxogre/NxOgreNodeRenderable.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreNodeRenderable.h trunk/python-ogre/ThirdParty/nxogre/NxOgreNxActorController.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreNxActorController.h trunk/python-ogre/ThirdParty/nxogre/NxOgreNxCharacterController.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreNxCharacterController.h trunk/python-ogre/ThirdParty/nxogre/NxOgreNxSerialiser.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreNxSerialiser.h trunk/python-ogre/ThirdParty/nxogre/NxOgreNxuStreamSerialiser.h trunk/python-ogre/ThirdParty/nxogre/NxOgreOgreNodeRenderable.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreOgreNodeRenderable.h trunk/python-ogre/ThirdParty/nxogre/NxOgreOgreResourceSystem.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreOgreResourceSystem.h trunk/python-ogre/ThirdParty/nxogre/NxOgreOgreSceneRenderer.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreOgreSceneRenderer.h trunk/python-ogre/ThirdParty/nxogre/NxOgreParametersBlueprint.h trunk/python-ogre/ThirdParty/nxogre/NxOgreParams.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreParams.h trunk/python-ogre/ThirdParty/nxogre/NxOgreParticleSystem.h trunk/python-ogre/ThirdParty/nxogre/NxOgrePerformer.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgrePerformer.h trunk/python-ogre/ThirdParty/nxogre/NxOgrePhysXDriver.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgrePhysXDriver.h trunk/python-ogre/ThirdParty/nxogre/NxOgrePose.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgrePose.h trunk/python-ogre/ThirdParty/nxogre/NxOgrePrerequisites.h trunk/python-ogre/ThirdParty/nxogre/NxOgreRaycaster.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreRaycaster.h trunk/python-ogre/ThirdParty/nxogre/NxOgreRemoteDebuggerConnection.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreRemoteDebuggerConnection.h trunk/python-ogre/ThirdParty/nxogre/NxOgreRenderable.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreRenderable.h trunk/python-ogre/ThirdParty/nxogre/NxOgreRenderableSource.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreRenderableSource.h trunk/python-ogre/ThirdParty/nxogre/NxOgreResourceManager.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreResourceManager.h trunk/python-ogre/ThirdParty/nxogre/NxOgreResourceManager_Convex.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreResourceManager_Triangle.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreResourceMesh.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreResourceMesh.h trunk/python-ogre/ThirdParty/nxogre/NxOgreResourceStream.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreResourceStream.h trunk/python-ogre/ThirdParty/nxogre/NxOgreResourceStreamPtr.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreResourceStreamPtr.h trunk/python-ogre/ThirdParty/nxogre/NxOgreResourceSystem.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreResourceSystem.h trunk/python-ogre/ThirdParty/nxogre/NxOgreScene.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreScene.h trunk/python-ogre/ThirdParty/nxogre/NxOgreSceneBlueprint.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreSceneBlueprint.h trunk/python-ogre/ThirdParty/nxogre/NxOgreSceneContactController.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreSceneContactController.h trunk/python-ogre/ThirdParty/nxogre/NxOgreSceneController.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreSceneController.h trunk/python-ogre/ThirdParty/nxogre/NxOgreSceneRenderer.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreSceneRenderer.h trunk/python-ogre/ThirdParty/nxogre/NxOgreSceneSource.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreSceneSource.h trunk/python-ogre/ThirdParty/nxogre/NxOgreSceneTriggerController.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreSceneTriggerController.h trunk/python-ogre/ThirdParty/nxogre/NxOgreSerialiser.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreSerialiser.h trunk/python-ogre/ThirdParty/nxogre/NxOgreShape.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreShape.h trunk/python-ogre/ThirdParty/nxogre/NxOgreShapeBlueprint.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreShapeBlueprint.h trunk/python-ogre/ThirdParty/nxogre/NxOgreShapeBlueprintConvex.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreShapeBlueprintConvex.h trunk/python-ogre/ThirdParty/nxogre/NxOgreShapeBlueprintMesh.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreShapeBlueprintMesh.h trunk/python-ogre/ThirdParty/nxogre/NxOgreShapeBlueprintPrimitives.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreShapeBlueprintPrimitives.h trunk/python-ogre/ThirdParty/nxogre/NxOgreShapeBlueprintTerrain.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreShapeBlueprintTerrain.h trunk/python-ogre/ThirdParty/nxogre/NxOgreShapeBlueprintWheel.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreShapeBlueprintWheel.h trunk/python-ogre/ThirdParty/nxogre/NxOgreShapeConvex.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreShapeConvex.h trunk/python-ogre/ThirdParty/nxogre/NxOgreShapeMesh.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreShapeMesh.h trunk/python-ogre/ThirdParty/nxogre/NxOgreShapePrimitives.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreShapePrimitives.h trunk/python-ogre/ThirdParty/nxogre/NxOgreShapeTerrain.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreShapeTerrain.h trunk/python-ogre/ThirdParty/nxogre/NxOgreShapeWheel.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreShapeWheel.h trunk/python-ogre/ThirdParty/nxogre/NxOgreSimpleShape.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreSimpleShape.h trunk/python-ogre/ThirdParty/nxogre/NxOgreSkeletalRenderable.h trunk/python-ogre/ThirdParty/nxogre/NxOgreSkeleton.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreSkeleton.h trunk/python-ogre/ThirdParty/nxogre/NxOgreSoftBody.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreSoftBody.h trunk/python-ogre/ThirdParty/nxogre/NxOgreSpriteRenderable.h trunk/python-ogre/ThirdParty/nxogre/NxOgreStable.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreStable.h trunk/python-ogre/ThirdParty/nxogre/NxOgreState.h trunk/python-ogre/ThirdParty/nxogre/NxOgreStateMachine.h trunk/python-ogre/ThirdParty/nxogre/NxOgreTestIdea.h trunk/python-ogre/ThirdParty/nxogre/NxOgreTesting.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreTesting.h trunk/python-ogre/ThirdParty/nxogre/NxOgreTrigger.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreTrigger.h trunk/python-ogre/ThirdParty/nxogre/NxOgreUserAllocator.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreUserAllocator.h trunk/python-ogre/ThirdParty/nxogre/NxOgreUserData.h trunk/python-ogre/ThirdParty/nxogre/NxOgreUserStream.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreUserStream.h trunk/python-ogre/ThirdParty/nxogre/NxOgreVoxelRenderable.h trunk/python-ogre/ThirdParty/nxogre/NxOgreWheelSet.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreWheelSet.h trunk/python-ogre/ThirdParty/nxogre/NxOgreWorld.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreWorld.h trunk/python-ogre/ThirdParty/nxogre/NxOgreWorldBlueprint.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreWorldBlueprint.h Added: trunk/python-ogre/ThirdParty/nxogre/FireState.cpp =================================================================== --- trunk/python-ogre/ThirdParty/nxogre/FireState.cpp (rev 0) +++ trunk/python-ogre/ThirdParty/nxogre/FireState.cpp 2008-01-16 05:33:53 UTC (rev 551) @@ -0,0 +1 @@ +// FireState Added: trunk/python-ogre/ThirdParty/nxogre/FireState.h =================================================================== Added: trunk/python-ogre/ThirdParty/nxogre/NxOgre.h =================================================================== --- trunk/python-ogre/ThirdParty/nxogre/NxOgre.h (rev 0) +++ trunk/python-ogre/ThirdParty/nxogre/NxOgre.h 2008-01-16 05:33:53 UTC (rev 551) @@ -0,0 +1,160 @@ +/** @mainpage NxOgre +@section licence Licence + +<pre> +NxOgre a wrapper for the PhysX (formerly Novodex) physics library and the Ogre 3D rendering engine. +Copyright (C) 2005 - 2007 Robin Southern and NxOgre.org http://www.nxogre.org + +This library is free software; you can redistribute it and/or +modify it under the terms of the GNU Lesser General Public +License as published by the Free Software Foundation; either +version 2.1 of the License, or (at your option) any later version. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public +License along with this library; if not, write to the Free Software +Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +</pre> + +@section whatisit What is it? +NxOgre is a physics connector library between the physics library PhysX and the Ogre 3D rendering system. +With a help of some short, fast and neat code you can have a quick physics system within your Ogre game +or engine within a matter of minutes. + +@section installing Installing +@subsection Ogre + +The SDK or Source versions will both work with NxOgre. You should have some knowledege with working Ogre. +If you can make a simple application that can show an Ogre head with a movement camera, you can work with +NxOgre. +\n\n +You will need to create an environmental variable called "OGRE_HOME" pointing to the ogremain directory +in your Ogre folder. Normally for SDK users this is automatically created by the installer, but it's work +checking, if you installed Ogre from the source you'll need to create one. + +[1] http://www.ogre3d.org/wiki/index.php/Installing_An_SDK \n +[2] http://www.ogre3d.org/wiki/index.php/Building_From_Source \n + +@subsection PhysX +The PhysX SDK can be downloaded from the Ageia Support Center, a user account is required to download the +SDK. Once your account has been registered (Accounts are processed by hand, so a wait of 1-2 business days +is common), download the PhysX SDK and the SystemSoftware. +\n\n +Install the SystemSoftware first, then the PhysX SDK. I recommend you install the PhysX SDK in the same +parent directory as Ogre. Once the installation is completed, create a Environmental variable called +"<code>PHYSX_DIR</code>" pointing to the PhysX SDK directory. +\n\n +[3] http://devsupport.ageia.com/ \n + +@subsection NxOgre + - Create a "NxOgre" folder, it should be in the parent of your Ogre or nearby + - Using Tortoise SVN or another Subversion client checkout the HEAD repositry + - Go to the parent directory of Ogre and the PhysX SDK i.e. (c:/dev/) + - New Folder, name as NxOgre, and go inside + - File, SVN, SVN Checkout + - Set the URL to http://latest.nxogre.org/nxogre3/ + - Click okay + - Open up the project and compile. + +*/ + +#ifndef __NXOGRE_H__ +#define __NXOGRE_H__ + +/////////////////////////////////////////// + +#include "NxOgreStable.h" +#include "NxOgrePrerequisites.h" +#include "NxOgrePhysXDriver.h" +#include "NxOgreError.h" +#include "NxOgreLog.h" +#include "NxOgreExtendedTypes.h" + +/////////////////////////////////////////// + +#include "NxOgreActor.h" +#include "NxOgreActorBlueprint.h" +#include "NxOgreBody.h" +#include "NxOgreContactStream.h" +#include "NxOgreContainer.h" +#include "NxOgreCooking.h" +#if NX_USE_LEGACY_NXCONTROLLER +# include "NxOgreLegacyCharacter.h" +# include "NxOgreLegacyCharacterController.h" +# include "NxOgreLegacyCharacterHitReport.h" +#else +# include "NxOgreCharacterSystem.h" +# include "NxOgreCharacter.h" +# include "NxOgreCharacterModel.h" +# include "NxOgreCharacterMovementModel.h" +#endif +#include "NxOgreCloth.h" +#include "NxOgreClothRaycaster.h" +#include "NxOgreCompound.h" +#include "NxOgreDebugRenderer.h" +#include "NxOgreDominanceGroup.h" +#include "NxOgreEngine.h" +#include "NxOgreEnumsBlueprint.h" +#include "NxOgreFileResourceSystem.h" +#include "NxOgreFluid.h" +#include "NxOgreFluidMesh.h" +#include "NxOgreForceField.h" +#include "NxOgreGroup.h" +#include "NxOgreHelpers.h" +#include "NxOgreJointSet1.h" +#include "NxOgreJointSet2.h" +#include "NxOgreIntersection.h" +#include "NxOgreMaterial.h" +#include "NxOgreMachine.h" +#include "NxOgreNodeRenderable.h" +#include "NxOgreResourceManager.h" +#include "NxOgreOgreResourceSystem.h" +#include "NxOgreParams.h" +#include "NxOgrePose.h" +#include "NxOgreRaycaster.h" +#include "NxOgreRenderable.h" +#include "NxOgreRenderableSource.h" +#include "NxOgreRemoteDebuggerConnection.h" +#include "NxOgreResourceSystem.h" +#include "NxOgreResourceStreamPtr.h" +#include "NxOgreSerialiser.h" +#include "NxOgreScene.h" +#include "NxOgreSceneBlueprint.h" +#include "NxOgreSceneController.h" +#include "NxOgreSceneContactController.h" +#include "NxOgreSceneRenderer.h" +#include "NxOgreShape.h" +#include "NxOgreShapeBlueprint.h" +#include "NxOgreShapeBlueprintConvex.h" +#include "NxOgreShapeBlueprintMesh.h" +#include "NxOgreShapeBlueprintPrimitives.h" +#include "NxOgreShapeBlueprintTerrain.h" +#include "NxOgreShapeBlueprintWheel.h" +#include "NxOgreShapeConvex.h" +#include "NxOgreShapeMesh.h" +#include "NxOgreShapePrimitives.h" +#include "NxOgreShapeTerrain.h" +#include "NxOgreShapeWheel.h" +#include "NxOgreSimpleShape.h" +#include "NxOgreSoftBody.h" +#include "NxOgreState.h" +#include "NxOgreStateMachine.h" +#include "NxOgreTesting.h" +#include "NxOgreTrigger.h" +#include "NxOgreMemoryStream.h" +#include "NxOgreUserAllocator.h" +#include "NxOgreUserData.h" +#include "NxOgreWheelSet.h" +#include "NxOgreWorld.h" +#include "NxOgreWorldBlueprint.h" + +/////////////////////////////////////////// + +#include "NxOgreOgreSceneRenderer.h" +#include "NxOgreOgreNodeRenderable.h" + +#endif Added: trunk/python-ogre/ThirdParty/nxogre/NxOgreActor.cpp =================================================================== --- trunk/python-ogre/ThirdParty/nxogre/NxOgreActor.cpp (rev 0) +++ trunk/python-ogre/ThirdParty/nxogre/NxOgreActor.cpp 2008-01-16 05:33:53 UTC (rev 551) @@ -0,0 +1,1123 @@ +// +// NxOgre a wrapper for the PhysX (formerly Novodex) physics library and the Ogre 3D rendering engine. +// Copyright (C) 2005 - 2007 Robin Southern and NxOgre.org http://www.nxogre.org +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +// + +#include "NxOgreStable.h" +#include "NxOgreActor.h" +#include "NxOgreActorBlueprint.h" +#include "NxOgreUserData.h" // For NxActorUserData for NxActor +#include "NxOgrePose.h" // For conversions +#include "NxOgreHelpers.h" // For conversions +#include "NxOgreScene.h" // For Actor::mOwner +#include "NxOgreShapeBlueprint.h" // For ShapeBlueprint System +#include "NxOgreDominanceGroup.h" // For Dominance Groups +#include "NxOgreGroup.h" // For ActorGroup and ShapeGroups +#include "NxOgreContainer.h" // For Getting an ActorGroup +#include "NxOgreActorBlueprint.h" // For Quick Duplication. + +#include "OgreStringConverter.h" +#include "OgreRoot.h" +#include "OgreSingleton.h" +#include "OgreMatrix3.h" + +namespace NxOgre { + +////////////////////////////////////////////////////////// + +void ActorParams::setToDefault() { + + + mDensity = 0.0f; + mActorFlags = 0; + mGroupAsIndex = 0; + mGroupAsName = ""; +#if NX_SDK_VERSION_NUMBER >= 272 + mDominanceGroupAsIndex = 0; + mDominanceGroupAsName = ""; +#endif +#if NX_SDK_VERSION_NUMBER >= 260 + mCompartment = NULL; +#endif + mMassLocalPose . id(); + mMassSpaceInertia . zero(); + mLinearVelocity . zero(); + mAngularVelocity . zero(); + mWakeUpCounter = 20.0f * 0.02f; + mMass = 10.0f; + mLinearDamping = 0.0f; + mAngularDamping = 0.05f; + mMaxAngularVelocity = -1.0f; + mBodyFlags = NX_BF_VISUALIZATION; + mBodyFlags |= NX_BF_ENERGY_SLEEP_TEST; + mSleepLinearVelocity = -1.0f; + mSleepAngularVelocity = -1.0f; + mCCDMotionThreshold = 0.0f; + mSolverIterationCount = 4; + mSleepEnergyThreshold = -1.0f; + mSleepDamping = 0.0f; + + mNodeScale = Ogre::Vector3(1,1,1); + mNodeName = ""; + mNodeShadows = true; + mNodePose . id(); + +} + +////////////////////////////////////////////////////////// + +void ActorParams::parse(Parameters P) { + + for (Parameters::iterator p = P.begin(); p != P.end();p++) { + + if ((*p).first == "static") { + if ( (*p).second.substr(0,1) == "y" || (*p).second.substr(0,1) == "Y") { + mMass = 0; + mDensity = 0; + continue; + } + else { + mMass = 10; + mDensity = 0; + } + } + + if ((*p).first == "kinematic") { + if ( (*p).second.substr(0,1) == "y" || (*p).second.substr(0,1) == "Y") { + mBodyFlags |= NX_BF_KINEMATIC; + if (mMass == 0 || mDensity == 0) { + mMass = 1; + mDensity = 0; + } + } + } + + if (Set("density", (*p), mDensity)) continue; + if (Set("group", (*p), mGroupAsName)) continue; + if (Set("group-index", (*p), mGroupAsIndex)) continue; +#if NX_SDK_VERSION_NUMBER >= 272 + if (Set("dominancegroup", (*p), mDominanceGroupAsName)) continue; + if (Set("dominancegroup-index", (*p), mDominanceGroupAsIndex)) continue; +#endif + if (Set("massspaceinertia", (*p), mMassSpaceInertia)) continue; + if (Set("linearvelocity", (*p), mLinearVelocity)) continue; + if (Set("angularvelocity", (*p), mAngularVelocity)) continue; + if (Set("wakeupcounter", (*p), mWakeUpCounter)) continue; + if (Set("mass", (*p), mMass)) continue; + if (Set("lineardamping", (*p), mLinearDamping)) continue; + if (Set("angulardamping", (*p), mAngularDamping)) continue; + if (Set("maxangularvelocity", (*p), mMaxAngularVelocity)) continue; + if (Set("sleepangularvelocity", (*p), mSleepAngularVelocity)) continue; + if (Set("ccdmotionthreshold", (*p), mCCDMotionThreshold)) continue; + if (Set("solveriterationcount", (*p), mSolverIterationCount)) continue; + if (Set("sleepenergythreshold", (*p), mSleepEnergyThreshold)) continue; + if (Set("sleepdamping", (*p), mSleepDamping)) continue; + if (Set("node-scale", (*p), mNodeScale)) continue; + if (Set("node-shadows", (*p), mNodeShadows)) continue; + if (Set("node", (*p), mNodeName)) continue; + if (Set("node-orientation", (*p), mNodePose.q)) continue; + if (Set("node-offset", (*p), mNodePose.v)) continue; + + } + +} + +////////////////////////////////////////////////////////// + +void ActorParams::fromNxActorDesc(NxActorDesc& desc) { + + mDensity = desc.density; + mActorFlags = desc.flags; + mGroupAsIndex = desc.group; +#if NX_SDK_VERSION_NUMBER >= 272 + mDominanceGroupAsIndex = desc.dominanceGroup; +#endif +#if NX_SDK_VERSION_NUMBER >= 260 + mCompartment = desc.compartment; +#endif +} + +////////////////////////////////////////////////////////// + +void ActorParams::fromNxBodyDesc(NxBodyDesc& desc) { + + mMassLocalPose = desc.massLocalPose; + mMassSpaceInertia = desc.massSpaceInertia; + mLinearVelocity = desc.linearVelocity; + mAngularVelocity = desc.angularVelocity; + mWakeUpCounter = desc.wakeUpCounter; + mMass = desc.mass; + mLinearDamping = desc.linearDamping; + mAngularDamping = desc.angularDamping; + mMaxAngularVelocity = desc.maxAngularVelocity; + mBodyFlags = desc.flags; + mSleepLinearVelocity = desc.sleepLinearVelocity; + mSleepAngularVelocity = desc.sleepAngularVelocity; + mCCDMotionThreshold = desc.CCDMotionThreshold; + mSolverIterationCount = desc.solverIterationCount; + mBodyFlags = desc.flags; + mSleepEnergyThreshold = desc.sleepEnergyThreshold; + mSleepDamping = desc.sleepDamping; + +} + +////////////////////////////////////////////////////////// + +Actor::Actor(const NxString& Identifier, Scene* scene, bool isActorBased) : mName(Identifier), mOwner(scene) { + mActor = 0; + if (isActorBased) + mOwner->_registerActor(mName, this); +} + +////////////////////////////////////////////////////////// + +Actor::Actor(const NxString& name, Scene* scene, ShapeBlueprint *shape, const Pose& pose, ActorParams params) +: mName(name), mOwner(scene) { + + if (name.length() == 0) { + mName = NxCreateID(scene->getNbActors(), "Actor"); + } + else { + + std::vector<NxString> splitID = Ogre::StringUtil::split(name, ";", 2); + + NxString identifier; + + if (splitID.size() == 1) { + identifier = name; + } + else { + identifier = splitID[0]; + } + + Ogre::StringUtil::trim(identifier); + + if (identifier.substr(0,1) == ">") { + mName = identifier.substr(1, identifier.length() - 1); + if (scene->getActors()->has(mName)) { + NxThrow_Error("Duplicate Actor with identifier '" + mName + "' found!"); + } + + } + else if (scene->getActors()->has(identifier)) { + // Generate a identifier based on the the suggested name. + // i.e. + // myBody -> myBody 1 + // myBody10 -> myBody 11 + + Actors actors; + scene->getActors()->CopyTo(actors); + + NxU32 highest = 0; + NxString workingName; + for(Actor* a = actors.begin();a = actors.next();) { + if (Ogre::StringUtil::startsWith(a->getName(), identifier, false)) { + workingName = a->getName(); + workingName = workingName.substr(identifier.length(), workingName.length() - identifier.length()); + std::stringstream ss(workingName); + NxU32 current = 0; + ss >> current; + if (current > highest) + highest = current; + } + } + + highest++; + mName = identifier; + mName.append(Ogre::StringConverter::toString(highest)); + } + else { + mName = identifier; + } + } + + _createActor(shape,pose,params); + mOwner->_registerActor(mName, this); +} + +////////////////////////////////////////////////////////// + +Actor::~Actor() { + + mOwner->_unregisterActor(mName); + + if (!isDead()) + _destroyActor(); + +} + +////////////////////////////////////////////////////////// + +void Actor::_createActor(ShapeBlueprint *shape, const Pose& pose, ActorParams params) { + + NxActorDesc ad; + NxBodyDesc bd; + ad.setToDefault(); + bd.setToDefault(); + + mNxActorUserData = new NxActorUserData(this, NxActorUserData::T_Actor); +#if NX_SDK_VERSION_NUMBER >= 260 + ad.compartment = params.mCompartment; +#endif + if (params.mMass == 0) + ad.density = params.mDensity; +#if NX_SDK_VERSION_NUMBER >= 272 + if (params.mDominanceGroupAsIndex != 0) + ad.dominanceGroup = params.mDominanceGroupAsIndex; + else if (params.mDominanceGroupAsName.length() > 0) + ad.dominanceGroup = mOwner->getDominanceGroup(params.mDominanceGroupAsName)->getGroupID(); +#endif + ad.flags = params.mActorFlags; + + ad.globalPose.t = pose.getVec3(); + ad.globalPose.M.fromQuat(pose.getQuat()); + + if (params.mGroupAsIndex != 0) + ad.group = params.mGroupAsIndex; + else if (params.mGroupAsName.length() > 0) + ad.group = mOwner->getActorGroup(params.mGroupAsName)->getGroupID(); + + ad.userData = mNxActorUserData; + + if (params.mDensity == 0 && params.mMass == 0) { + ad.body = NULL; + } + else { + bd.angularDamping = params.mAngularDamping; + bd.angularVelocity = params.mAngularVelocity; + bd.CCDMotionThreshold = params.mCCDMotionThreshold; + bd.flags = params.mBodyFlags; + bd.linearDamping = params.mLinearDamping; + bd.linearVelocity = params.mLinearVelocity; + if (ad.density == 0) + bd.mass = params.mMass; + bd.massLocalPose = params.mMassLocalPose; + bd.massSpaceInertia = params.mMassSpaceInertia; + bd.maxAngularVelocity = params.mMaxAngularVelocity; + bd.sleepAngularVelocity = params.mSleepAngularVelocity; + bd.sleepDamping = params.mSleepDamping; + bd.sleepEnergyThreshold = params.mSleepEnergyThreshold; + bd.sleepLinearVelocity = params.mSleepLinearVelocity; + bd.solverIterationCount = params.mSolverIterationCount; + bd.wakeUpCounter = params.mWakeUpCounter; + ad.body = &bd; + } + + shape->_bindToActorDescription(this, 0, ad.shapes); + + mActor = mOwner->mScene->createActor(ad); + + if (!mActor) { + std::stringstream ss; + ss << "Creation of Actor with the identifier '" << mName << "' failed." << std::endl; + NxThrow_Error(ss.str()); + return; + } + + if (!shape->isShared()) + delete shape; + + NxU32 nbShapes = mActor->getNbShapes(); + NxShape*const* shapes = mActor->getShapes(); + + int i=0; + while (nbShapes--) { + mCollisionModel[i]->_bindNxShapeToShape(shapes[nbShapes]); + i++; + } + +#if (OGRE_VERSION_MAJOR >= 1) && (OGRE_VERSION_MINOR >= 5) + mBirthFrame = Ogre::Root::getSingletonPtr()->getNextFrameNumber() - 1; +#else + mBirthFrame = Ogre::Root::getSingletonPtr()->getCurrentFrameNumber(); +#endif +} + +////////////////////////////////////////////////////////// + +void Actor::_destroyActor() { + mCollisionModel.destroyAllOwned(); + delete mNxActorUserData; + mOwner->mScene->releaseActor(*mActor); + mActor = 0; +} + +////////////////////////////////////////////////////////// + +void Actor::setName(NxString name) { + mOwner->mActors.rename(mName, name); + mName = name; +} + +////////////////////////////////////////////////////////// + +NxString Actor::getName() const { + return mName; +} + +////////////////////////////////////////////////////////// + +NxScene* Actor::getNxScene() { + return mOwner->getNxScene(); +} + +////////////////////////////////////////////////////////// + +Actor* Actor::duplicate(const NxString& name, const Pose& p) { + Blueprints::ActorBlueprint* ab = new Blueprints::ActorBlueprint(); + ab->serialise(this, mOwner); + Actor* a = ab->unserialise(name, mOwner); + a->setGlobalPose(p); + delete ab; + return a; +} + +////////////////////////////////////////////////////////// + +void Actor::setGlobalPose(const Pose& pose) { + mActor->setGlobalPose(pose.toMat34()); +} + +////////////////////////////////////////////////////////// + +Pose Actor::getGlobalPose() { + static Pose p; + p.fromMat34(mActor->getGlobalPose()); + return p; +} + +////////////////////////////////////////////////////////// + +Ogre::Quaternion Actor::getGlobalOrientation() { + return NxConvert<Ogre::Quaternion, NxQuat>(mActor->getGlobalOrientationQuat()); +} + +////////////////////////////////////////////////////////// + +void Actor::setGlobalOrientation(const Ogre::Quaternion& quat) { + mActor->setGlobalOrientation(NxConvert<NxQuat, Ogre::Quaternion>(quat)); +} + +////////////////////////////////////////////////////////// + +Ogre::Vector3 Actor::getGlobalPosition() { + return NxConvert<Ogre::Vector3, NxVec3>(mActor->getGlobalPosition()); +} + +////////////////////////////////////////////////////////// + +void Actor::setGlobalPosition(const Ogre::Vector3& vec) { + mActor->setGlobalPosition(NxConvert<NxVec3, Ogre::Vector3>(vec)); +} + +////////////////////////////////////////////////////////// + +void Actor::moveGlobalPose(const Pose& pose) { + mActor->moveGlobalPose(pose.toMat34()); +} + +////////////////////////////////////////////////////////// + +void Actor::moveGlobalPosition(const Ogre::Vector3& vec) { + mActor->moveGlobalPosition(NxConvert<NxVec3, Ogre::Vector3>(vec)); +} + +////////////////////////////////////////////////////////// + +void Actor::moveGlobalOrientation(const Ogre::Quaternion& quat) { + mActor->moveGlobalOrientationQuat(NxConvert<NxQuat, Ogre::Quaternion>(quat)); +} + +//////////////////////////////////////////////////////// + +void Actor::moveTowards(const Pose& p, float force) { + NxVec3 fc = p.v - mActor->getGlobalPosition(); + fc *= force; + fc -= mActor->getPointVelocity(mActor->getGlobalPosition()); + mActor->addForceAtPos(fc, mActor->getGlobalPosition()); +} + +//////////////////////////////////////////////////////// + +#if 0 + +const ShapeBlueprint& Actor::createShapeDescription(const ShapeBlueprint& s) { + NxUnderConstruction; + return s; +} + +////////////////////////////////////////////////////////// + +void Actor::destroyShapeDescription(const ShapeBlueprint&) { + NxUnderConstruction; +} + +////////////////////////////////////////////////////////// + +Ogre::uint Actor::getNbShapeDescriptions() { + return mActor->getNbShapeDescriptions(); +} + +////////////////////////////////////////////////////////// + +std::vector<const ShapeBlueprint&> Actor::getAllShapeDescriptions() { + NxUnderConstruction; + std::vector<const ShapeBlueprint&> s; + return s; +} + +////////////////////////////////////////////////////////// + +ShapeBlueprint Actor::getFirstShapeDescription() { + NxUnderConstruction; + return NULL; +} + +////////////////////////////////////////////////////////// + +ShapeBlueprint Actor::getShapeDescription(Ogre::uint id) { + NxUnderConstruction; + return NULL; +} + +#endif + +////////////////////////////////////////////////////////// + +void Actor::setGroup(ActorGroup* ag) { + mActor->setGroup(ag->getGroupID()); +} + +////////////////////////////////////////////////////////// + +void Actor::setGroup(const NxString& GroupIdentifier) { + mActor->setGroup(mOwner->getActorGroups()->get(GroupIdentifier)->getGroupID()); +} + +////////////////////////////////////////////////////////// + +void Actor::setGroup(NxActorGroup agid) { + mActor->setGroup(agid); +} + +////////////////////////////////////////////////////////// + +ActorGroup* Actor::getGroup() const { + NxActorGroup agid = mActor->getGroup(); + return mOwner->getActorGroupsByIndex()->get(agid); +} + +////////////////////////////////////////////////////////// + +void Actor::raiseActorFlag(NxActorFlag f) { + mActor->raiseActorFlag(f); +} + +////////////////////////////////////////////////////////// + +void Actor::clearActorFlag(NxActorFlag f) { + mActor->clearActorFlag(f); +} + +////////////////////////////////////////////////////////// + +bool Actor::hasActorFlag(NxActorFlag f) const { + return mActor->readActorFlag(f); +} +////////////////////////////////////////////////////////// + +bool Actor::isDynamic() const { + return mActor->isDynamic(); +} + +////////////////////////////////////////////////////////// + +void Actor::setCMassOffsetLocalPose(const Pose& pose) { + mActor->setCMassOffsetLocalPose(pose.toMat34()); +} + +////////////////////////////////////////////////////////// + +void Actor::setCMassOffsetLocalPosition(const Ogre::Vector3& vec) { + mActor->setCMassOffsetLocalPosition(NxConvert<NxVec3, Ogre::Vector3>(vec)); +} + +////////////////////////////////////////////////////////// + +void Actor::setCMassOffsetLocalOrientation(const NxMat33& m) { + mActor->setCMassOffsetLocalOrientation(m); +} + +////////////////////////////////////////////////////////// + +void Actor::setCMassOffsetLocalOrientation(const Ogre::Matrix3& vec) { + NxUnderConstruction; +} + +////////////////////////////////////////////////////////// + +void Actor::setCMassOffsetGlobalPose(const Pose& pose) { + mActor->setCMassOffsetGlobalPose(pose.toMat34()); +} + +////////////////////////////////////////////////////////// + +void Actor::setCMassOffsetGlobalPosition(const Ogre::Vector3& vec) { + mActor->setCMassOffsetGlobalPosition(NxConvert<NxVec3, Ogre::Vector3>(vec)); +} + +////////////////////////////////////////////////////////// + +void Actor::setCMassOffsetGlobalOrientation(const NxMat33& m) { + mActor->setCMassOffsetGlobalOrientation(m); +} + +////////////////////////////////////////////////////////// + +void Actor::setCMassOffsetGlobalOrientation(const Ogre::Matrix3& quat) { + NxUnderConstruction; + NxMat33 m; + mActor->setCMassOffsetGlobalOrientation(m); +} + +////////////////////////////////////////////////////////// + +void Actor::setCMassGlobalPose(const Pose& pose) { + mActor->setCMassGlobalPose(pose.toMat34()); +} + +////////////////////////////////////////////////////////// + +void Actor::setCMassGlobalPosition(const Ogre::Vector3& vec) { + mActor->setCMassGlobalPosition(NxConvert<NxVec3, Ogre::Vector3>(vec)); +} + +////////////////////////////////////////////////////////// + +void Actor::setCMassGlobalOrientation(const Ogre::Quaternion& quat) { + NxUnderConstruction; + NxMat33 m; + mActor->setCMassGlobalOrientation(m); +} +////////////////////////////////////////////////////////// + + +Pose Actor::getCMassLocalPose() const { + Pose pose; + pose.fromMat34(mActor->getCMassLocalPose()); + return pose; +} + +////////////////////////////////////////////////////////// + +Ogre::Vector3 Actor::getCMassLocalPosition() const { + return NxConvert<Ogre::Vector3, NxVec3>(mActor->getCMassLocalPosition()); +} + +////////////////////////////////////////////////////////// + +Ogre::Quaternion Actor::getCMassLocalOrientation() const { + return NxConvert<Ogre::Quaternion, NxQuat>(mActor->getCMassLocalOrientation()); +} + +////////////////////////////////////////////////////////// + +Pose Actor::getCMassGlobalPose() const { + Pose pose; + pose.fromMat34(mActor->getCMassGlobalPose()); + return pose; +} + +////////////////////////////////////////////////////////// + +Ogre::Vector3 Actor::getCMassGlobalPosition() const { + return NxConvert<Ogre::Vector3, NxVec3>(mActor->getCMassGlobalPosition()); +} + +////////////////////////////////////////////////////////// + +Ogre::Quaternion Actor::getCMassGlobalOrientation() const { + NxQuat quat; + mActor->getCMassGlobalOrientation().toQuat(quat); + return NxConvert<Ogre::Quaternion, NxQuat>(quat); +} + +////////////////////////////////////////////////////////// + + +void Actor::setMass(NxReal r) { + mActor->setMass(r); +} + +////////////////////////////////////////////////////////// + +NxReal Actor::getMass() const { + return mActor->getMass(); +} + +////////////////////////////////////////////////////////// + + +void Actor::setMassSpaceInertiaTensor(const Ogre::Vector3& vec) { + mActor->setMassSpaceInertiaTensor(NxConvert<NxVec3, Ogre::Vector3>(vec)); +} + +////////////////////////////////////////////////////////// + +Ogre::Vector3 Actor::getMassSpaceInertiaTensor() const { + return NxConvert<Ogre::Vector3, NxVec3>(mActor->getMassSpaceInertiaTensor()); +} + +////////////////////////////////////////////////////////// + +Ogre::Matrix3 Actor::getGlobalInertiaTensor() const { + NxUnderConstruction; + Ogre::Matrix3 m; + return m; +} + +////////////////////////////////////////////////////////// + +Ogre::Matrix3 Actor::getGlobalInertiaTensorInverse() const { + NxUnderConstruction; + Ogre::Matrix3 m; + return m; +} + +////////////////////////////////////////////////////////// + + +void Actor::updateMassFromShapeFromDensity(NxReal r) { + mActor->updateMassFromShapes(r,0); +} + +////////////////////////////////////////////////////////// + +void Actor::updateMassFromShapeAsMass(NxReal r) { + mActor->updateMassFromShapes(0,r); +} + +////////////////////////////////////////////////////////// + +void Actor::setLinearDamping(NxReal r) { + mActor->setLinearDamping(r); +} + +////////////////////////////////////////////////////////// + +NxReal Actor::getLinearDamping() const { + return mActor->getLinearDamping(); +} + +////////////////////////////////////////////////////////// + + +void Actor::setAngularDamping(NxReal r) { + mActor->setAngularDamping(r); +} + +////////////////////////////////////////////////////////// + +NxReal Actor::getAngularDamping() const { + return mActor->getAngularDamping(); +} + +////////////////////////////////////////////////////////// + +void Actor::setLinearVelocity(const Ogre::Vector3& vec) { + mActor->setLinearVelocity(NxConvert<NxVec3, Ogre::Vector3>(vec)); +} + +////////////////////////////////////////////////////////// + +void Actor::setAngularVelocity(const Ogre::Vector3& vec) { + mActor->setAngularVelocity(NxConvert<NxVec3, Ogre::Vector3>(vec)); +} + +////////////////////////////////////////////////////////// + + +Ogre::Vector3 Actor::getLinearVelocity() const { + return NxConvert<Ogre::Vector3, NxVec3>(mActor->getLinearVelocity()); +} + +////////////////////////////////////////////////////////// + +Ogre::Vector3 Actor::getAngularVelocity() const { + return NxConvert<Ogre::Vector3, NxVec3>(mActor->getAngularVelocity()); +} + +////////////////////////////////////////////////////////// + + +void Actor::setMaxAngularVelocity(NxReal r) { + mActor->setMaxAngularVelocity(r); +} + +////////////////////////////////////////////////////////// + +NxReal Actor::getMaxAngularVelocity() const { + return mActor->getMaxAngularVelocity(); +} + +////////////////////////////////////////////////////////// + +void Actor::setCCDMotionThreshold(NxReal r) { + mActor->setCCDMotionThreshold(r); +} + +////////////////////////////////////////////////////////// + +NxReal Actor::getCCDMotionThreshold() const { + return mActor->getCCDMotionThreshold(); +} + +////////////////////////////////////////////////////////// + +void Actor::setLinearMomentum(const Ogre::Vector3& vec) { + mActor->setLinearMomentum(NxConvert<NxVec3, Ogre::Vector3>(vec)); +} + +////////////////////////////////////////////////////////// + +void Actor::setAngularMomentum(const Ogre::Vector3& vec) { + mActor->setAngularMomentum(NxConvert<NxVec3, Ogre::Vector3>(vec)); +} + +////////////////////////////////////////////////////////// + +Ogre::Vector3 Actor::getLinearMomentum() const { + return NxConvert<Ogre::Vector3, NxVec3>(mActor->getLinearMomentum()); +} + +////////////////////////////////////////////////////////// + +Ogre::Vector3 Actor::getAngularMomentum() const { + return NxConvert<Ogre::Vector3, NxVec3>(mActor->getAngularMomentum()); +} + +////////////////////////////////////////////////////////// + +void Actor::addForceAtPos(const Ogre::Vector3& force, const Ogre::Vector3& pos, NxForceMode mode, bool wakeup) { + mActor->addForceAtPos(NxConvert<NxVec3, Ogre::Vector3>(force), NxConvert<NxVec3, Ogre::Vector3>(pos), mode, wakeup); +} + +////////////////////////////////////////////////////////// + +void Actor::addForceAtLocalPos(const Ogre::Vector3& force, const Ogre::Vector3& pos, NxForceMode mode, bool wakeup) { + mActor->addForceAtLocalPos(NxConvert<NxVec3, Ogre::Vector3>(force), NxConvert<NxVec3, Ogre::Vector3>(pos), mode, wakeup); +} + +////////////////////////////////////////////////////////// + +void Actor::addLocalForceAtPos(const Ogre::Vector3& force, const Ogre::Vector3& pos, NxForceMode mode, bool wakeup) { + mActor->addLocalForceAtPos(NxConvert<NxVec3, Ogre::Vector3>(force), NxConvert<NxVec3, Ogre::Vector3>(pos), mode, wakeup); +} + +////////////////////////////////////////////////////////// + +void Actor::addLocalForceAtLocalPos(const Ogre::Vector3& force, const Ogre::Vector3& pos, NxForceMode mode, bool wakeup) { + mActor->addLocalForceAtLocalPos(NxConvert<NxVec3, Ogre::Vector3>(force), NxConvert<NxVec3, Ogre::Vector3>(pos), mode, wakeup); +} + +////////////////////////////////////////////////////////// + +void Actor::addForce(const Ogre::Vector3& force, NxForceMode mode, bool wakeup) { + mActor->addForce(NxConvert<NxVec3, Ogre::Vector3>(force), mode, wakeup); +} + +////////////////////////////////////////////////////////// + +void Actor::addForce(const NxVec3& force, NxForceMode mode, bool wakeup) { + mActor->addForce(force, mode, wakeup); +} + +////////////////////////////////////////////////////////// + +void Actor::addForce(NxReal x, NxReal y, NxReal z, NxForceMode mode, bool wakeup) { + mActor->addForce(NxVec3(x,y,z), mode, wakeup); +} + +////////////////////////////////////////////////////////// + +void Actor::addLocalForce(const Ogre::Vector3& force, NxForceMode mode, bool wakeup) { + mActor->addLocalForce(NxConvert<NxVec3, Ogre::Vector3>(force), mode, wakeup); +} + +////////////////////////////////////////////////////////// + +void Actor::addTorque(const NxVec3& torque, NxForceMode mode, bool wakeup) { + mActor->addTorque(torque, mode, wakeup); +} + +////////////////////////////////////////////////////////// + +void Actor::addTorque(const Ogre::Vector3& torque, NxForceMode mode, bool wakeup) { + mActor->addTorque(NxConvert<NxVec3, Ogre::Vector3>(torque), mode, wakeup); +} + +////////////////////////////////////////////////////////// + +void Actor::addLocalTorque(const Ogre::Vector3& torque, NxForceMode mode, bool wakeup) { + mActor->addLocalTorque(NxConvert<NxVec3, Ogre::Vector3>(torque), mode, wakeup); +} + +////////////////////////////////////////////////////////// + +NxReal Actor::computeKineticEnergy() const { + return mActor->computeKineticEnergy(); +} + +////////////////////////////////////////////////////////// + +Ogre::Vector3 Actor::getPointVelocity(const Ogre::Vector3& vec) const { + return NxConvert<Ogre::Vector3, NxVec3>(mActor->getPointVelocity(NxConvert<NxVec3, Ogre::Vector3>(vec))); +} + +////////////////////////////////////////////////////////// + +Ogre::Vector3 Actor::getLocalPointVelocity(const Ogre::Vector3& vec) const { + return NxConvert<Ogre::Vector3, NxVec3>(mActor->getLocalPointVelocity(NxConvert<NxVec3, Ogre::Vector3>(vec))); +} + +////////////////////////////////////////////////////////// + +bool Actor::isGroupSleeping() const { + return mActor->isGroupSleeping(); +} + +////////////////////////////////////////////////////////// + +bool Actor::isSleeping() const { + return mActor->isSleeping(); +} + +////////////////////////////////////////////////////////// + +NxReal Actor::getSleepLinearVelocity() const { + return mActor->getSleepLinearVelocity(); +} + +////////////////////////////////////////////////////////// + +void Actor::setSleepLinearVelocity(NxReal threshold) { + mActor->setSleepLinearVelocity(threshold); +} + +////////////////////////////////////////////////////////// + +NxReal Actor::getSleepAngularVelocity() const { + return mActor->getSleepAngularVelocity(); +} + +////////////////////////////////////////////////////////// + +void Actor::setSleepAngularVelocity(NxReal threshold) { + mActor->setSleepAngularVelocity(threshold); +} + +////////////////////////////////////////////////////////// + +NxReal Actor::getSleepEnergyThreshold() const { + return mActor->getSleepEnergyThreshold(); +} + +////////////////////////////////////////////////////////// + +void Actor::setSleepEnergyThreshold(NxReal threshold) { + mActor->setSleepEnergyThreshold(threshold); +} + +////////////////////////////////////////////////////////// + +void Actor::wakeUp(NxReal wakeCounterValue) { + mActor->wakeUp(wakeCounterValue); +} + +////////////////////////////////////////////////////////// + +void Actor::putToSleep() { + mActor->putToSleep(); +} + +////////////////////////////////////////////////////////// + +void Actor::raiseBodyFlag(NxBodyFlag f) { + mActor->raiseBodyFlag(f); +} + +////////////////////////////////////////////////////////// + +void Actor::clearBodyFlag(NxBodyFlag f) { + mActor->clearBodyFlag(f); +} + +////////////////////////////////////////////////////////// + +bool Actor::hasBodyFlag(NxBodyFlag f) const { + return mActor->readBodyFlag(f); +} + +////////////////////////////////////////////////////////// + +void Actor::setSolverIterationCount(NxU32 c) { + mActor->setSolverIterationCount(c); +} + +////////////////////////////////////////////////////////// + +NxU32 Actor::getSolverIterationCount() const { + return mActor->getSolverIterationCount(); +} + +////////////////////////////////////////////////////////// + +#if NX_SUPPORT_SWEEP_API + +NxU32 Actor::linearSweep(const Ogre::Vector3& motion, NxU32 flags, void* userData, NxU32 nbShapeDescriptions, NxSweepQueryHit* shapes, NxUserEntityReport<NxSweepQueryHit>* callback, const NxSweepCache* sweepCache) { + return mActor->linearSweep(NxConvert<NxVec3, Ogre::Vector3>(motion), flags, userData, nbShapeDescriptions, shapes, callback, sweepCache); +} + +#endif + +////////////////////////////////////////////////////////// + +#if NX_SDK_VERSION_NUMBER >= 260 + +Compartment* Actor::getCompartment() const { + NxUnderConstruction; + return NULL; +} + +#endif + +////////////////////////////////////////////////////////// + +Shape* Actor::addShape(ShapeBlueprint* sd) { + + + NxShapeIndex id = mCollisionModel.count(); + sd->_bindToNxActor(this, id); + delete sd; + Shape* s = mCollisionModel.get(id); + + + return s; + +} + +////////////////////////////////////////////////////////// + +void Actor::removeShape(Shape* sh) { + + + for (Shape* shape = mCollisionModel.begin();shape = mCollisionModel.next();) { + if (shape == sh) { + mActor->releaseShape(*sh->getNxShape()); + mCollisionModel.remove(sh->getIndex()); + + if (mDynamicCollisionModel.has(sh->getIndex())) + mDynamicCollisionModel.remove(sh->getIndex()); + + delete shape; + + return; + } + } + +} + +////////////////////////////////////////////////////////// + +void Actor::removeShape(NxShapeIndex id) { + + Shape* shape = mCollisionModel[id]; + + if (shape == 0) + return; + + shape->releaseShape(); + mCollisionModel.remove(id); + + delete shape; +} + +////////////////////////////////////////////////////////// + +NxU32 Actor::getNbShapes() const { + return mCollisionModel.count(); +} + +////////////////////////////////////////////////////////// + +CollisionModel* Actor::getCollisionModel() { + return &mCollisionModel; +} + +////////////////////////////////////////////////////////// + +CollisionModel* Actor::getDynamicCollisionModel() { + return &mDynamicCollisionModel; +} + +////////////////////////////////////////////////////////// + +void* Actor::getNxActorUserData() { + return mActor->userData; +} + +////////////////////////////////////////////////////////// + +NxActorUserData* Actor::getUserData() { + return mNxActorUserData; +} + +////////////////////////////////////////////////////////// + +StringPairList Actor::saveCustom() { + StringPairList l; + l.insert("ActorType", "Actor"); + + return l; +} + +////////////////////////////////////////////////////////// + +void Actor::disable() { + + mActor->raiseActorFlag(NX_AF_DISABLE_COLLISION); + mActor->raiseActorFlag(NX_AF_DISABLE_RESPONSE); + mActor->raiseActorFlag(NX_AF_FLUID_DISABLE_COLLISION); + mActor->raiseBodyFlag(NX_BF_FROZEN); + mActor->raiseBodyFlag(NX_BF_FROZEN_ROT); + mActor->setAngularVelocity(NxVec3(0,0,0)); + mActor->setAngularMomentum(NxVec3(0,0,0)); + mActor->setLinearMomentum(NxVec3(0,0,0)); + mActor->setLinearVelocity(NxVec3(0,0,0)); + +// disableVisualisation(); +} + +////////////////////////////////////////////////////////// + +FixedJoint* Actor::joinWith(Actor* actorB, JointParams jp) { + return mOwner->createFixedJoint(this, actorB, jp); +} + +////////////////////////////////////////////////////////// + +} //End of NxOgre namespace. Added: trunk/python-ogre/ThirdParty/nxogre/NxOgreActor.h =================================================================== --- trunk/python-ogre/ThirdParty/nxogre/NxOgreActor.h (rev 0) +++ trunk/python-ogre/ThirdParty/nxogre/NxOgreActor.h 2008-01-16 05:33:53 UTC (rev 551) @@ -0,0 +1,825 @@ +// +// NxOgre a wrapper for the PhysX (formerly Novodex) physics library and the Ogre 3D rendering engine. +// Copyright (C) 2005 - 2007 Robin Southern and NxOgre.org http://www.nxogre.org +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +// + +#ifndef __NXOGRE_ACTOR_H__ +#define __NXOGRE_ACTOR_H__ + +#include "NxOgrePrerequisites.h" +#include "NxOgreContainer.h" // For: mCollisionList +#include "NxOgreParams.h" +#include "NxOgrePose.h" + +namespace NxOgre { + + /** \page actorparams ActorParams + + String base params are case and space insensitive. + + Examples: + + <code> + "mass: 1" + + "mass: 1, group: myActors" + + "mass: 1, group: myActors, lineardamping: 3" + </code> + + Non-String based params can be used as well, and offer access to some variables of the params + that cannot be converted into a string (pointers, etc.). + + Due to efficency purposes and insane string conversion. With string parameters more than four, + you should work with the non-string based params system. + + <code> + ActorParams params; + params.setToDefault(); + params.mMass = 10; + params.mGroupAsIndex = 1; + </code> + + Is exactly the same as: + + <code> + "mass: 10, group-index: 1" + </code> + + Current Supported String Params + ----------------------------- + + - density (float) + - Description: Density of this Actor. Use this or mass, do not use both. + - Example: "Density: 1.5" + - See: ActorParams::mDensity and NxActorDesc::density for more information. + + - group (string) + - Description: Actor Group name of this actor. Use this or group-index, but not both. + - Example: "group: myGroup" + - See: ActorParams::mGroupAsName + + - group-index (unsigned int) + - Description: Actor Group ID of this actor. Use this or group, but not both. + - Example: "group-index: 0" + - See: ActorParams::mGroupAsIndex + + - dominancegroup (unsigned int) + - Description: Dominance Group ID of this actor. + - Example: "dominancegroup: 0" + - See: ActorParams::mDominanceGroup + + - massspaceinertia (Vector3) + - Description: Mass Space Inertia of this Actor + - Example: "massspaceinertia: 1 0 1" + - See: ActorParams::mMassSpaceInertia + + - linearvelocity (Vector3) + - Description: Linear Velocity of this Actor + - Example: "linearvelocity: 1 0 1" + - See: ActorParams::mLinearVelocity + + - angularvelocity (Vector3) + - Description: Angular Velocity of this Actor + - Example: "angularvelocity: 1 0 1" + - See: ActorParams::mAngularVelocity + + - wakeupcounter (float) + - Description: Wake up time counter + - Example: "wakeupcounter: 1000.0" + - See: ActorParams::mWakeupCounter + + - mass (float) + - Description: Mass of this Actor. Use this or density, do not use both. + - Example: "mass: 10" + - See: ActorParams::mMass and NxBodyDesc::mass for more information. + + - lineardamping (float) + - Description: Linear Damping of the Actor + - Example: "lineardamping: 0.1" + - See: ActorParams::mLinearDamping + + - angulardamping (float) + - Description: Angular Damping of the Actor + - Example: "angulardamping: 0.1" + - See: ActorParams::mAngularDamping + + - maxangularvelocity (float) + - Description: Maximum allowed angular velocity + - Example: "maxangularvelocity: 10" + - See: ActorParams::mMaxAngularVelocity + + - sleepangularvelocity (float) + - Description: Maximum angular velocity at which the Actor can go to sleep. + - Example: "sleepangularvelocity: 20" + - See: ActorParams:mSleepAngularVelocity + + - ccdmotionthreshold (float) + - Description: When CCD is globally enabled, it is still not performed if the + motion distance of all points on the Actor is below this threshold. + - Example: "ccdmotionthreshold: 5" + - See: ActorParams::mCCDMotionThreshold + + - solveriterationcount (unsigned int) + - Description: Number of solver iterations performed when processing joint/contacts + connected to this Actor. + - Example: "solveriterationcount: 5" + - Range: 1 to 255 + - See: ActorParams::mSolverIterationCount + + - sleepenergytheshold (float) + - Description: Threshold for the energy-based sleeping algorithm. Only used when + the NX_BF_ENERGY_SLEEP_TEST flag is set + - Example: "sleepenergythreshold: 0.006" + - See: ActorParams::mSleepEnergyThreshold + + - sleepdamping (float) + - Description: Damping factor for bodies that are about to sleep. + - Example: "sleepdamping: 0.5" + - See: ActorParams::mSleepDamping + + - node-scale (Vector3) + - Applicable to Body and Actors that use a visual representation of the NxActor. + - Description: Scale factor of the SceneNode + - Example: "node-slace: 2 2 2" + - See: ActorParams::mNodeScale + + - node-shadows (bool) + - Applicable to Body and Actors that use a visual representation of the NxActor. + - Description: Apply shadows to the first entity (Body class). See other custom Actors + to see how shadows apply to it. + - Example: "node-shadows: yes" + - See: ActorParams::mNodeShaodws + + - node (string) + - Applicable to Body and Actors that use a visual representation of the NxActor. + - Description: Name of the SceneNode, or name of an existing SceneNode to use (Body only). + - Example: "node: myNodeName" + - See: ActorParams::mNodeName + + */ + + + /** ActorParams + + @see \ref actorparams for the full string argument documentation. + */ + class NxExport ActorParams : public Params { + + public: + + /** @brief Class based params. + @note Faster, less readable and reusable. + @see \ref actorparams + @example + <code> + ActorParams ap; + ap.mMass = 10; + ap.mGroup = "myGroup"; + ..., ap, ... + </code> + + */ + ActorParams() { + setToDefault(); + } + + /** @brief String based params. "mass: 10, group: myGroup" + @note Slower but readable. + @params String of params. + @see \ref actorparams + @example + <code> + ..., "mass: 10, group: myGroup", ... + </code> + */ + ActorParams(const char* p) { + process(p); + } + + /** @brief String based params. "mass: 10, group: myGroup" + @note Slower but readable. + @params + @see \ref actorparams + @example + <code> + ..., "mass: 10, group: myGroup", ... + </code> + */ + ActorParams(NxString p) { + process(p); + } + + /** @brief Set's the Params to default based on NxActorDesc and NxBodyDesc defaults. + */ + void setToDefault(); + + /** @brief Set's the Params based from an NxActorDesc + */ + void fromNxActorDesc(NxActorDesc&... [truncated message content] |
From: <and...@us...> - 2008-01-30 00:13:57
|
Revision: 559 http://python-ogre.svn.sourceforge.net/python-ogre/?rev=559&view=rev Author: andy_miller Date: 2008-01-29 16:14:01 -0800 (Tue, 29 Jan 2008) Log Message: ----------- General updates to the thirdparty code base Modified Paths: -------------- trunk/python-ogre/ThirdParty/caelum/CaelumPrerequisites.h trunk/python-ogre/ThirdParty/forests/BatchPage.cpp trunk/python-ogre/ThirdParty/forests/BatchedGeometry.cpp trunk/python-ogre/ThirdParty/forests/BatchedGeometry.h trunk/python-ogre/ThirdParty/forests/GrassLoader.cpp trunk/python-ogre/ThirdParty/forests/GrassLoader.h trunk/python-ogre/ThirdParty/forests/ImpostorPage.cpp trunk/python-ogre/ThirdParty/forests/ImpostorPage.h trunk/python-ogre/ThirdParty/forests/TreeLoader2D.cpp trunk/python-ogre/ThirdParty/forests/TreeLoader2D.h trunk/python-ogre/ThirdParty/nxogre/NxOgreGroup.h trunk/python-ogre/ThirdParty/nxogre/NxOgreHelpers.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreHelpers.h trunk/python-ogre/ThirdParty/nxogre/NxOgreOgreNodeRenderable.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgrePose.h trunk/python-ogre/ThirdParty/nxogre/NxOgreResourceStreamPtr.h trunk/python-ogre/ThirdParty/nxogre/NxOgreStable.h trunk/python-ogre/ThirdParty/ogreal/OgreALPrereqs.h trunk/python-ogre/ThirdParty/ogrebullet/Dynamics/OgreBulletDynamicsWorld.cpp trunk/python-ogre/ThirdParty/ogrebullet/Dynamics/OgreBulletDynamicsWorld.h trunk/python-ogre/ThirdParty/quickgui/QuickGUIBorder.cpp trunk/python-ogre/ThirdParty/quickgui/QuickGUIBorder.h trunk/python-ogre/ThirdParty/quickgui/QuickGUIButton.cpp trunk/python-ogre/ThirdParty/quickgui/QuickGUIButton.h trunk/python-ogre/ThirdParty/quickgui/QuickGUICheckBox.cpp trunk/python-ogre/ThirdParty/quickgui/QuickGUICheckBox.h trunk/python-ogre/ThirdParty/quickgui/QuickGUIComboBox.cpp trunk/python-ogre/ThirdParty/quickgui/QuickGUIComboBox.h trunk/python-ogre/ThirdParty/quickgui/QuickGUIConfigScriptParser.h trunk/python-ogre/ThirdParty/quickgui/QuickGUIConsole.cpp trunk/python-ogre/ThirdParty/quickgui/QuickGUIConsole.h trunk/python-ogre/ThirdParty/quickgui/QuickGUIEffect.cpp trunk/python-ogre/ThirdParty/quickgui/QuickGUIEffect.h trunk/python-ogre/ThirdParty/quickgui/QuickGUIEventArgs.h trunk/python-ogre/ThirdParty/quickgui/QuickGUIHorizontalScrollBar.cpp trunk/python-ogre/ThirdParty/quickgui/QuickGUIHorizontalScrollBar.h trunk/python-ogre/ThirdParty/quickgui/QuickGUIHorizontalTrackBar.cpp trunk/python-ogre/ThirdParty/quickgui/QuickGUIHorizontalTrackBar.h trunk/python-ogre/ThirdParty/quickgui/QuickGUIImage.cpp trunk/python-ogre/ThirdParty/quickgui/QuickGUIImage.h trunk/python-ogre/ThirdParty/quickgui/QuickGUIKeyCode.h trunk/python-ogre/ThirdParty/quickgui/QuickGUILabel.cpp trunk/python-ogre/ThirdParty/quickgui/QuickGUILabel.h trunk/python-ogre/ThirdParty/quickgui/QuickGUILabelArea.cpp trunk/python-ogre/ThirdParty/quickgui/QuickGUILabelArea.h trunk/python-ogre/ThirdParty/quickgui/QuickGUIList.cpp trunk/python-ogre/ThirdParty/quickgui/QuickGUIList.h trunk/python-ogre/ThirdParty/quickgui/QuickGUIManager.cpp trunk/python-ogre/ThirdParty/quickgui/QuickGUIManager.h trunk/python-ogre/ThirdParty/quickgui/QuickGUIMemberFunctionPointer.h trunk/python-ogre/ThirdParty/quickgui/QuickGUIMenuLabel.cpp trunk/python-ogre/ThirdParty/quickgui/QuickGUIMenuLabel.h trunk/python-ogre/ThirdParty/quickgui/QuickGUIMouseButtonID.h trunk/python-ogre/ThirdParty/quickgui/QuickGUIMouseCursor.cpp trunk/python-ogre/ThirdParty/quickgui/QuickGUIMouseCursor.h trunk/python-ogre/ThirdParty/quickgui/QuickGUINStateButton.cpp trunk/python-ogre/ThirdParty/quickgui/QuickGUINStateButton.h trunk/python-ogre/ThirdParty/quickgui/QuickGUIPanel.cpp trunk/python-ogre/ThirdParty/quickgui/QuickGUIPanel.h trunk/python-ogre/ThirdParty/quickgui/QuickGUIPoint.cpp trunk/python-ogre/ThirdParty/quickgui/QuickGUIPoint.h trunk/python-ogre/ThirdParty/quickgui/QuickGUIPrecompiledHeaders.h trunk/python-ogre/ThirdParty/quickgui/QuickGUIProgressBar.cpp trunk/python-ogre/ThirdParty/quickgui/QuickGUIProgressBar.h trunk/python-ogre/ThirdParty/quickgui/QuickGUIQuad.cpp trunk/python-ogre/ThirdParty/quickgui/QuickGUIQuad.h trunk/python-ogre/ThirdParty/quickgui/QuickGUIQuadContainer.cpp trunk/python-ogre/ThirdParty/quickgui/QuickGUIQuadContainer.h trunk/python-ogre/ThirdParty/quickgui/QuickGUIRect.cpp trunk/python-ogre/ThirdParty/quickgui/QuickGUIRect.h trunk/python-ogre/ThirdParty/quickgui/QuickGUIRoot.cpp trunk/python-ogre/ThirdParty/quickgui/QuickGUIRoot.h trunk/python-ogre/ThirdParty/quickgui/QuickGUIScrollPane.cpp trunk/python-ogre/ThirdParty/quickgui/QuickGUIScrollPane.h trunk/python-ogre/ThirdParty/quickgui/QuickGUISheet.cpp trunk/python-ogre/ThirdParty/quickgui/QuickGUISheet.h trunk/python-ogre/ThirdParty/quickgui/QuickGUISize.cpp trunk/python-ogre/ThirdParty/quickgui/QuickGUISize.h trunk/python-ogre/ThirdParty/quickgui/QuickGUISkinSet.cpp trunk/python-ogre/ThirdParty/quickgui/QuickGUISkinSet.h trunk/python-ogre/ThirdParty/quickgui/QuickGUISkinSetManager.cpp trunk/python-ogre/ThirdParty/quickgui/QuickGUISkinSetManager.h trunk/python-ogre/ThirdParty/quickgui/QuickGUIText.cpp trunk/python-ogre/ThirdParty/quickgui/QuickGUIText.h trunk/python-ogre/ThirdParty/quickgui/QuickGUITextArea.cpp trunk/python-ogre/ThirdParty/quickgui/QuickGUITextArea.h trunk/python-ogre/ThirdParty/quickgui/QuickGUITextBox.cpp trunk/python-ogre/ThirdParty/quickgui/QuickGUITextBox.h trunk/python-ogre/ThirdParty/quickgui/QuickGUITextHelper.cpp trunk/python-ogre/ThirdParty/quickgui/QuickGUITextHelper.h trunk/python-ogre/ThirdParty/quickgui/QuickGUITitleBar.cpp trunk/python-ogre/ThirdParty/quickgui/QuickGUITitleBar.h trunk/python-ogre/ThirdParty/quickgui/QuickGUITree.h trunk/python-ogre/ThirdParty/quickgui/QuickGUIVertex.h trunk/python-ogre/ThirdParty/quickgui/QuickGUIVertexBuffer.cpp trunk/python-ogre/ThirdParty/quickgui/QuickGUIVertexBuffer.h trunk/python-ogre/ThirdParty/quickgui/QuickGUIVerticalScrollBar.cpp trunk/python-ogre/ThirdParty/quickgui/QuickGUIVerticalScrollBar.h trunk/python-ogre/ThirdParty/quickgui/QuickGUIVerticalTrackBar.cpp trunk/python-ogre/ThirdParty/quickgui/QuickGUIVerticalTrackBar.h trunk/python-ogre/ThirdParty/quickgui/QuickGUIWidget.cpp trunk/python-ogre/ThirdParty/quickgui/QuickGUIWidget.h trunk/python-ogre/ThirdParty/quickgui/QuickGUIWindow.cpp trunk/python-ogre/ThirdParty/quickgui/QuickGUIWindow.h Added Paths: ----------- trunk/python-ogre/ThirdParty/nxogre/FireState.cpp trunk/python-ogre/ThirdParty/nxogre/FireState.h Modified: trunk/python-ogre/ThirdParty/caelum/CaelumPrerequisites.h =================================================================== --- trunk/python-ogre/ThirdParty/caelum/CaelumPrerequisites.h 2008-01-30 00:12:44 UTC (rev 558) +++ trunk/python-ogre/ThirdParty/caelum/CaelumPrerequisites.h 2008-01-30 00:14:01 UTC (rev 559) @@ -25,19 +25,7 @@ #include "Ogre.h" // Define the dll export qualifier if compiling for Windows -// #if OGRE_PLATFORM == OGRE_PLATFORM_WIN32 -// #ifdef CAELUM_LIB -// #define DllExport __declspec (dllexport) -// #else -// #ifdef __MINGW32__ -// #define DllExport -// #else -// #define DllExport __declspec (dllimport) -// #endif -// #endif -// #else #define DllExport -// #endif // Define the version code #define CAELUM_VERSION_MAIN 0 Modified: trunk/python-ogre/ThirdParty/forests/BatchPage.cpp =================================================================== --- trunk/python-ogre/ThirdParty/forests/BatchPage.cpp 2008-01-30 00:12:44 UTC (rev 558) +++ trunk/python-ogre/ThirdParty/forests/BatchPage.cpp 2008-01-30 00:14:01 UTC (rev 559) @@ -230,29 +230,36 @@ Pass *pass = tech->getPass(p); //Setup vertex program - pass->setVertexProgram(vertexProgName); - GpuProgramParametersSharedPtr params = pass->getVertexProgramParameters(); + if (pass->getVertexProgramName() == "") + pass->setVertexProgram(vertexProgName); - params->setNamedAutoConstant("objSpaceLight", GpuProgramParameters::ACT_LIGHT_POSITION_OBJECT_SPACE); - params->setNamedAutoConstant("lightDiffuse", GpuProgramParameters::ACT_DERIVED_LIGHT_DIFFUSE_COLOUR); - params->setNamedAutoConstant("lightAmbient", GpuProgramParameters::ACT_DERIVED_AMBIENT_LIGHT_COLOUR); + try{ + GpuProgramParametersSharedPtr params = pass->getVertexProgramParameters(); - params->setNamedAutoConstant("matAmbient", GpuProgramParameters::ACT_SURFACE_AMBIENT_COLOUR); - params->setNamedAutoConstant("worldViewProj", GpuProgramParameters::ACT_WORLDVIEWPROJ_MATRIX); + params->setNamedAutoConstant("objSpaceLight", GpuProgramParameters::ACT_LIGHT_POSITION_OBJECT_SPACE); + params->setNamedAutoConstant("lightDiffuse", GpuProgramParameters::ACT_DERIVED_LIGHT_DIFFUSE_COLOUR); + params->setNamedAutoConstant("lightAmbient", GpuProgramParameters::ACT_DERIVED_AMBIENT_LIGHT_COLOUR); - if (fadeEnabled){ - params->setNamedAutoConstant("camPos", GpuProgramParameters::ACT_CAMERA_POSITION_OBJECT_SPACE); + params->setNamedAutoConstant("matAmbient", GpuProgramParameters::ACT_SURFACE_AMBIENT_COLOUR); + params->setNamedAutoConstant("worldViewProj", GpuProgramParameters::ACT_WORLDVIEWPROJ_MATRIX); - //Set fade ranges - params->setNamedAutoConstant("invisibleDist", GpuProgramParameters::ACT_CUSTOM); - params->setNamedConstant("invisibleDist", invisibleDist); + if (fadeEnabled){ + params->setNamedAutoConstant("camPos", GpuProgramParameters::ACT_CAMERA_POSITION_OBJECT_SPACE); - params->setNamedAutoConstant("fadeGap", GpuProgramParameters::ACT_CUSTOM); - params->setNamedConstant("fadeGap", invisibleDist - visibleDist); + //Set fade ranges + params->setNamedAutoConstant("invisibleDist", GpuProgramParameters::ACT_CUSTOM); + params->setNamedConstant("invisibleDist", invisibleDist); - if (pass->getAlphaRejectFunction() == CMPF_ALWAYS_PASS) - pass->setSceneBlending(SBT_TRANSPARENT_ALPHA); + params->setNamedAutoConstant("fadeGap", GpuProgramParameters::ACT_CUSTOM); + params->setNamedConstant("fadeGap", invisibleDist - visibleDist); + + if (pass->getAlphaRejectFunction() == CMPF_ALWAYS_PASS) + pass->setSceneBlending(SBT_TRANSPARENT_ALPHA); + } } + catch (...) { + OGRE_EXCEPT(Exception::ERR_INTERNAL_ERROR, "Error configuring batched geometry transitions. If you're using materials with custom vertex shaders, they will need to implement fade transitions to be compatible with BatchPage.", "BatchPage::_updateShaders()"); + } } } Modified: trunk/python-ogre/ThirdParty/forests/BatchedGeometry.cpp =================================================================== --- trunk/python-ogre/ThirdParty/forests/BatchedGeometry.cpp 2008-01-30 00:12:44 UTC (rev 558) +++ trunk/python-ogre/ThirdParty/forests/BatchedGeometry.cpp 2008-01-30 00:14:01 UTC (rev 559) @@ -25,6 +25,7 @@ #include "OgreStringConverter.h" #include "OgreEntity.h" #include "OgreSubMesh.h" +#include "OgreSubEntity.h" #include "OgreMesh.h" #include "OgreMeshManager.h" #include "OgreHardwareBufferManager.h" @@ -55,16 +56,16 @@ void BatchedGeometry::addEntity(Entity *ent, const Vector3 &position, const Quaternion &orientation, const Vector3 &scale, const Ogre::ColourValue &color) { - //For each submesh - Mesh::SubMeshIterator i = ent->getMesh()->getSubMeshIterator(); - while (i.hasMoreElements()){ - //Get the submesh - SubMesh *mesh = i.peekNext(); + //For each subentity + for (uint i = 0; i < ent->getNumSubEntities(); ++i){ + //Get the subentity + SubEntity *subEntity = ent->getSubEntity(i); + SubMesh *subMesh = subEntity->getSubMesh(); //Generate a format string that uniquely identifies this material & vertex/index format - if (mesh->vertexData == NULL) + if (subMesh->vertexData == NULL) OGRE_EXCEPT(Exception::ERR_INVALIDPARAMS, "BatchedGeometry cannot use meshes with shared vertex data", "BatchedGeometry::addEntity()"); - String formatStr = getFormatString(mesh); + String formatStr = getFormatString(subEntity); //If a batch using an identical format exists... SubBatch *batch; @@ -74,15 +75,12 @@ batch = batchIter->second; } else { //Otherwise create a new batch - batch = new SubBatch(this, mesh); + batch = new SubBatch(this, subEntity); subBatchMap.insert(std::pair<String, SubBatch*>(formatStr, batch)); } //Now add the submesh to the compatible batch - batch->addSubMesh(mesh, position, orientation, scale, color); - - //Next item - i.getNext(); + batch->addSubEntity(subEntity, position, orientation, scale, color); } //Update bounding box @@ -110,14 +108,14 @@ return BatchedGeometry::SubBatchIterator((SubBatchMap&)subBatchMap); } -String BatchedGeometry::getFormatString(SubMesh *mesh) +String BatchedGeometry::getFormatString(SubEntity *ent) { StringUtil::StrStreamType str; - str << mesh->getMaterialName() << "|"; - str << mesh->indexData->indexBuffer->getType() << "|"; + str << ent->getMaterialName() << "|"; + str << ent->getSubMesh()->indexData->indexBuffer->getType() << "|"; - const VertexDeclaration::VertexElementList &elemList = mesh->vertexData->vertexDeclaration->getElements(); + const VertexDeclaration::VertexElementList &elemList = ent->getSubMesh()->vertexData->vertexDeclaration->getElements(); VertexDeclaration::VertexElementList::const_iterator i; for (i = elemList.begin(); i != elemList.end(); ++i) { @@ -229,16 +227,18 @@ -BatchedGeometry::SubBatch::SubBatch(BatchedGeometry *parent, SubMesh *mesh) +BatchedGeometry::SubBatch::SubBatch(BatchedGeometry *parent, SubEntity *ent) { - meshType = mesh; - material = MaterialManager::getSingleton().getByName(mesh->getMaterialName()); + meshType = ent->getSubMesh(); this->parent = parent; built = false; + Material *origMat = ((MaterialPtr)MaterialManager::getSingleton().getByName(ent->getMaterialName())).getPointer(); + material = MaterialManager::getSingleton().getByName(getMaterialClone(origMat)->getName()); + //Setup vertex/index data structure - vertexData = mesh->vertexData->clone(false); - indexData = mesh->indexData->clone(false); + vertexData = meshType->vertexData->clone(false); + indexData = meshType->indexData->clone(false); //Remove blend weights from vertex format const VertexElement* blendIndices = vertexData->vertexDeclaration->findElementBySemantic(VES_BLEND_INDICES); @@ -275,13 +275,23 @@ delete indexData; } -void BatchedGeometry::SubBatch::addSubMesh(SubMesh *mesh, const Vector3 &position, const Quaternion &orientation, const Vector3 &scale, const Ogre::ColourValue &color) +Material *BatchedGeometry::SubBatch::getMaterialClone(Material *mat) { + String clonedName = mat->getName() + "_Batched"; + MaterialPtr clonedMat = MaterialManager::getSingleton().getByName(clonedName); + if (clonedMat.isNull()) + clonedMat = mat->clone(clonedName); + + return clonedMat.getPointer(); +} + +void BatchedGeometry::SubBatch::addSubEntity(SubEntity *ent, const Vector3 &position, const Quaternion &orientation, const Vector3 &scale, const Ogre::ColourValue &color) +{ assert(!built); //Add this submesh to the queue QueuedMesh newMesh; - newMesh.mesh = mesh; + newMesh.mesh = ent->getSubMesh(); newMesh.position = position; newMesh.orientation = orientation; newMesh.scale = scale; @@ -302,8 +312,8 @@ meshQueue.push_back(newMesh); //Increment the vertex/index count so the buffers will have room for this mesh - vertexData->vertexCount += mesh->vertexData->vertexCount; - indexData->indexCount += mesh->indexData->indexCount; + vertexData->vertexCount += ent->getSubMesh()->vertexData->vertexCount; + indexData->indexCount += ent->getSubMesh()->indexData->indexCount; } void BatchedGeometry::SubBatch::build() @@ -640,4 +650,5 @@ { return parent->queryLights(); } + #endif Modified: trunk/python-ogre/ThirdParty/forests/BatchedGeometry.h =================================================================== --- trunk/python-ogre/ThirdParty/forests/BatchedGeometry.h 2008-01-30 00:12:44 UTC (rev 558) +++ trunk/python-ogre/ThirdParty/forests/BatchedGeometry.h 2008-01-30 00:14:01 UTC (rev 559) @@ -49,10 +49,10 @@ class SubBatch: public Ogre::Renderable { public: - SubBatch(BatchedGeometry *parent, Ogre::SubMesh *mesh); + SubBatch(BatchedGeometry *parent, Ogre::SubEntity *ent); ~SubBatch(); - void addSubMesh(Ogre::SubMesh *mesh, const Ogre::Vector3 &position, const Ogre::Quaternion &orientation, const Ogre::Vector3 &scale, const Ogre::ColourValue &color = Ogre::ColourValue::White); + void addSubEntity(Ogre::SubEntity *ent, const Ogre::Vector3 &position, const Ogre::Quaternion &orientation, const Ogre::Vector3 &scale, const Ogre::ColourValue &color = Ogre::ColourValue::White); void build(); void clear(); @@ -73,6 +73,11 @@ bool castsShadows(void) const { return parent->getCastShadows(); } private: + //This function is used to make a single clone of materials used, since the materials + //will be modified by the batch system (and it wouldn't be good to modify the original materials + //that the user may be using somewhere else). + Ogre::Material *getMaterialClone(Ogre::Material *mat); + //A structure defining the desired position/orientation/scale of a batched mesh. The //SubMesh is not specified since that can be determined by which MeshQueue this belongs to. struct QueuedMesh @@ -100,7 +105,7 @@ }; private: - Ogre::String getFormatString(Ogre::SubMesh *mesh); + Ogre::String getFormatString(Ogre::SubEntity *ent); typedef std::map<Ogre::String, SubBatch*> SubBatchMap; //Stores a list of GeomBatch'es, using a format string (generated with getGeometryFormatString()) as the key value SubBatchMap subBatchMap; Modified: trunk/python-ogre/ThirdParty/forests/GrassLoader.cpp =================================================================== --- trunk/python-ogre/ThirdParty/forests/GrassLoader.cpp 2008-01-30 00:12:44 UTC (rev 558) +++ trunk/python-ogre/ThirdParty/forests/GrassLoader.cpp 2008-01-30 00:14:01 UTC (rev 559) @@ -43,6 +43,9 @@ { GrassLoader::geom = geom; + heightFunction = NULL; + heightFunctionUserData = NULL; + windDir = Vector3::UNIT_X; densityFactor = 1.0f; renderQueue = RENDER_QUEUE_6; @@ -246,8 +249,8 @@ float y1, y2; if (heightFunction){ - y1 = heightFunction(x1, z1); - y2 = heightFunction(x2, z2); + y1 = heightFunction(x1, z1, heightFunctionUserData); + y2 = heightFunction(x2, z2, heightFunctionUserData); } else { y1 = 0; y2 = 0; @@ -384,8 +387,8 @@ float y1, y2; if (heightFunction){ - y1 = heightFunction(x1, z1); - y2 = heightFunction(x2, z2); + y1 = heightFunction(x1, z1, heightFunctionUserData); + y2 = heightFunction(x2, z2, heightFunctionUserData); } else { y1 = 0; y2 = 0; @@ -420,8 +423,8 @@ float y3, y4; if (heightFunction){ - y3 = heightFunction(x3, z3); - y4 = heightFunction(x4, z4); + y3 = heightFunction(x3, z3, heightFunctionUserData); + y4 = heightFunction(x4, z4, heightFunctionUserData); } else { y3 = 0; y4 = 0; @@ -540,7 +543,7 @@ //Calculate height float y; if (heightFunction){ - y = heightFunction(x, z); + y = heightFunction(x, z, heightFunctionUserData); } else { y = 0; } @@ -675,6 +678,8 @@ { if (material.isNull() || matName != material->getName()){ material = MaterialManager::getSingleton().getByName(matName); + if (material.isNull()) + OGRE_EXCEPT(Exception::ERR_INVALIDPARAMS, "The specified grass material does not exist", "GrassLayer::setMaterialName()"); shaderNeedsUpdate = true; } } @@ -784,7 +789,7 @@ float z = Math::RangeRandom(page.bounds.top, page.bounds.bottom); //Calculate height - float y = parent->heightFunction(x, z); + float y = parent->heightFunction(x, z, parent->heightFunctionUserData); //Add to list if in range if (y >= min && y <= max){ @@ -839,7 +844,7 @@ //For example, if localDensity is .32, grasses will be added 32% of the time. if (Math::UnitRandom() < densityMap->_getDensityAt_Unfiltered(x, z)){ //Calculate height - float y = parent->heightFunction(x, z); + float y = parent->heightFunction(x, z, parent->heightFunctionUserData); //Add to list if in range if (y >= min && y <= max){ @@ -889,7 +894,7 @@ //For example, if localDensity is .32, grasses will be added 32% of the time. if (Math::UnitRandom() < densityMap->_getDensityAt_Bilinear(x, z)){ //Calculate height - float y = parent->heightFunction(x, z); + float y = parent->heightFunction(x, z, parent->heightFunctionUserData); //Add to list if in range if (y >= min && y <= max){ Modified: trunk/python-ogre/ThirdParty/forests/GrassLoader.h =================================================================== --- trunk/python-ogre/ThirdParty/forests/GrassLoader.h 2008-01-30 00:12:44 UTC (rev 558) +++ trunk/python-ogre/ThirdParty/forests/GrassLoader.h 2008-01-30 00:14:01 UTC (rev 559) @@ -140,16 +140,32 @@ function anything you want): \code - Real getHeightAt(Real x, Real z); + Real getHeightAt(Real x, Real z, void *userData); \endcode - + + \note If you're not using the default coordinate system (where x = right, z = back), the + x/z parameters will actually be representing the appropriate equivalents. + + The userData parameter allows you to include any additional data you want when your height + function is called, and is completely optional (although you can't actually omit it from the + declaration, you can ignore it). Any userData value you choose to supply to setHeightFunction() + will be passed on to your height function every time it is called. + After you've defined a height function, using setHeightFunction is easy: \code pageLoader2D->setHeightFunction(&getHeightAt); + //Or (if you want to pass additional data on to your height function)... + pageLoader2D->setHeightFunction(&getHeightAt, myUserData); \endcode + + In most cases, you may not even need to use the extra "userData" parameter, but it's there in + the event that your height function needs extra contextual data. */ - void setHeightFunction(Ogre::Real (*heightFunction)(Ogre::Real x, Ogre::Real z)) { this->heightFunction = heightFunction; } + void setHeightFunction(Ogre::Real (*heightFunction)(Ogre::Real x, Ogre::Real z, void *userData), void *userData = NULL) { + this->heightFunction = heightFunction; + heightFunctionUserData = userData; + } /** INTERNAL FUNCTION - DO NOT USE */ @@ -171,7 +187,8 @@ std::list<GrassLayer*> layerList; //Height data - Ogre::Real (*heightFunction)(Ogre::Real x, Ogre::Real z); //Pointer to height function + Ogre::Real (*heightFunction)(Ogre::Real x, Ogre::Real z, void *userData); //Pointer to height function + void *heightFunctionUserData; //Misc. PagedGeometry *geom; Modified: trunk/python-ogre/ThirdParty/forests/ImpostorPage.cpp =================================================================== --- trunk/python-ogre/ThirdParty/forests/ImpostorPage.cpp 2008-01-30 00:12:44 UTC (rev 558) +++ trunk/python-ogre/ThirdParty/forests/ImpostorPage.cpp 2008-01-30 00:14:01 UTC (rev 559) @@ -21,6 +21,7 @@ #include "OgreVector3.h" #include "OgreQuaternion.h" #include "OgreEntity.h" +#include "OgreSubEntity.h" #include "OgreHardwarePixelBuffer.h" using namespace Ogre; @@ -52,7 +53,7 @@ ImpostorPage::~ImpostorPage() { //Delete all impostor batches - std::map<ResourceHandle, ImpostorBatch *>::iterator iter; + std::map<String, ImpostorBatch *>::iterator iter; for (iter = impostorBatches.begin(); iter != impostorBatches.end(); ++iter){ ImpostorBatch *ibatch = iter->second; delete ibatch; @@ -96,7 +97,7 @@ center.y = 0.0f; //Build all batches - std::map<ResourceHandle, ImpostorBatch *>::iterator iter; + std::map<String, ImpostorBatch *>::iterator iter; for (iter = impostorBatches.begin(); iter != impostorBatches.end(); ++iter){ ImpostorBatch *ibatch = iter->second; ibatch->build(); @@ -106,7 +107,7 @@ void ImpostorPage::setVisible(bool visible) { //Update visibility status of all batches - std::map<ResourceHandle, ImpostorBatch *>::iterator iter; + std::map<String, ImpostorBatch *>::iterator iter; for (iter = impostorBatches.begin(); iter != impostorBatches.end(); ++iter){ ImpostorBatch *ibatch = iter->second; ibatch->setVisible(visible); @@ -116,7 +117,7 @@ void ImpostorPage::setFade(bool enabled, Real visibleDist, Real invisibleDist) { //Update fade status of all batches - std::map<ResourceHandle, ImpostorBatch *>::iterator iter; + std::map<String, ImpostorBatch *>::iterator iter; for (iter = impostorBatches.begin(); iter != impostorBatches.end(); ++iter){ ImpostorBatch *ibatch = iter->second; ibatch->setFade(enabled, visibleDist, invisibleDist); @@ -126,7 +127,7 @@ void ImpostorPage::removeEntities() { //Clear all impostor batches - std::map<ResourceHandle, ImpostorBatch *>::iterator iter; + std::map<String, ImpostorBatch *>::iterator iter; for (iter = impostorBatches.begin(); iter != impostorBatches.end(); ++iter){ ImpostorBatch *ibatch = iter->second; ibatch->clear(); @@ -157,7 +158,7 @@ yaw = Math::ATan2(-dir.x, -dir.z); } - std::map<ResourceHandle, ImpostorBatch *>::iterator iter; + std::map<String, ImpostorBatch *>::iterator iter; for (iter = impostorBatches.begin(); iter != impostorBatches.end(); ++iter){ ImpostorBatch *ibatch = iter->second; ibatch->setAngle(pitch.valueDegrees(), yaw.valueDegrees()); @@ -189,8 +190,6 @@ ImpostorBatch::ImpostorBatch(ImpostorPage *group, Entity *entity) { - typedef std::pair<ResourceHandle, ImpostorBatch *> ListItem; - //Render impostor texture for this entity tex = ImpostorTexture::getTexture(group, entity); @@ -205,9 +204,6 @@ yawIndex = -1; setAngle(0.0f, 0.0f); - //Add self to impostorBatches list - group->impostorBatches.insert(ListItem(tex->sourceMesh, this)); - //Init. variables igroup = group; } @@ -225,16 +221,24 @@ ImpostorBatch *ImpostorBatch::getBatch(ImpostorPage *group, Entity *entity) { //Search for an existing impostor batch for this entity - std::map<ResourceHandle, ImpostorBatch *>::iterator iter; - iter = group->impostorBatches.find(entity->getMesh()->getHandle()); + String entityKey = ImpostorBatch::generateEntityKey(entity); + std::map<String, ImpostorBatch *>::iterator iter; + iter = group->impostorBatches.find(entityKey); //If found.. if (iter != group->impostorBatches.end()){ //Return it return iter->second; } else { - //Otherwise, return a new batch - return (new ImpostorBatch(group, entity)); + //Otherwise, create a new batch + ImpostorBatch *batch = new ImpostorBatch(group, entity); + + //Add it to the impostorBatches list + typedef std::pair<String, ImpostorBatch *> ListItem; + group->impostorBatches.insert(ListItem(entityKey, batch)); + + //Return it + return batch; } } @@ -277,24 +281,34 @@ entityBBCenter = Vector3(tex->entityCenter.x, tex->entityCenter.y - tex->entityRadius, tex->entityCenter.z); } +String ImpostorBatch::generateEntityKey(Entity *entity) +{ + StringUtil::StrStreamType entityKey; + entityKey << entity->getMesh()->getName(); + for (uint i = 0; i < entity->getNumSubEntities(); ++i){ + entityKey << "-" << entity->getSubEntity(i)->getMaterialName(); + } + + return entityKey.str(); +} + //------------------------------------------------------------------------------------- -std::map<ResourceHandle, ImpostorTexture *> ImpostorTexture::selfList; +std::map<String, ImpostorTexture *> ImpostorTexture::selfList; unsigned long ImpostorTexture::GUID = 0; //Do not use this constructor yourself - instead, call getTexture() //to get/create an ImpostorTexture for an Entity. ImpostorTexture::ImpostorTexture(ImpostorPage *group, Entity *entity) { - typedef std::pair<ResourceHandle, ImpostorTexture *> ListItem; - //Store scene manager and entity ImpostorTexture::sceneMgr = group->sceneMgr; ImpostorTexture::entity = entity; //Add self to list of ImpostorTexture's - sourceMesh = entity->getMesh()->getHandle(); - selfList.insert(ListItem(sourceMesh, this)); + entityKey = ImpostorBatch::generateEntityKey(entity); + typedef std::pair<String, ImpostorTexture *> ListItem; + selfList.insert(ListItem(entityKey, this)); //Calculate the entity's bounding box and it's diameter boundingBox = entity->getBoundingBox(); @@ -378,7 +392,7 @@ } //Remove self from list of ImpostorTexture's - selfList.erase(sourceMesh); + selfList.erase(entityKey); } void ImpostorTexture::regenerate() @@ -395,7 +409,7 @@ void ImpostorTexture::regenerateAll() { - std::map<ResourceHandle, ImpostorTexture *>::iterator iter; + std::map<String, ImpostorTexture *>::iterator iter; for (iter = selfList.begin(); iter != selfList.end(); ++iter){ iter->second->regenerate(); } @@ -465,10 +479,20 @@ //uint8 oldRenderQueueGroup = entity->getRenderQueueGroup(); entity->setRenderQueueGroup(RENDER_QUEUE_6); - //Calculate the filename used to identity this render + //Calculate the filename used to uniquely identity this render + String strKey = entityKey; + char key[32] = {0}; + unsigned int i = 0; + for (String::const_iterator it = entityKey.begin(); it != entityKey.end(); ++it) + { + key[i] ^= *it; + i = (i+1) % sizeof(key); + } + for (i = 0; i < sizeof(key); ++i) + key[i] = (key[i] % 26) + 'A'; + ResourceGroupManager::getSingleton().addResourceLocation(".", "FileSystem", "BinFolder"); - String fileName = "Impostor." + entity->getMesh()->getGroup() + '.' + entity->getMesh()->getName() - + '.' + StringConverter::toString(textureSize) + ".png"; + String fileName = "Impostor." + String(key, sizeof(key)) + '.' + StringConverter::toString(textureSize) + ".png"; //Attempt to load the pre-render file if allowed bool needsRegen = force; @@ -538,10 +562,26 @@ TextureManager::getSingleton().remove(texName2); } +String ImpostorTexture::removeInvalidCharacters(String s) +{ + StringUtil::StrStreamType s2; + + for (unsigned int i = 0; i < s.length(); ++i){ + char c = s[i]; + if (c == '/' || c == '\\' || c == ':' || c == '*' || c == '?' || c == '\"' || c == '<' || c == '>' || c == '|'){ + s2 << '-'; + } else { + s2 << c; + } + } + + return s2.str(); +} + void ImpostorTexture::removeTexture(ImpostorTexture* Texture) { //Search for an existing impostor texture, in case it was already deleted - for(std::map<ResourceHandle, ImpostorTexture *>::iterator iter=selfList.begin(); + for(std::map<String, ImpostorTexture *>::iterator iter=selfList.begin(); iter!=selfList.end(); ++iter) { if(iter->second==Texture) @@ -556,8 +596,9 @@ ImpostorTexture *ImpostorTexture::getTexture(ImpostorPage *group, Entity *entity) { //Search for an existing impostor texture for the given entity - std::map<ResourceHandle, ImpostorTexture *>::iterator iter; - iter = selfList.find(entity->getMesh()->getHandle()); + String entityKey = ImpostorBatch::generateEntityKey(entity); + std::map<String, ImpostorTexture *>::iterator iter; + iter = selfList.find(entityKey); //If found.. if (iter != selfList.end()){ Modified: trunk/python-ogre/ThirdParty/forests/ImpostorPage.h =================================================================== --- trunk/python-ogre/ThirdParty/forests/ImpostorPage.h 2008-01-30 00:12:44 UTC (rev 558) +++ trunk/python-ogre/ThirdParty/forests/ImpostorPage.h 2008-01-30 00:14:01 UTC (rev 559) @@ -182,7 +182,7 @@ Ogre::Vector3 center; int aveCount; - std::map<Ogre::ResourceHandle, ImpostorBatch *> impostorBatches; + std::map<Ogre::String, ImpostorBatch *> impostorBatches; }; @@ -217,11 +217,11 @@ } void setBillboardOrigin(Ogre::BillboardOrigin origin); - inline void addBillboard(const Ogre::Vector3 &position, const Ogre::Quaternion &rotation, const Ogre::Vector3 &scale, const Ogre::ColourValue &color = Ogre::ColourValue::White); - void setAngle(float pitchDeg, float yawDeg); + static Ogre::String generateEntityKey(Ogre::Entity *entity); + protected: ImpostorBatch(ImpostorPage *group, Ogre::Entity *entity); @@ -274,9 +274,12 @@ void renderTextures(bool force); // Renders the impostor texture grid void updateMaterials(); // Updates the materials to use the latest rendered impostor texture grid - static std::map<Ogre::ResourceHandle, ImpostorTexture *> selfList; + Ogre::String removeInvalidCharacters(Ogre::String s); + + static std::map<Ogre::String, ImpostorTexture *> selfList; Ogre::SceneManager *sceneMgr; Ogre::Entity *entity; + Ogre::String entityKey; Ogre::MaterialPtr material[IMPOSTOR_PITCH_ANGLES][IMPOSTOR_YAW_ANGLES]; Ogre::TexturePtr texture; Modified: trunk/python-ogre/ThirdParty/forests/TreeLoader2D.cpp =================================================================== --- trunk/python-ogre/ThirdParty/forests/TreeLoader2D.cpp 2008-01-30 00:12:44 UTC (rev 558) +++ trunk/python-ogre/ThirdParty/forests/TreeLoader2D.cpp 2008-01-30 00:14:01 UTC (rev 559) @@ -29,6 +29,7 @@ //Reset height function heightFunction = NULL; + heightFunctionUserData = NULL; //Make sure the bounds are aligned with PagedGeometry's grid, so the TreeLoader's grid tiles will have a 1:1 relationship actualBounds = bounds; @@ -267,7 +268,7 @@ //Calculate terrain height at pos.x / pos.z to get pos.y if (heightFunction != NULL) - pos.y = heightFunction(pos.x, pos.z); + pos.y = heightFunction(pos.x, pos.z, heightFunctionUserData); else pos.y = 0.0f; @@ -377,7 +378,7 @@ //Calculate terrain height at x / z to get y if (trees->heightFunction != NULL) - currentTreeDat.position.y = trees->heightFunction(currentTreeDat.position.x, currentTreeDat.position.z); + currentTreeDat.position.y = trees->heightFunction(currentTreeDat.position.x, currentTreeDat.position.z, trees->heightFunctionUserData); else currentTreeDat.position.y = 0.0f; Modified: trunk/python-ogre/ThirdParty/forests/TreeLoader2D.h =================================================================== --- trunk/python-ogre/ThirdParty/forests/TreeLoader2D.h 2008-01-30 00:12:44 UTC (rev 558) +++ trunk/python-ogre/ThirdParty/forests/TreeLoader2D.h 2008-01-30 00:14:01 UTC (rev 559) @@ -89,6 +89,7 @@ /** \brief Sets the height function used to calculate tree height coordinates \param heightFunction A pointer to a height function + \param userData Optional user data to be supplied to the height function Unless you want all your trees placed at 0 height, you need to specify a height function so TreeLoader2D will be able to calculate the height coordinate. The height function given @@ -96,19 +97,33 @@ function anything you want): \code - Real getHeightAt(Real x, Real z); + Real getHeightAt(Real x, Real z, void *userData); \endcode \note If you're not using the default coordinate system (where x = right, z = back), the x/z parameters will actually be representing the appropriate equivalents. + + The userData parameter allows you to include any additional data you want when your height + function is called, and is completely optional (although you can't actually omit it from the + declaration, you can ignore it). Any userData value you choose to supply to setHeightFunction() + will be passed on to your height function every time it is called. After you've defined a height function, using setHeightFunction is easy: \code pageLoader2D->setHeightFunction(&getHeightAt); + //Or (if you want to pass additional data on to your height function)... + pageLoader2D->setHeightFunction(&getHeightAt, myUserData); \endcode + + In most cases, you may not even need to use the extra "userData" parameter, but it's there in + the event that your height function needs extra contextual data. */ - void setHeightFunction(Ogre::Real (*heightFunction)(Ogre::Real x, Ogre::Real z)) { this->heightFunction = heightFunction; } + void setHeightFunction(Ogre::Real (*heightFunction)(Ogre::Real x, Ogre::Real z, void *userData), void *userData = NULL) + { + this->heightFunction = heightFunction; + heightFunctionUserData = userData; + } /** \brief Gets an iterator which can be used to access all added trees. @@ -241,7 +256,8 @@ MapFilter colorMapFilter; //Height data - Ogre::Real (*heightFunction)(Ogre::Real x, Ogre::Real z); //Pointer to height function + Ogre::Real (*heightFunction)(Ogre::Real x, Ogre::Real z, void *userData); //Pointer to height function + void *heightFunctionUserData; //Misc. PagedGeometry *geom; Added: trunk/python-ogre/ThirdParty/nxogre/FireState.cpp =================================================================== --- trunk/python-ogre/ThirdParty/nxogre/FireState.cpp (rev 0) +++ trunk/python-ogre/ThirdParty/nxogre/FireState.cpp 2008-01-30 00:14:01 UTC (rev 559) @@ -0,0 +1 @@ +// FireState Added: trunk/python-ogre/ThirdParty/nxogre/FireState.h =================================================================== Modified: trunk/python-ogre/ThirdParty/nxogre/NxOgreGroup.h =================================================================== --- trunk/python-ogre/ThirdParty/nxogre/NxOgreGroup.h 2008-01-30 00:12:44 UTC (rev 558) +++ trunk/python-ogre/ThirdParty/nxogre/NxOgreGroup.h 2008-01-30 00:14:01 UTC (rev 559) @@ -99,21 +99,14 @@ ////////////////////////////////////////////////////////// /** @brief Method Ptr Constructor */ - #ifndef GCC_XML + template <typename T> explicit GroupCallback(T* v, void (T::*Start)(Actor*, Actor*), void (T::*End)(Actor*, Actor*), void (T::*Touch)(Actor*, Actor*)) - : mCallback(new TriMethodCallback<T>(v, Start, End, Touch), bool callbackOwned),mCallbackOwned(callbackOwned) {} - #else - template <typename T> explicit - GroupCallback(T* v, - void (T::*Start)(Actor*, Actor*), - void (T::*End)(Actor*, Actor*), - void (T::*Touch)(Actor*, Actor*)) - : mCallback(new TriMethodCallback<T>(v, Start, End, Touch)) {} - #endif + : mCallback(new TriMethodCallback<T>(v, Start, End, Touch)) {} + ////////////////////////////////////////////////////////// Modified: trunk/python-ogre/ThirdParty/nxogre/NxOgreHelpers.cpp =================================================================== --- trunk/python-ogre/ThirdParty/nxogre/NxOgreHelpers.cpp 2008-01-30 00:12:44 UTC (rev 558) +++ trunk/python-ogre/ThirdParty/nxogre/NxOgreHelpers.cpp 2008-01-30 00:14:01 UTC (rev 559) @@ -30,14 +30,14 @@ ////////////////////////////////////////////////////////////////////////////////// -NxExtendedVec3 toNxExtendedVec3(const Ogre::Vector3& v) { +inline NxExtendedVec3 toNxExtendedVec3(const Ogre::Vector3& v) { return NxExtendedVec3(v.x,v.y,v.z); } ////////////////////////////////////////////////////////////////////////////////// // Generates a 8 digit ID, based on groupCount and type of object (typeHash) -NxString NxCreateID(unsigned int groupCount, NxString typeHash) { +inline NxString NxCreateID(unsigned int groupCount, NxString typeHash) { std::stringstream ss; ss << typeHash << "-" << std::hex << (rand() % 1024) << "-" << groupCount; return ss.str(); @@ -45,7 +45,7 @@ ////////////////////////////////////////////////////////////////////////////////// -NxMat33 toNxMat33(const Ogre::Matrix3& matrix) { +inline NxMat33 toNxMat33(const Ogre::Matrix3& matrix) { NxReal* c = new NxReal[9]; c[0] = matrix[0][0]; c[1] = matrix[1][0]; c[2] = matrix[2][0]; @@ -63,7 +63,7 @@ ////////////////////////////////////////////////////////////////////////////////// -NxMat34 toNxMat34(const Ogre::Matrix4& matrix) { +inline NxMat34 toNxMat34(const Ogre::Matrix4& matrix) { NxUnderConstruction; @@ -156,10 +156,10 @@ std::stringstream stream; stream << quat.w << " " << quat.x << " " << quat.y << " " << quat.z; return stream.str(); -} +} //////////////////////////////////////////////////////////////// - + template <typename Type> Type NxFromString(const NxString& string) { @@ -167,8 +167,8 @@ Type val = 0; str >> val; return val; -} - +} + //////////////////////////////////////////////////////////////// template <> @@ -206,7 +206,7 @@ return quaternion; -} +} //////////////////////////////////////////////////////////////// @@ -273,9 +273,9 @@ } //////////////////////////////////////////////////////////////// + +inline Pose NxInterpolate(Pose First, Pose Second, NxReal c) { -Pose NxInterpolate(Pose First, Pose Second, NxReal c) { - Pose r; r.v.x = First.v.x * (1 - c) + Second.v.x * c; @@ -287,5 +287,5 @@ } //////////////////////////////////////////////////////////////// - -}; //End of NxOgre namespace. + +}; //End of NxOgre namespace. Modified: trunk/python-ogre/ThirdParty/nxogre/NxOgreHelpers.h =================================================================== --- trunk/python-ogre/ThirdParty/nxogre/NxOgreHelpers.h 2008-01-30 00:12:44 UTC (rev 558) +++ trunk/python-ogre/ThirdParty/nxogre/NxOgreHelpers.h 2008-01-30 00:14:01 UTC (rev 559) @@ -87,18 +87,18 @@ @result The rotated vector */ NxVec3 NxExport operator* (const NxQuat&, const NxVec3&); - - - // To Strings - - /** @brief Generic class/integral to String. - @note Uses STL stringstream for conversion. - @example - <code> - NxString str = NxToString<float>(1.2345f); - </code> - @result The converted string - */ + + + // To Strings + + /** @brief Generic class/integral to String. + @note Uses STL stringstream for conversion. + @example + <code> + NxString str = NxToString<float>(1.2345f); + </code> + @result The converted string + */ template <typename Type> NxString NxExport NxToString(const Type& type); @@ -281,8 +281,8 @@ /** @brief Interpolates */ - Pose NxExport NxInterpolate(Pose First, Pose Second, NxReal c = 0.5f); + inline Pose NxExport NxInterpolate(Pose First, Pose Second, NxReal c = 0.5f); }; -#endif +#endif Modified: trunk/python-ogre/ThirdParty/nxogre/NxOgreOgreNodeRenderable.cpp =================================================================== --- trunk/python-ogre/ThirdParty/nxogre/NxOgreOgreNodeRenderable.cpp 2008-01-30 00:12:44 UTC (rev 558) +++ trunk/python-ogre/ThirdParty/nxogre/NxOgreOgreNodeRenderable.cpp 2008-01-30 00:14:01 UTC (rev 559) @@ -315,7 +315,7 @@ node->detachAllObjects(); node->removeAndDestroyAllChildren(); - mSceneMgr->destroySceneNode(node->getName()); + mSceneMgr->destroySceneNode(node); } @@ -581,4 +581,4 @@ ///////////////////////////////////////////////////////////////////// -}; //End of NxOgre namespace. +}; //End of NxOgre namespace. Modified: trunk/python-ogre/ThirdParty/nxogre/NxOgrePose.h =================================================================== --- trunk/python-ogre/ThirdParty/nxogre/NxOgrePose.h 2008-01-30 00:12:44 UTC (rev 558) +++ trunk/python-ogre/ThirdParty/nxogre/NxOgrePose.h 2008-01-30 00:14:01 UTC (rev 559) @@ -52,12 +52,12 @@ void fromMat33(const NxMat33&); NxMat33 toMat33() const; - Ogre::Vector3 getVector3() const; - NxVec3 getVec3() const; - Ogre::Quaternion getQuaternion() const; - NxQuat getQuat() const; + inline Ogre::Vector3 getVector3() const; + inline NxVec3 getVec3() const; + inline Ogre::Quaternion getQuaternion() const; + inline NxQuat getQuat() const; - NxString toString() const; + inline NxString toString() const; //////////////////////////////////////////////////////////////////////////////// @@ -100,4 +100,4 @@ }; -#endif +#endif Modified: trunk/python-ogre/ThirdParty/nxogre/NxOgreResourceStreamPtr.h =================================================================== --- trunk/python-ogre/ThirdParty/nxogre/NxOgreResourceStreamPtr.h 2008-01-30 00:12:44 UTC (rev 558) +++ trunk/python-ogre/ThirdParty/nxogre/NxOgreResourceStreamPtr.h 2008-01-30 00:14:01 UTC (rev 559) @@ -50,7 +50,7 @@ ResourceStreamPtr(); ResourceStreamPtr(ResourceIdentifier); - //ResourceStreamPtr(ResourceIdentifier, void*); + ResourceStreamPtr(ResourceIdentifier, void*); ResourceStreamPtr(const ResourceStreamPtr& r) : pStream(0), pUseCount(0) @@ -172,4 +172,4 @@ }; // End of namespace -#endif +#endif Modified: trunk/python-ogre/ThirdParty/nxogre/NxOgreStable.h =================================================================== --- trunk/python-ogre/ThirdParty/nxogre/NxOgreStable.h 2008-01-30 00:12:44 UTC (rev 558) +++ trunk/python-ogre/ThirdParty/nxogre/NxOgreStable.h 2008-01-30 00:14:01 UTC (rev 559) @@ -120,14 +120,13 @@ # define NX_WIN32 # define NX_MEMORY_COOKING 1 # define NX_DISK_COOKING 1 -# define NxExport -// -// # if defined(NXOGRE_EXPORTS) -// # define NxExport __declspec(dllexport) -// # else -// # define NxExport __declspec(dllimport) -// # endif +# if defined(NXOGRE_EXPORTS) +# define NxExport __declspec(dllexport) +# else +# define NxExport __declspec(dllimport) +# endif + # if defined _DEBUG # define NX_DEBUG # endif Modified: trunk/python-ogre/ThirdParty/ogreal/OgreALPrereqs.h =================================================================== --- trunk/python-ogre/ThirdParty/ogreal/OgreALPrereqs.h 2008-01-30 00:12:44 UTC (rev 558) +++ trunk/python-ogre/ThirdParty/ogreal/OgreALPrereqs.h 2008-01-30 00:14:01 UTC (rev 559) @@ -42,8 +42,8 @@ #if OGRE_PLATFORM == OGRE_PLATFORM_WIN32 # include "al.h" # include "alc.h" - # include "xram.h" - # define OgreAL_Export + # include "xram.h" + # define OgreAL_Export #elif OGRE_COMPILER == OGRE_COMPILER_GNUC # include "AL/al.h" # include "AL/alc.h" Modified: trunk/python-ogre/ThirdParty/ogrebullet/Dynamics/OgreBulletDynamicsWorld.cpp =================================================================== --- trunk/python-ogre/ThirdParty/ogrebullet/Dynamics/OgreBulletDynamicsWorld.cpp 2008-01-30 00:12:44 UTC (rev 558) +++ trunk/python-ogre/ThirdParty/ogrebullet/Dynamics/OgreBulletDynamicsWorld.cpp 2008-01-30 00:14:01 UTC (rev 559) @@ -43,7 +43,8 @@ DynamicsWorld::DynamicsWorld(Ogre::SceneManager *mgr, const Ogre::AxisAlignedBox &bounds, - const Ogre::Vector3 &gravity) : + const Ogre::Vector3 &gravity, + bool init) : CollisionsWorld(mgr, bounds, false), mDebugDrawer(0) { @@ -51,18 +52,19 @@ //btSequentialImpulseConstraintSolver3 mConstraintsolver = new btSequentialImpulseConstraintSolver(); - //mWorld = new btSimpleDynamicsWorld(); - mWorld = new btDiscreteDynamicsWorld(mDispatcher, mBroadphase, mConstraintsolver, &mDefaultCollisionConfiguration); + //only if init is true, otherwise you have to create mWorld manually later on + if (init) { + mWorld = new btDiscreteDynamicsWorld(mDispatcher, mBroadphase, mConstraintsolver, &mDefaultCollisionConfiguration); + static_cast <btDiscreteDynamicsWorld *> (mWorld)->setGravity(btVector3(gravity.x,gravity.y,gravity.z)); + } - - static_cast <btDiscreteDynamicsWorld *> (mWorld)->setGravity(btVector3(gravity.x,gravity.y,gravity.z)); - } // ------------------------------------------------------------------------- DynamicsWorld::~DynamicsWorld() { delete mConstraintsolver; } + // ------------------------------------------------------------------------- void DynamicsWorld::addRigidBody (RigidBody *rb, short collisionGroup, short collisionMask) { @@ -79,13 +81,13 @@ } } // ------------------------------------------------------------------------- - void DynamicsWorld::stepSimulation(const Ogre::Real elapsedTime, int maxSubSteps) + void DynamicsWorld::stepSimulation(const Ogre::Real elapsedTime, int maxSubSteps, const Ogre::Real fixedTimestep) { // Reset Debug Lines if (mDebugDrawer) mDebugDrawer->clear (); - static_cast <btDiscreteDynamicsWorld *> (mWorld)->stepSimulation(elapsedTime, maxSubSteps); + static_cast <btDiscreteDynamicsWorld *> (mWorld)->stepSimulation(elapsedTime, maxSubSteps, fixedTimestep); if (mDebugDrawer) { Modified: trunk/python-ogre/ThirdParty/ogrebullet/Dynamics/OgreBulletDynamicsWorld.h =================================================================== --- trunk/python-ogre/ThirdParty/ogrebullet/Dynamics/OgreBulletDynamicsWorld.h 2008-01-30 00:12:44 UTC (rev 558) +++ trunk/python-ogre/ThirdParty/ogrebullet/Dynamics/OgreBulletDynamicsWorld.h 2008-01-30 00:14:01 UTC (rev 559) @@ -32,7 +32,6 @@ #include "OgreBulletCollisionsWorld.h" #include "Debug/OgreBulletCollisionsDebugDrawer.h" - namespace OgreBulletDynamics { // ------------------------------------------------------------------------- @@ -42,12 +41,20 @@ public: DynamicsWorld(Ogre::SceneManager *mgr, const Ogre::AxisAlignedBox &bounds, - const Ogre::Vector3 &gravity); + const Ogre::Vector3 &gravity, + bool init = true); ~DynamicsWorld(); - void stepSimulation(const Ogre::Real elapsedTime, int maxSubSteps = 1); + template <class BTDNYWORLDCLASS> + void createBtDynamicsWorld(BTDNYWORLDCLASS *&createdWorld) + { + createdWorld = new BTDNYWORLDCLASS(mDispatcher, mBroadphase, mConstraintsolver, &mDefaultCollisionConfiguration); + mWorld = createdWorld; + } + void stepSimulation(const Ogre::Real elapsedTime, int maxSubSteps = 1, const Ogre::Real fixedTimestep = 1./60.); + void addRigidBody (RigidBody *rb, short collisionGroup, short collisionMask); void setDebugDrawer(OgreBulletCollisions::DebugDrawer *debugdrawer) Modified: trunk/python-ogre/ThirdParty/quickgui/QuickGUIBorder.cpp =================================================================== --- trunk/python-ogre/ThirdParty/quickgui/QuickGUIBorder.cpp 2008-01-30 00:12:44 UTC (rev 558) +++ trunk/python-ogre/ThirdParty/quickgui/QuickGUIBorder.cpp 2008-01-30 00:14:01 UTC (rev 559) @@ -5,7 +5,7 @@ namespace QuickGUI { - Border::Border(const Ogre::String& name, GUIManager* gm) : + Border::Border(const std::string& name, GUIManager* gm) : Widget(name,gm), mThickness(5), mOverlap(1) @@ -82,7 +82,7 @@ MouseCursor* mc = mGUIManager->getMouseCursor(); mMouseCursorTexture = mc->getTexture(); - Ogre::String skin = mParentWidget->getSkin(); + std::string skin = mParentWidget->getSkin(); switch(mBorderType) { @@ -128,7 +128,7 @@ mBorderType = t; Size parentSize = mParentWidget->getSize(); - Ogre::String parentSkinComponent = mParentWidget->getSkinComponent(); + std::string parentSkinComponent = mParentWidget->getSkinComponent(); switch(mBorderType) { @@ -212,7 +212,7 @@ fireEvent(EVENT_PARENT_CHANGED,args); } - void Border::setSkin(const Ogre::String& skinName, Ogre::String extension, bool recursive) + void Border::setSkin(const std::string& skinName, std::string extension, bool recursive) { SkinSet* ss = SkinSetManager::getSingleton().getSkinSet(skinName); if(ss == NULL) Modified: trunk/python-ogre/ThirdParty/quickgui/QuickGUIBorder.h =================================================================== --- trunk/python-ogre/ThirdParty/quickgui/QuickGUIBorder.h 2008-01-30 00:12:44 UTC (rev 558) +++ trunk/python-ogre/ThirdParty/quickgui/QuickGUIBorder.h 2008-01-30 00:14:01 UTC (rev 559) @@ -1,7 +1,7 @@ #ifndef QUICKGUIBORDER_H #define QUICKGUIBORDER_H -#include "QuickGUIPrerequisites.h" +#include "QuickGUIForwardDeclarations.h" #include "QuickGUIWidget.h" namespace QuickGUI @@ -44,12 +44,12 @@ @param ParentWidget parent widget which created this widget. */ - Border(const Ogre::String& name, GUIManager* gm); + Border(const std::string& name, GUIManager* gm); BorderType getBorderType(); void setBorderType(BorderType t); - void setSkin(const Ogre::String& skinName, Ogre::String extension = ".png", bool recursive = false); + void setSkin(const std::string& skinName, std::string extension = ".png", bool recursive = false); protected: virtual ~Border(); @@ -58,11 +58,11 @@ BorderType mBorderType; - Ogre::Real mThickness; - Ogre::Real mOverlap; + float mThickness; + float mOverlap; // used to restore mouse cursor when leaving. - Ogre::String mMouseCursorTexture; + std::string mMouseCursorTexture; void onDragged(const EventArgs& args); void onMouseEnter(const EventArgs& args); Modified: trunk/python-ogre/ThirdParty/quickgui/QuickGUIButton.cpp =================================================================== --- trunk/python-ogre/ThirdParty/quickgui/QuickGUIButton.cpp 2008-01-30 00:12:44 UTC (rev 558) +++ trunk/python-ogre/ThirdParty/quickgui/QuickGUIButton.cpp 2008-01-30 00:14:01 UTC (rev 559) @@ -9,7 +9,7 @@ namespace QuickGUI { - Button::Button(const Ogre::String& name, GUIManager* gm) : + Button::Button(const std::string& name, GUIManager* gm) : Label(name,gm), mButtonDown(false) { Modified: trunk/python-ogre/ThirdParty/quickgui/QuickGUIButton.h =================================================================== --- trunk/python-ogre/ThirdParty/quickgui/QuickGUIButton.h 2008-01-30 00:12:44 UTC (rev 558) +++ trunk/python-ogre/ThirdParty/quickgui/QuickGUIButton.h 2008-01-30 00:14:01 UTC (rev 559) @@ -1,7 +1,7 @@ #ifndef QUICKGUIBUTTON_H #define QUICKGUIBUTTON_H -#include "QuickGUIPrerequisites.h" +#include "QuickGUIForwardDeclarations.h" #include "QuickGUILabel.h" namespace QuickGUI @@ -40,7 +40,7 @@ @param ParentWidget parent widget which created this widget. */ - Button(const Ogre::String& name, GUIManager* gm); + Button(const std::string& name, GUIManager* gm); /** * Useful when you want to simulate the button being pressed down by the mouse. Modified: trunk/python-ogre/ThirdParty/quickgui/QuickGUICheckBox.cpp =================================================================== --- trunk/python-ogre/ThirdParty/quickgui/QuickGUICheckBox.cpp 2008-01-30 00:12:44 UTC (rev 558) +++ trunk/python-ogre/ThirdParty/quickgui/QuickGUICheckBox.cpp 2008-01-30 00:14:01 UTC (rev 559) @@ -4,7 +4,7 @@ namespace QuickGUI { - CheckBox::CheckBox(const Ogre::String& name, GUIManager* gm) : + CheckBox::CheckBox(const std::string& name, GUIManager* gm) : Button(name,gm), mChecked(false) { Modified: trunk/python-ogre/ThirdParty/quickgui/QuickGUICheckBox.h =================================================================== --- trunk/python-ogre/ThirdParty/quickgui/QuickGUICheckBox.h 2008-01-30 00:12:44 UTC (rev 558) +++ trunk/python-ogre/ThirdParty/quickgui/QuickGUICheckBox.h 2008-01-30 00:14:01 UTC (rev 559) @@ -9,7 +9,7 @@ public Button { public: - CheckBox(const Ogre::String& name, GUIManager* gm); + CheckBox(const std::string& name, GUIManager* gm); ~CheckBox(); /** Modified: trunk/python-ogre/ThirdParty/quickgui/QuickGUIComboBox.cpp =================================================================== --- trunk/python-ogre/ThirdParty/quickgui/QuickGUIComboBox.cpp 2008-01-30 00:12:44 UTC (rev 558) +++ trunk/python-ogre/ThirdParty/quickgui/QuickGUIComboBox.cpp 2008-01-30 00:14:01 UTC (rev 559) @@ -7,7 +7,7 @@ namespace QuickGUI { - ComboBox::ComboBox(const Ogre::String& name, GUIManager* gm) : + ComboBox::ComboBox(const std::string& name, GUIManager* gm) : Widget(name,gm), mRightToLeft(false), mSelectedItem(0), @@ -267,20 +267,20 @@ mHighlightPanel->setVisible(false); } - void ComboBox::setDropDownHeight(Ogre::Real pixelHeight) + void ComboBox::setDropDownHeight(float pixelHeight) { mDropDownHeight = pixelHeight; mList->setHeight(mDropDownHeight); } - void ComboBox::setDropDownWidth(Ogre::Real pixelWidth) + void ComboBox::setDropDownWidth(float pixelWidth) { mDropDownWidth = pixelWidth; mList->setWidth(mDropDownWidth); mList->setHorizontalAnchor(ANCHOR_HORIZONTAL_LEFT); } - void ComboBox::setFont(const Ogre::String& fontScriptName, bool recursive) + void ComboBox::setFont(const std::string& fontScriptName, bool recursive) { if(fontScriptName == "") return; @@ -295,7 +295,7 @@ } } - void ComboBox::setHeight(Ogre::Real pixelHeight) + void ComboBox::setHeight(float pixelHeight) { Widget::setHeight(pixelHeight); mAutoSize = false; @@ -324,7 +324,7 @@ //mMenuLabel->setRightToLeft(mRightToLeft); } - void ComboBox::setSize(const Ogre::Real& pixelWidth, const Ogre::Real& pixelHeight) + void ComboBox::setSize(const float& pixelWidth, const float& pixelHeight) { Widget::setSize(pixelWidth,pixelHeight); mAutoSize = false; @@ -335,7 +335,7 @@ ComboBox::setSize(pixelSize.width,pixelSize.height); } - void ComboBox::setSkin(const Ogre::String& skinName, bool recursive) + void ComboBox::setSkin(const std::string& skinName, bool recursive) { Widget::setSkin(skinName,recursive); Modified: trunk/python-ogre/ThirdParty/quickgui/QuickGUIComboBox.h =================================================================== --- trunk/python-ogre/ThirdParty/quickgui/QuickGUIComboBox.h 2008-01-30 00:12:44 UTC (rev 558) +++ trunk/python-ogre/ThirdParty/quickgui/QuickGUIComboBox.h 2008-01-30 00:14:01 UTC (rev 559) @@ -1,7 +1,7 @@ #ifndef QUICKGUICOMBOBOX_H #define QUICKGUICOMBOBOX_H -#include "QuickGUIPrerequisites.h" +#include "QuickGUIForwardDeclarations.h" #include "QuickGUIButton.h" #include "QuickGUIWidget.h" #include "QuickGUIMenuLabel.h" @@ -46,7 +46,7 @@ @param ParentWidget parent widget which created this widget. */ - ComboBox(const Ogre::String& name, GUIManager* gm); + ComboBox(const std::string& name, GUIManager* gm); MenuLabel* addItem(); /** @@ -68,17 +68,17 @@ int getVerticalPixelPadHeight(); void selectItem(unsigned int index); - void setDropDownHeight(Ogre::Real pixelHeight); - void setDropDownWidth(Ogre::Real pixelWidth); - virtual void setFont(const Ogre::String& fontScriptName, bool recursive = false); - virtual void setHeight(Ogre::Real pixelHeight); + void setDropDownHeight(float pixelHeight); + void setDropDownWidth(float pixelWidth); + virtual void setFont(const std::string& fontScriptName, bool recursive = false); + virtual void setHeight(float pixelHeight); void setRightToLeft(bool rightToLeft); /** * Manually set size of widget. */ - virtual void setSize(const Ogre::Real& pixelWidth, const Ogre::Real& pixelHeight); + virtual void setSize(const float& pixelWidth, const float& pixelHeight); virtual void setSize(const Size& pixelSize); - virtual void setSkin(const Ogre::String& skinName, bool recursive = false); + virtual void setSkin(const std::string& skinName, bool recursive = false); void setVerticalPixelPadHeight(unsigned int height); protected: @@ -107,7 +107,7 @@ void onSelection(const EventArgs& args); Quad* mHighlightPanel; - Ogre::String mHighlightSkinComponent; + std::string mHighlightSkinComponent; // The Widget that has been clicked/selected by the user. MenuLabel* mSelectedItem; @@ -118,8 +118,8 @@ // Drop down list. List* mList; - Ogre::Real mDropDownHeight; - Ogre::Real mDropDownWidth; + float mDropDownHeight; + float mDropDownWidth; bool mRightToLeft; Modified: trunk/python-ogre/ThirdParty/quickgui/QuickGUIConfigScriptParser.h =================================================================== --- trunk/python-ogre/ThirdParty/quickgui/QuickGUIConfigScriptParser.h 2008-01-30 00:12:44 UTC (rev 558) +++ trunk/python-ogre/ThirdParty/quickgui/QuickGUIConfigScriptParser.h 2008-01-30 00:14:01 UTC (rev 559) @@ -4,9 +4,12 @@ #ifndef __QuickGuiSkinSetParser_h_ #define __QuickGuiSkinSetParser_h_ -#include "QuickGUIPrerequisites.h" +#include "QuickGUIForwardDeclarations.h" #include "QuickGUIExportDLL.h" +#include "OgreScriptLoader.h" +#include "OgreStringVector.h" + namespace QuickGUI { class ConfigNode; @@ -25,12 +28,12 @@ inline static ConfigScriptLoader *getSingletonPtr() { return &getSingleton(); } - Ogre::Real getLoadingOrder() const; + float getLoadingOrder() const; const Ogre::StringVector &getScriptPatterns() const; - ConfigNode *getConfigScript(const Ogre::String &type, const Ogre::String &name); + ConfigNode *... [truncated message content] |
From: <and...@us...> - 2008-02-13 09:25:35
|
Revision: 562 http://python-ogre.svn.sourceforge.net/python-ogre/?rev=562&view=rev Author: andy_miller Date: 2008-02-13 01:25:34 -0800 (Wed, 13 Feb 2008) Log Message: ----------- Updates for the 1.2 release.. Still broken however I need to get these into the svn Modified Paths: -------------- trunk/python-ogre/ThirdParty/caelum/Caelum.h trunk/python-ogre/ThirdParty/caelum/CaelumPrerequisites.h trunk/python-ogre/ThirdParty/caelum/CaelumSystem.cpp trunk/python-ogre/ThirdParty/caelum/CaelumSystem.h trunk/python-ogre/ThirdParty/caelum/CameraBoundElement.cpp trunk/python-ogre/ThirdParty/caelum/ImageHelper.cpp trunk/python-ogre/ThirdParty/caelum/ImageHelper.h trunk/python-ogre/ThirdParty/caelum/Sun.cpp trunk/python-ogre/ThirdParty/caelum/Sun.h trunk/python-ogre/ThirdParty/caelum/UniversalClock.cpp trunk/python-ogre/ThirdParty/caelum/UniversalClock.h trunk/python-ogre/ThirdParty/forests/ImpostorPage.cpp trunk/python-ogre/ThirdParty/forests/TreeLoader2D.cpp trunk/python-ogre/ThirdParty/forests/TreeLoader3D.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgre.h trunk/python-ogre/ThirdParty/nxogre/NxOgreActor.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreActor.h trunk/python-ogre/ThirdParty/nxogre/NxOgreActorBlueprint.h trunk/python-ogre/ThirdParty/nxogre/NxOgreAnimatedRenderable.h trunk/python-ogre/ThirdParty/nxogre/NxOgreBody.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreBody.h trunk/python-ogre/ThirdParty/nxogre/NxOgreCharacter.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreCharacter.h trunk/python-ogre/ThirdParty/nxogre/NxOgreCharacterController.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreCharacterController.h trunk/python-ogre/ThirdParty/nxogre/NxOgreCharacterModel.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreCharacterModel.h trunk/python-ogre/ThirdParty/nxogre/NxOgreCharacterMovementModel.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreCharacterMovementModel.h trunk/python-ogre/ThirdParty/nxogre/NxOgreCharacterSystem.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreCharacterSystem.h trunk/python-ogre/ThirdParty/nxogre/NxOgreCloth.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreCloth.h trunk/python-ogre/ThirdParty/nxogre/NxOgreClothRaycaster.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreClothRaycaster.h trunk/python-ogre/ThirdParty/nxogre/NxOgreCompoundActor.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreCompoundActor.h trunk/python-ogre/ThirdParty/nxogre/NxOgreContactStream.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreContactStream.h trunk/python-ogre/ThirdParty/nxogre/NxOgreContainer.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreContainer.h trunk/python-ogre/ThirdParty/nxogre/NxOgreCooking.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreCooking.h trunk/python-ogre/ThirdParty/nxogre/NxOgreDebugRenderer.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreDebugRenderer.h trunk/python-ogre/ThirdParty/nxogre/NxOgreDominanceGroup.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreDominanceGroup.h trunk/python-ogre/ThirdParty/nxogre/NxOgreEngine.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreEngine.h trunk/python-ogre/ThirdParty/nxogre/NxOgreError.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreError.h trunk/python-ogre/ThirdParty/nxogre/NxOgreExtendedTypes.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreExtendedTypes.h trunk/python-ogre/ThirdParty/nxogre/NxOgreFileResourceSystem.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreFileResourceSystem.h trunk/python-ogre/ThirdParty/nxogre/NxOgreFluid.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreFluid.h trunk/python-ogre/ThirdParty/nxogre/NxOgreFluidMesh.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreFluidMesh.h trunk/python-ogre/ThirdParty/nxogre/NxOgreForceField.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreForceField.h trunk/python-ogre/ThirdParty/nxogre/NxOgreGroup.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreGroup.h trunk/python-ogre/ThirdParty/nxogre/NxOgreHelpers.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreHelpers.h trunk/python-ogre/ThirdParty/nxogre/NxOgreIntersection.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreIntersection.h trunk/python-ogre/ThirdParty/nxogre/NxOgreJoint.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreJoint.h trunk/python-ogre/ThirdParty/nxogre/NxOgreJointSet1.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreJointSet1.h trunk/python-ogre/ThirdParty/nxogre/NxOgreJointSet2.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreJointSet2.h trunk/python-ogre/ThirdParty/nxogre/NxOgreLegacyCharacter.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreLegacyCharacter.h trunk/python-ogre/ThirdParty/nxogre/NxOgreLegacyCharacterController.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreLegacyCharacterController.h trunk/python-ogre/ThirdParty/nxogre/NxOgreLegacyCharacterHitReport.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreLegacyCharacterHitReport.h trunk/python-ogre/ThirdParty/nxogre/NxOgreLog.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreLog.h trunk/python-ogre/ThirdParty/nxogre/NxOgreMachine.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreMachine.h trunk/python-ogre/ThirdParty/nxogre/NxOgreMaterial.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreMaterial.h trunk/python-ogre/ThirdParty/nxogre/NxOgreMemoryStream.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreMemoryStream.h trunk/python-ogre/ThirdParty/nxogre/NxOgreNodeRenderable.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreNodeRenderable.h trunk/python-ogre/ThirdParty/nxogre/NxOgreNxActorController.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreNxActorController.h trunk/python-ogre/ThirdParty/nxogre/NxOgreNxCharacterController.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreNxCharacterController.h trunk/python-ogre/ThirdParty/nxogre/NxOgreOgreNodeRenderable.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreOgreNodeRenderable.h trunk/python-ogre/ThirdParty/nxogre/NxOgreOgreResourceSystem.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreOgreResourceSystem.h trunk/python-ogre/ThirdParty/nxogre/NxOgreOgreSceneRenderer.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreOgreSceneRenderer.h trunk/python-ogre/ThirdParty/nxogre/NxOgreParams.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreParams.h trunk/python-ogre/ThirdParty/nxogre/NxOgreParticleSystem.h trunk/python-ogre/ThirdParty/nxogre/NxOgrePerformer.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgrePerformer.h trunk/python-ogre/ThirdParty/nxogre/NxOgrePhysXDriver.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgrePhysXDriver.h trunk/python-ogre/ThirdParty/nxogre/NxOgrePose.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgrePose.h trunk/python-ogre/ThirdParty/nxogre/NxOgrePrerequisites.h trunk/python-ogre/ThirdParty/nxogre/NxOgreRaycaster.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreRaycaster.h trunk/python-ogre/ThirdParty/nxogre/NxOgreRemoteDebuggerConnection.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreRemoteDebuggerConnection.h trunk/python-ogre/ThirdParty/nxogre/NxOgreRenderable.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreRenderable.h trunk/python-ogre/ThirdParty/nxogre/NxOgreRenderableSource.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreRenderableSource.h trunk/python-ogre/ThirdParty/nxogre/NxOgreResourceManager.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreResourceManager.h trunk/python-ogre/ThirdParty/nxogre/NxOgreResourceManager_Convex.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreResourceManager_Triangle.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreResourceMesh.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreResourceMesh.h trunk/python-ogre/ThirdParty/nxogre/NxOgreResourceStream.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreResourceStream.h trunk/python-ogre/ThirdParty/nxogre/NxOgreResourceStreamPtr.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreResourceStreamPtr.h trunk/python-ogre/ThirdParty/nxogre/NxOgreResourceSystem.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreResourceSystem.h trunk/python-ogre/ThirdParty/nxogre/NxOgreScene.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreScene.h trunk/python-ogre/ThirdParty/nxogre/NxOgreSceneBlueprint.h trunk/python-ogre/ThirdParty/nxogre/NxOgreSceneContactController.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreSceneContactController.h trunk/python-ogre/ThirdParty/nxogre/NxOgreSceneController.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreSceneController.h trunk/python-ogre/ThirdParty/nxogre/NxOgreSceneRenderer.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreSceneRenderer.h trunk/python-ogre/ThirdParty/nxogre/NxOgreSceneSource.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreSceneSource.h trunk/python-ogre/ThirdParty/nxogre/NxOgreSceneTriggerController.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreSceneTriggerController.h trunk/python-ogre/ThirdParty/nxogre/NxOgreShape.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreShape.h trunk/python-ogre/ThirdParty/nxogre/NxOgreShapeBlueprint.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreShapeBlueprint.h trunk/python-ogre/ThirdParty/nxogre/NxOgreShapeBlueprintConvex.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreShapeBlueprintConvex.h trunk/python-ogre/ThirdParty/nxogre/NxOgreShapeBlueprintMesh.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreShapeBlueprintMesh.h trunk/python-ogre/ThirdParty/nxogre/NxOgreShapeBlueprintPrimitives.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreShapeBlueprintPrimitives.h trunk/python-ogre/ThirdParty/nxogre/NxOgreShapeBlueprintTerrain.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreShapeBlueprintTerrain.h trunk/python-ogre/ThirdParty/nxogre/NxOgreShapeBlueprintWheel.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreShapeBlueprintWheel.h trunk/python-ogre/ThirdParty/nxogre/NxOgreShapeConvex.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreShapeConvex.h trunk/python-ogre/ThirdParty/nxogre/NxOgreShapeMesh.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreShapeMesh.h trunk/python-ogre/ThirdParty/nxogre/NxOgreShapePrimitives.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreShapePrimitives.h trunk/python-ogre/ThirdParty/nxogre/NxOgreShapeTerrain.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreShapeTerrain.h trunk/python-ogre/ThirdParty/nxogre/NxOgreShapeWheel.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreShapeWheel.h trunk/python-ogre/ThirdParty/nxogre/NxOgreSimpleShape.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreSimpleShape.h trunk/python-ogre/ThirdParty/nxogre/NxOgreSkeletalRenderable.h trunk/python-ogre/ThirdParty/nxogre/NxOgreSkeleton.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreSkeleton.h trunk/python-ogre/ThirdParty/nxogre/NxOgreSoftBody.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreSoftBody.h trunk/python-ogre/ThirdParty/nxogre/NxOgreStable.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreStable.h trunk/python-ogre/ThirdParty/nxogre/NxOgreTesting.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreTesting.h trunk/python-ogre/ThirdParty/nxogre/NxOgreTrigger.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreTrigger.h trunk/python-ogre/ThirdParty/nxogre/NxOgreUserAllocator.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreUserAllocator.h trunk/python-ogre/ThirdParty/nxogre/NxOgreUserData.h trunk/python-ogre/ThirdParty/nxogre/NxOgreWheelSet.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreWheelSet.h trunk/python-ogre/ThirdParty/nxogre/NxOgreWorld.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreWorld.h trunk/python-ogre/ThirdParty/ogreal/OgreALOggSound.cpp trunk/python-ogre/ThirdParty/ogreal/OgreALPrereqs.h trunk/python-ogre/ThirdParty/ogreal/OgreALSound.cpp trunk/python-ogre/ThirdParty/ogreal/OgreALSound.h trunk/python-ogre/ThirdParty/ogreal/OgreALSoundManager.cpp trunk/python-ogre/ThirdParty/ogreal/OgreALSoundManager.h trunk/python-ogre/ThirdParty/ogreal/OgreALWavSound.cpp trunk/python-ogre/ThirdParty/quickgui/QuickGUIBorder.cpp trunk/python-ogre/ThirdParty/quickgui/QuickGUIBorder.h trunk/python-ogre/ThirdParty/quickgui/QuickGUIButton.cpp trunk/python-ogre/ThirdParty/quickgui/QuickGUIButton.h trunk/python-ogre/ThirdParty/quickgui/QuickGUICheckBox.cpp trunk/python-ogre/ThirdParty/quickgui/QuickGUICheckBox.h trunk/python-ogre/ThirdParty/quickgui/QuickGUIComboBox.cpp trunk/python-ogre/ThirdParty/quickgui/QuickGUIConsole.cpp trunk/python-ogre/ThirdParty/quickgui/QuickGUIExportDLL.h trunk/python-ogre/ThirdParty/quickgui/QuickGUIImage.cpp trunk/python-ogre/ThirdParty/quickgui/QuickGUIImage.h trunk/python-ogre/ThirdParty/quickgui/QuickGUILabel.cpp trunk/python-ogre/ThirdParty/quickgui/QuickGUILabel.h trunk/python-ogre/ThirdParty/quickgui/QuickGUIList.cpp trunk/python-ogre/ThirdParty/quickgui/QuickGUIList.h trunk/python-ogre/ThirdParty/quickgui/QuickGUIManager.cpp trunk/python-ogre/ThirdParty/quickgui/QuickGUIManager.h trunk/python-ogre/ThirdParty/quickgui/QuickGUIMouseCursor.cpp trunk/python-ogre/ThirdParty/quickgui/QuickGUINStateButton.cpp trunk/python-ogre/ThirdParty/quickgui/QuickGUIPanel.cpp trunk/python-ogre/ThirdParty/quickgui/QuickGUIPanel.h trunk/python-ogre/ThirdParty/quickgui/QuickGUIProgressBar.cpp trunk/python-ogre/ThirdParty/quickgui/QuickGUIProgressBar.h trunk/python-ogre/ThirdParty/quickgui/QuickGUIQuad.cpp trunk/python-ogre/ThirdParty/quickgui/QuickGUIQuad.h trunk/python-ogre/ThirdParty/quickgui/QuickGUIQuadContainer.cpp trunk/python-ogre/ThirdParty/quickgui/QuickGUIQuadContainer.h trunk/python-ogre/ThirdParty/quickgui/QuickGUIRect.cpp trunk/python-ogre/ThirdParty/quickgui/QuickGUIRect.h trunk/python-ogre/ThirdParty/quickgui/QuickGUIScrollPane.cpp trunk/python-ogre/ThirdParty/quickgui/QuickGUIScrollPane.h trunk/python-ogre/ThirdParty/quickgui/QuickGUISheet.cpp trunk/python-ogre/ThirdParty/quickgui/QuickGUISheet.h trunk/python-ogre/ThirdParty/quickgui/QuickGUISkinSet.cpp trunk/python-ogre/ThirdParty/quickgui/QuickGUISkinSet.h trunk/python-ogre/ThirdParty/quickgui/QuickGUIText.cpp trunk/python-ogre/ThirdParty/quickgui/QuickGUIText.h trunk/python-ogre/ThirdParty/quickgui/QuickGUITextBox.cpp trunk/python-ogre/ThirdParty/quickgui/QuickGUITextHelper.cpp trunk/python-ogre/ThirdParty/quickgui/QuickGUITextHelper.h trunk/python-ogre/ThirdParty/quickgui/QuickGUITree.cpp trunk/python-ogre/ThirdParty/quickgui/QuickGUITree.h trunk/python-ogre/ThirdParty/quickgui/QuickGUIWidget.cpp trunk/python-ogre/ThirdParty/quickgui/QuickGUIWidget.h trunk/python-ogre/ThirdParty/quickgui/QuickGUIWindow.cpp Added Paths: ----------- trunk/python-ogre/ThirdParty/Hydrax/ trunk/python-ogre/ThirdParty/Hydrax/Enums.cpp trunk/python-ogre/ThirdParty/Hydrax/Enums.h trunk/python-ogre/ThirdParty/Hydrax/Help.cpp trunk/python-ogre/ThirdParty/Hydrax/Help.h trunk/python-ogre/ThirdParty/Hydrax/Hydrax.cpp trunk/python-ogre/ThirdParty/Hydrax/Hydrax.h trunk/python-ogre/ThirdParty/Hydrax/Mesh.cpp trunk/python-ogre/ThirdParty/Hydrax/Mesh.h trunk/python-ogre/ThirdParty/Hydrax/Perlin.cpp trunk/python-ogre/ThirdParty/Hydrax/Perlin.h trunk/python-ogre/ThirdParty/Hydrax/Prerequisites.cpp trunk/python-ogre/ThirdParty/Hydrax/Prerequisites.h trunk/python-ogre/ThirdParty/Hydrax/Structs.cpp trunk/python-ogre/ThirdParty/Hydrax/Structs.h trunk/python-ogre/ThirdParty/extra/ trunk/python-ogre/ThirdParty/extra/bin/ trunk/python-ogre/ThirdParty/extra/bin/avcodec.dll trunk/python-ogre/ThirdParty/extra/bin/avcodec.lib trunk/python-ogre/ThirdParty/extra/bin/avdevice.dll trunk/python-ogre/ThirdParty/extra/bin/avdevice.lib trunk/python-ogre/ThirdParty/extra/bin/avformat.dll trunk/python-ogre/ThirdParty/extra/bin/avformat.lib trunk/python-ogre/ThirdParty/extra/bin/avutil.dll trunk/python-ogre/ThirdParty/extra/bin/avutil.lib trunk/python-ogre/ThirdParty/extra/bin/ffmpeg.exe trunk/python-ogre/ThirdParty/extra/bin/libogg-0.dll trunk/python-ogre/ThirdParty/extra/include/ trunk/python-ogre/ThirdParty/extra/include/ffmpeg/ trunk/python-ogre/ThirdParty/extra/include/ffmpeg/adler32.h trunk/python-ogre/ThirdParty/extra/include/ffmpeg/avcodec.h trunk/python-ogre/ThirdParty/extra/include/ffmpeg/avdevice.h trunk/python-ogre/ThirdParty/extra/include/ffmpeg/avformat.h trunk/python-ogre/ThirdParty/extra/include/ffmpeg/avio.h trunk/python-ogre/ThirdParty/extra/include/ffmpeg/avstring.h trunk/python-ogre/ThirdParty/extra/include/ffmpeg/avutil.h trunk/python-ogre/ThirdParty/extra/include/ffmpeg/base64.h trunk/python-ogre/ThirdParty/extra/include/ffmpeg/common.h trunk/python-ogre/ThirdParty/extra/include/ffmpeg/crc.h trunk/python-ogre/ThirdParty/extra/include/ffmpeg/fifo.h trunk/python-ogre/ThirdParty/extra/include/ffmpeg/intfloat_readwrite.h trunk/python-ogre/ThirdParty/extra/include/ffmpeg/log.h trunk/python-ogre/ThirdParty/extra/include/ffmpeg/lzo.h trunk/python-ogre/ThirdParty/extra/include/ffmpeg/mathematics.h trunk/python-ogre/ThirdParty/extra/include/ffmpeg/md5.h trunk/python-ogre/ThirdParty/extra/include/ffmpeg/mem.h trunk/python-ogre/ThirdParty/extra/include/ffmpeg/opt.h trunk/python-ogre/ThirdParty/extra/include/ffmpeg/random.h trunk/python-ogre/ThirdParty/extra/include/ffmpeg/rational.h trunk/python-ogre/ThirdParty/extra/include/ffmpeg/rgb2rgb.h trunk/python-ogre/ThirdParty/extra/include/ffmpeg/rtsp.h trunk/python-ogre/ThirdParty/extra/include/ffmpeg/rtspcodes.h trunk/python-ogre/ThirdParty/extra/include/ffmpeg/sha1.h trunk/python-ogre/ThirdParty/extra/include/ffmpeg/swscale.h trunk/python-ogre/ThirdParty/extra/include/ogg/ trunk/python-ogre/ThirdParty/extra/include/ogg/config_types.h trunk/python-ogre/ThirdParty/extra/include/ogg/ogg.h trunk/python-ogre/ThirdParty/extra/include/ogg/os_types.h trunk/python-ogre/ThirdParty/extra/include/theora/ trunk/python-ogre/ThirdParty/extra/include/theora/theora.h trunk/python-ogre/ThirdParty/extra/lib/ trunk/python-ogre/ThirdParty/extra/lib/libogg.a trunk/python-ogre/ThirdParty/extra/lib/libogg.dll.a trunk/python-ogre/ThirdParty/extra/lib/libtheora.a trunk/python-ogre/ThirdParty/extra/lib/pkgconfig/ trunk/python-ogre/ThirdParty/extra/lib/pkgconfig/libavcodec.pc trunk/python-ogre/ThirdParty/extra/lib/pkgconfig/libavdevice.pc trunk/python-ogre/ThirdParty/extra/lib/pkgconfig/libavformat.pc trunk/python-ogre/ThirdParty/extra/lib/pkgconfig/libavutil.pc trunk/python-ogre/ThirdParty/extra/lib/pkgconfig/libswscale.pc trunk/python-ogre/ThirdParty/extra/lib/pkgconfig/ogg.pc trunk/python-ogre/ThirdParty/extra/lib/pkgconfig/theora.pc trunk/python-ogre/ThirdParty/opensteer/ Added: trunk/python-ogre/ThirdParty/Hydrax/Enums.cpp =================================================================== --- trunk/python-ogre/ThirdParty/Hydrax/Enums.cpp (rev 0) +++ trunk/python-ogre/ThirdParty/Hydrax/Enums.cpp 2008-02-13 09:25:34 UTC (rev 562) @@ -0,0 +1,31 @@ +/* +-------------------------------------------------------------------------------- +This source file is part of Hydrax. +Visit --- + +Copyright (C) 2007 Xavier Vergu\xEDn Gonz\xE1lez <xav...@ho...> + <xa...@gm...> + +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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software Foundation, Inc., +59 Temple Place - Suite 330, Boston, MA 02111-1307, USA, or go to +http://www.gnu.org/copyleft/gpl.html. +-------------------------------------------------------------------------------- +*/ + +#include "Enums.h" + +namespace Hydrax +{ + +} Added: trunk/python-ogre/ThirdParty/Hydrax/Enums.h =================================================================== --- trunk/python-ogre/ThirdParty/Hydrax/Enums.h (rev 0) +++ trunk/python-ogre/ThirdParty/Hydrax/Enums.h 2008-02-13 09:25:34 UTC (rev 562) @@ -0,0 +1,69 @@ +/* +-------------------------------------------------------------------------------- +This source file is part of Hydrax. +Visit --- + +Copyright (C) 2007 Xavier Vergu\xEDn Gonz\xE1lez <xav...@ho...> + <xa...@gm...> + +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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software Foundation, Inc., +59 Temple Place - Suite 330, Boston, MA 02111-1307, USA, or go to +http://www.gnu.org/copyleft/gpl.html. +-------------------------------------------------------------------------------- +*/ + +#ifndef _Enums_H_ +#define _Enums_H_ + +#include "Prerequisites.h" + +namespace Hydrax +{ + /** Texture quality enumeration(2^n) + */ + enum DllExport TextureQuality + { + TEX_QUA_2 = 2, + TEX_QUA_4 = 4, + TEX_QUA_8 = 8, + TEX_QUA_16 = 16, + TEX_QUA_32 = 32, + TEX_QUA_64 = 64, + TEX_QUA_128 = 128, + TEX_QUA_256 = 256, + TEX_QUA_512 = 512, + TEX_QUA_1024 = 1024 + }; + + /** Hydrax flags for select the components + that we want to use. + 0 for none, 1 for all. + */ + enum DllExport HydraxComponent + { + HYDRAX_COMPONENT_SUN = 1 << 0, + HYDRAX_COMPONENT_FOAM = 1 << 1, + HYDRAX_COMPONENT_DEPTH = 1 << 2, + /// Smooth transitions needs depth component + HYDRAX_COMPONENT_SMOOTH = 1 << 3, + HYDRAX_COMPONENT_CAUSTICS = 1 << 4, + /// See documentation + HYDRAX_COMPONENT_PLSM2 = 1 << 5, + + HYDRAX_COMPONENTS_NONE = 0x0000, + HYDRAX_COMPONENTS_ALL = 0x001F, + }; +} + +#endif Added: trunk/python-ogre/ThirdParty/Hydrax/Help.cpp =================================================================== --- trunk/python-ogre/ThirdParty/Hydrax/Help.cpp (rev 0) +++ trunk/python-ogre/ThirdParty/Hydrax/Help.cpp 2008-02-13 09:25:34 UTC (rev 562) @@ -0,0 +1,31 @@ +/* +-------------------------------------------------------------------------------- +This source file is part of Hydrax. +Visit --- + +Copyright (C) 2007 Xavier Vergu\xEDn Gonz\xE1lez <xav...@ho...> + <xa...@gm...> + +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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software Foundation, Inc., +59 Temple Place - Suite 330, Boston, MA 02111-1307, USA, or go to +http://www.gnu.org/copyleft/gpl.html. +-------------------------------------------------------------------------------- +*/ + +#include "Help.h" + +namespace Hydrax +{ + +} Added: trunk/python-ogre/ThirdParty/Hydrax/Help.h =================================================================== --- trunk/python-ogre/ThirdParty/Hydrax/Help.h (rev 0) +++ trunk/python-ogre/ThirdParty/Hydrax/Help.h 2008-02-13 09:25:34 UTC (rev 562) @@ -0,0 +1,193 @@ +/* +-------------------------------------------------------------------------------- +This source file is part of Hydrax. +Visit --- + +Copyright (C) 2007 Xavier Vergu\xEDn Gonz\xE1lez <xav...@ho...> + <xa...@gm...> + +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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software Foundation, Inc., +59 Temple Place - Suite 330, Boston, MA 02111-1307, USA, or go to +http://www.gnu.org/copyleft/gpl.html. +-------------------------------------------------------------------------------- +*/ + +#ifndef _Help_H_ +#define _Help_H_ + +#include "Prerequisites.h" + +#include "../noise/noise.h" +#include "../noise/noiseutils.h" + +namespace Hydrax +{ + /** Struct wich contains an especific width and height value + */ + struct DllExport Size + { + /// Width value + int Width; + /// Height value + int Height; + + /** Default constructor + */ + Size() + { + Width = 0; + Height = 0; + } + + /** Constructor + @param size The width and height values + */ + Size(int size) + { + Width = size; + Height = size; + } + + /** Constructor + @param width Width value + @param height Height value + */ + Size(int width, int height) + { + Width = width; + Height = height; + } + + /** Destructor + */ + ~Size() + { + } + + /** Sets the same width and height value + @param size The width and height values + */ + void setSize(int size) + { + Width = size; + Height = size; + } + + /** Sets the especified values + @param width Width value + @param height Height value + */ + void setSize(int width, int height) + { + Width = width; + Height = height; + } + }; + + /** Struct for store a float** data pointer, its size and its normal map + */ + struct DllExport NoiseBuffer + { + /// Our float pointer data + float** mData; + /// Size + Size mSize; + /// Normal map(its use is optional) + noise::utils::Image mNormalMap; + + /** Default constructor + */ + NoiseBuffer() : mData(0) + { + } + + /** Destructor + */ + ~NoiseBuffer() + { + if (mData) + { + for (int k = 0; k < mSize.Width; k++) + { + delete[] mData[k]; + } + + delete[] mData; + } + } + + /** Constructor + @param Data Data pointer + @param Size Data bidimensional array width/height size + */ + NoiseBuffer(float **Data, Size Size) + { + mData = Data; + mSize = Size; + } + + /** Constructor + @param Data Data pointer + @param Size Data bidimensional array width/height size + @param NormalMap noise::utils::Image that contains our data image normal map + */ + NoiseBuffer(float **Data, Size Size, noise::utils::Image NormalMap) + { + mData = Data; + mSize = Size; + mNormalMap = NormalMap; + } + + /** Set data and size + @param Data Data pointer + @param Size Data bidimensional array width/height size + */ + void Set(float **Data, Size Size) + { + mData = Data; + mSize = Size; + } + + /** Set data, size and normal map image + @param Data Data pointer + @param Size Data bidimensional array width/height size + @param NormalMap noise::utils::Image that contains our data image normal map + */ + void Set(float **Data, Size Size, noise::utils::Image NormalMap) + { + mData = Data; + mSize = Size; + mNormalMap = NormalMap; + } + + /** Get our data pointer + @return Data float** pointer + */ + float** getData() + { + return mData; + } + + /** Get float value from an especific x/y coordinates + @return x/y value of our data + */ + float getData(int x, int y) + { + return mData[x][y]; + } + + }; +} + +#endif Added: trunk/python-ogre/ThirdParty/Hydrax/Hydrax.cpp =================================================================== --- trunk/python-ogre/ThirdParty/Hydrax/Hydrax.cpp (rev 0) +++ trunk/python-ogre/ThirdParty/Hydrax/Hydrax.cpp 2008-02-13 09:25:34 UTC (rev 562) @@ -0,0 +1,1316 @@ +/* +-------------------------------------------------------------------------------- +This source file is part of Hydrax. +Visit --- + +Copyright (C) 2007 Xavier Vergu\xEDn Gonz\xE1lez <xav...@ho...> + <xa...@gm...> + +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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software Foundation, Inc., +59 Temple Place - Suite 330, Boston, MA 02111-1307, USA, or go to +http://www.gnu.org/copyleft/gpl.html. +-------------------------------------------------------------------------------- +*/ + +#include "Hydrax.h" + +namespace Hydrax +{ + + Hydrax::Hydrax(Ogre::SceneManager *sm, Ogre::Camera *c) + : mSceneManager(sm) + , mCamera(c) + , mCreated(false) + , mPolygonMode(0) + , mPosition(Ogre::Vector3(0,0,0)) + , mPlanesError(0) + , mVelocity(9.75) + , mFullReflectionDistance(90000000) + , mGlobalTransparency(0.05) + , mNormalDistortion(0.09) + , mSunPosition(Ogre::Vector3(5000,3000,1)) + , mSunStrength(1.75) + , mSunArea(150) + , mSunColor(Ogre::Vector3(1,0.75,0.25)) + , mFoamMaxDistance(75000000) + , mFoamScale(50) + , mFoamStart(0.5) + , mFoamTransparency(1.275) + , mDepthLimit(0) + , mDepthColor(Ogre::Vector3(0,0.1,0.172)) + , mSmoothPower(30) + , mCausticsScale(20) + , mCausticsPower(15) + , mCausticsEnd(0.55) + , mActualTexScrollPosition(0) + , mMesh(new Mesh(sm)) + , mSceneNode(0) + , mRefractionPlane(0) + , mReflectionPlane(0) + , mDepthPlane(0) + , mTextureRefraction(0) + , mTextureReflection(0) + , mTextureDepth(0) + , mPlanesSceneNode(0) + , mComponents(HYDRAX_COMPONENTS_NONE) + { + LOG("[Hydrax] Hydrax object created."); + } + + Hydrax::~Hydrax() + { + if (mSceneNode) + { + mSceneNode->detachAllObjects(); + mSceneNode->getParentSceneNode()->removeAndDestroyChild(mSceneNode->getName()); + + Ogre::TextureManager::getSingleton().remove("HydraxHeight"); + Ogre::TextureManager::getSingleton().remove("HydraxNormalMap"); + + delete mMesh; + } + + if (mPlanesSceneNode) + { + mPlanesSceneNode->detachAllObjects(); + mPlanesSceneNode->getParentSceneNode()->removeAndDestroyChild(mPlanesSceneNode->getName()); + + Ogre::RenderTarget* mRT_TextureRefraction = mTextureRefraction->getBuffer()->getRenderTarget(); + mRT_TextureRefraction->removeAllListeners(); + mRT_TextureRefraction->removeAllViewports(); + + Ogre::RenderTarget* mRT_TextureReflection = mTextureReflection->getBuffer()->getRenderTarget(); + mRT_TextureReflection->removeAllListeners(); + mRT_TextureReflection->removeAllViewports(); + + if (isComponent(HYDRAX_COMPONENT_DEPTH)) + { + Ogre::RenderTarget* mRT_TextureDepth = mTextureDepth->getBuffer()->getRenderTarget(); + mRT_TextureDepth->removeAllListeners(); + mRT_TextureDepth->removeAllViewports(); + + Ogre::TextureManager::getSingleton().remove("Depth"); + + Ogre::MeshManager::getSingleton().remove("DepthClipPlane"); + } + + Ogre::TextureManager::getSingleton().remove("Reflection"); + Ogre::TextureManager::getSingleton().remove("Refraction"); + + Ogre::MeshManager::getSingleton().remove("RefractionClipPlane"); + Ogre::MeshManager::getSingleton().remove("ReflectionClipPlane"); + } + + mNoiseBuffer[2].Set(mPerlin.getFreeData(), mPerlin.mSize); + mNoiseBuffer.clear(); + + LOG("[Hydrax] Hydrax object removed."); + } + + void Hydrax::create() + { + if (isCreated()) + { + LOG("[Hydrax] Hydrax alredy created, skipping..."); + + return; + } + + LOG("[Hydrax] Creating perlin noise textures and normal maps."); + _createTextures(); + _updateTextures(0); + LOG("[Hydrax] Perlin noise textures and normal maps created."); + + LOG("[Hydrax] Creating water mesh."); + mSceneNode = mSceneManager->getRootSceneNode()->createChildSceneNode(); + mMesh->create(mSceneNode); + mMesh->update(mNoiseBuffer[2]); + LOG("[Hydrax] Water mesh created"); + + LOG("[Hydrax] Creating RTListeners."); + _createRttListeners(); + LOG("[Hydrax] RTListeners created"); + + mCreated = true; + } + + void Hydrax::_createTextures() + { + mPerlin.setSize(mPerlinOptions.TexQuality, mPerlinOptions.TexQuality); + + mNoiseBuffer.reserve(3); + mNoiseBuffer.resize(3); + + mPerlin.mPerlinModule.SetFrequency(mPerlinOptions.Frecuency); + mPerlin.mPerlinModule.SetPersistence(mPerlinOptions.Persistence); + mPerlin.mPerlinModule.SetOctaveCount(mPerlinOptions.Octave); + mPerlin.mPerlinModule.SetLacunarity(mPerlinOptions.Lacunarity); + + mPerlin.createPerlinTexture(Ogre::String("HydraxHeight")); + mPerlin.createNMTexture(Ogre::String("HydraxNormalMap")); + + mPerlin.mPerlinModule.SetSeed(0); + mNoiseBuffer[0].Set(mPerlin.getData(true), mPerlin.mSize, mPerlin.getNormalMap(mPerlinOptions.NMHeight, true)); + mPerlin.mPerlinModule.SetSeed(1); + mNoiseBuffer[1].Set(mPerlin.getData(true), mPerlin.mSize, mPerlin.getNormalMap(mPerlinOptions.NMHeight, true)); + mNoiseBuffer[2].Set(mPerlin.getFreeData(), mPerlin.mSize); + mNoiseBuffer[2].mNormalMap.SetSize(mPerlin.mSize.Width, mPerlin.mSize.Height); + } + + void Hydrax::_updateTextures(Ogre::Real timeSinceLastFrame) + { + int x, y, newY1, newY1a, newY2, newY2a; + float a, b, c, d, diff, diffb; + + float** OriginalA = mNoiseBuffer[0].mData; + float** OriginalB = mNoiseBuffer[1].mData; + + diff = (mActualTexScrollPosition - static_cast<int>(mActualTexScrollPosition))/2; // Divide by 2 to avoid it in: mNoiseBuffer[2].mData[x][y] = (c+d)/2; + diffb = 0.5 - diff; + + for (y = 0; y < mNoiseBuffer[0].mSize.Height; y ++) + { + newY1 = y + static_cast<int>(mActualTexScrollPosition); + if (newY1>mNoiseBuffer[0].mSize.Height-1) + { + newY1-=mNoiseBuffer[0].mSize.Height; + } + + newY1a = (y+1) + static_cast<int>(mActualTexScrollPosition); + if (newY1a>mNoiseBuffer[0].mSize.Height-1) + { + newY1a-=mNoiseBuffer[0].mSize.Height; + } + + newY2 = y - static_cast<int>(mActualTexScrollPosition); + if (newY2<0) + { + newY2+=mNoiseBuffer[0].mSize.Height-1; + } + + newY2a = (y+1) - static_cast<int>(mActualTexScrollPosition); + if (newY2a<0) + { + newY2a+=mNoiseBuffer[0].mSize.Height-1; + } + if (newY2a>mNoiseBuffer[0].mSize.Height-1) + { + newY2a-=mNoiseBuffer[0].mSize.Height; + } + + for (x = 0; x < mNoiseBuffer[0].mSize.Width; x ++) + { + a = OriginalA[newY1][x]; + b = OriginalA[newY1a][x]; + + c=a*diffb+ b*diff; + + a = OriginalB[newY2][x]; + b = OriginalB[newY2a][x]; + + d=a*diff + b*diffb; + + mNoiseBuffer[2].mData[y][x] = (c+d); + } + } + + mActualTexScrollPosition += mVelocity*timeSinceLastFrame; + + if (mActualTexScrollPosition>mNoiseBuffer[0].mSize.Height) + { + mActualTexScrollPosition = 0; + } + + mPerlin.updatePerlinTexture(mNoiseBuffer[2].mData); + _updateNM(); + } + + void Hydrax::_updateNM() + { + int x, y, newY1, newY1a, newY2, newY2a; + float diff, diffb; + + diff = (mActualTexScrollPosition - static_cast<int>(mActualTexScrollPosition))/2; // Divide by 2 to avoid it in the bucle + diffb = 0.5 - diff; + + for (y = 0; y < mNoiseBuffer[0].mSize.Height; y ++) + { + newY1 = y + static_cast<int>(mActualTexScrollPosition); + if (newY1>mNoiseBuffer[0].mSize.Height-1) + { + newY1-=mNoiseBuffer[0].mSize.Height; + } + + newY1a = y+1 + static_cast<int>(mActualTexScrollPosition); + if (newY1a>mNoiseBuffer[0].mSize.Height-1) + { + newY1a-=mNoiseBuffer[0].mSize.Height; + } + + newY2 = y - static_cast<int>(mActualTexScrollPosition); + if (newY2<0) + { + newY2+=mNoiseBuffer[0].mSize.Height-1; + } + + newY2a = (y+1) - static_cast<int>(mActualTexScrollPosition); + if (newY2a<0) + { + newY2a+=mNoiseBuffer[0].mSize.Height-1; + } + if (newY2a>mNoiseBuffer[0].mSize.Height-1) + { + newY2a-=mNoiseBuffer[0].mSize.Height; + } + + for (x = 0; x < mNoiseBuffer[0].mSize.Width; x ++) + { + noise::utils::Color c = + noise::utils::Color( + // Red + (( mNoiseBuffer[1].mNormalMap.GetValue(newY1,x).red *diffb + mNoiseBuffer[1].mNormalMap.GetValue(newY1a,x).red *diff ) + +(mNoiseBuffer[0].mNormalMap.GetValue(newY2,x).red *diff + mNoiseBuffer[0].mNormalMap.GetValue(newY2a,x).red *diffb)), + // Green + (( mNoiseBuffer[1].mNormalMap.GetValue(newY1,x).green *diffb + mNoiseBuffer[1].mNormalMap.GetValue(newY1a,x).green *diff ) + +(mNoiseBuffer[0].mNormalMap.GetValue(newY2,x).green *diff + mNoiseBuffer[0].mNormalMap.GetValue(newY2a,x).green *diffb)), + // Blue + (( mNoiseBuffer[1].mNormalMap.GetValue(newY1,x).blue *diffb + mNoiseBuffer[1].mNormalMap.GetValue(newY1a,x).blue *diff ) + +(mNoiseBuffer[0].mNormalMap.GetValue(newY2,x).blue *diff + mNoiseBuffer[0].mNormalMap.GetValue(newY2a,x).blue *diffb)), + // Alpha + 255); + + mNoiseBuffer[2].mNormalMap.SetValue(y,x,c); + } + } + + mPerlin.updateNMTexture(mNoiseBuffer[2].mNormalMap); + } + + void Hydrax::_createRttListeners() + { + if (!isCreated()) + { + mRefractionPlane = new Ogre::MovablePlane("RefractionPlane"); + mReflectionPlane = new Ogre::MovablePlane("ReflectionPlane"); + + mRefractionPlane->d = 0; + mReflectionPlane->d = 0; + + mRefractionPlane->normal = Ogre::Vector3::NEGATIVE_UNIT_Y; + mReflectionPlane->normal = Ogre::Vector3::UNIT_Y; + + Ogre::MeshManager::getSingleton().createPlane( + "RefractionClipPlane",Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, + *mRefractionPlane, + mMesh->getSize().Width,mMesh->getSize().Height, + 10,10,true,1,5,5,Ogre::Vector3::UNIT_Z); + + Ogre::MeshManager::getSingleton().createPlane( + "ReflectionClipPlane",Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, + *mReflectionPlane, + mMesh->getSize().Width,mMesh->getSize().Height, + 10,10,true,1,5,5,Ogre::Vector3::UNIT_Z); + + mRefractionPlane->setCastShadows(false); + mReflectionPlane->setCastShadows(false); + + mPlanesSceneNode = mSceneManager->getRootSceneNode()->createChildSceneNode(); + mPlanesSceneNode->attachObject(mRefractionPlane); + mPlanesSceneNode->attachObject(mReflectionPlane); + + mReflectionListener.mHydrax = this; + mRefractionListener.mHydrax = this; + } + + Ogre::TextureManager::getSingleton().remove("Reflection"); + Ogre::TextureManager::getSingleton().remove("Refraction"); + + mTextureRefraction = Ogre::TextureManager::getSingleton().createManual( + "Refraction", + Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, + Ogre::TEX_TYPE_2D, + mRttOptions.RefractionQuality, mRttOptions.RefractionQuality, 0, + Ogre::PF_R8G8B8, + Ogre::TU_RENDERTARGET); + + Ogre::RenderTarget* mRT_TextureRefraction = mTextureRefraction->getBuffer()->getRenderTarget(); + { + Ogre::Viewport *v = mRT_TextureRefraction->addViewport(mCamera); + v->setClearEveryFrame(true); + v->setBackgroundColour(Ogre::ColourValue::White); + v->setOverlaysEnabled(false); + + mRT_TextureRefraction->addListener(&mRefractionListener); + + Ogre::MaterialPtr mat = Ogre::MaterialManager::getSingleton().getByName(mMesh->getMaterialName()); + Ogre::TextureUnitState* t = mat->getTechnique(0)->getPass(0)->getTextureUnitState(2); + t->setTextureName("Refraction"); + } + + mTextureReflection = Ogre::TextureManager::getSingleton().createManual( + "Reflection", + Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, + Ogre::TEX_TYPE_2D, + mRttOptions.ReflectionQuality, mRttOptions.ReflectionQuality, 0, + Ogre::PF_R8G8B8, + Ogre::TU_RENDERTARGET); + + Ogre::RenderTarget* mRT_TextureReflection = mTextureReflection->getBuffer()->getRenderTarget(); + { + Ogre::Viewport *v = mRT_TextureReflection->addViewport(mCamera); + v->setClearEveryFrame(true); + v->setBackgroundColour(Ogre::ColourValue::White); + v->setOverlaysEnabled(false); + + mRT_TextureReflection->addListener(&mReflectionListener); + + Ogre::MaterialPtr mat = Ogre::MaterialManager::getSingleton().getByName(mMesh->getMaterialName()); + Ogre::TextureUnitState* t = mat->getTechnique(0)->getPass(0)->getTextureUnitState(1); + t->setTextureName("Reflection"); + } + + if (isComponent(HYDRAX_COMPONENT_DEPTH)) + { + _createDepthRttListener(); + } + } + + void Hydrax::_createDepthRttListener(bool Create, bool Delete) + { + if (Create) + { + Ogre::TextureManager::getSingleton().remove("Depth"); + + if (!isCreated()) + { + mDepthPlane = new Ogre::MovablePlane("DepthPlane"); + + mDepthPlane->d = 0; + mDepthPlane->normal = Ogre::Vector3::NEGATIVE_UNIT_Y; + + Ogre::MeshManager::getSingleton().createPlane( + "DepthClipPlane",Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, + *mDepthPlane, + mMesh->getSize().Width,mMesh->getSize().Height, + 10,10,true,1,5,5,Ogre::Vector3::UNIT_Z); + + mDepthPlane->setCastShadows(false); + + mPlanesSceneNode->attachObject(mDepthPlane); + + mDepthListener.mHydrax = this; + } + + mTextureDepth = Ogre::TextureManager::getSingleton().createManual( + "Depth", + Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, + Ogre::TEX_TYPE_2D, + mRttOptions.DepthQuality, mRttOptions.DepthQuality, 0, + Ogre::PF_R8G8B8, + Ogre::TU_RENDERTARGET); + + Ogre::RenderTarget* mRT_TextureDepth = mTextureDepth->getBuffer()->getRenderTarget(); + { + Ogre::Viewport *v = mRT_TextureDepth->addViewport(mCamera); + v->setClearEveryFrame(true); + v->setBackgroundColour(Ogre::ColourValue::White); + v->setOverlaysEnabled(false); + v->setMaterialScheme("Depth"); + + mRT_TextureDepth->addListener(&mDepthListener); + + Ogre::MaterialPtr mat = Ogre::MaterialManager::getSingleton().getByName(mMesh->getMaterialName()); + Ogre::TextureUnitState* t = mat->getTechnique(0)->getPass(0)->getTextureUnitState(3); + t->setTextureName("Depth"); + } + + } + if (Delete) + { + Ogre::RenderTarget* mRT_TextureDepth = mTextureDepth->getBuffer()->getRenderTarget(); + mRT_TextureDepth->removeAllListeners(); + mRT_TextureDepth->removeAllViewports(); + + Ogre::TextureManager::getSingleton().remove("Depth"); + + Ogre::MeshManager::getSingleton().remove("DepthClipPlane"); + } + } + + void Hydrax::CReflectionListener::preRenderTargetUpdate(const Ogre::RenderTargetEvent& evt) + { + mHydrax->mMesh->getEntity()->setVisible(false); + mHydrax->mReflectionPlane->getParentNode()->translate(0,mHydrax->mPlanesError,0); + + mHydrax->mCamera->enableReflection(mHydrax->mReflectionPlane); + mHydrax->mCamera->enableCustomNearClipPlane(mHydrax->mReflectionPlane); + } + + void Hydrax::CReflectionListener::postRenderTargetUpdate(const Ogre::RenderTargetEvent& evt) + { + mHydrax->mMesh->getEntity()->setVisible(true); + mHydrax->mReflectionPlane->getParentNode()->translate(0,-mHydrax->mPlanesError,0); + + mHydrax->mCamera->disableReflection(); + mHydrax->mCamera->disableCustomNearClipPlane(); + } + + void Hydrax::CRefractionListener::preRenderTargetUpdate(const Ogre::RenderTargetEvent& evt) + { + mHydrax->mMesh->getEntity()->setVisible(false); + mHydrax->mRefractionPlane->getParentNode()->translate(0,mHydrax->mPlanesError,0); + + mHydrax->mCamera->enableCustomNearClipPlane(mHydrax->mRefractionPlane); + } + + void Hydrax::CRefractionListener::postRenderTargetUpdate(const Ogre::RenderTargetEvent& evt) + { + mHydrax->mMesh->getEntity()->setVisible(true); + mHydrax->mRefractionPlane->getParentNode()->translate(0,-mHydrax->mPlanesError,0); + + mHydrax->mCamera->disableCustomNearClipPlane(); + } + + void Hydrax::CDepthListener::preRenderTargetUpdate(const Ogre::RenderTargetEvent& evt) + { + mHydrax->mMesh->getEntity()->setVisible(false); + + Ogre::SceneManager::MovableObjectIterator it = mHydrax->mSceneManager->getMovableObjectIterator("Entity"); + + Ogre::Entity* cur; + mMaterials.empty(); + + while (it.hasMoreElements()) + { + cur = dynamic_cast<Ogre::Entity*>(it.peekNextValue()); + mMaterials.push(cur->getSubEntity(0)->getMaterialName()); + + if (mHydrax->isComponent(HYDRAX_COMPONENT_CAUSTICS)) + { + cur->getSubEntity(0)->setMaterialName("HydraxShaderDepthCaustics"); + } + else + { + cur->getSubEntity(0)->setMaterialName("HydraxShaderDepth"); + } + + it.moveNext(); + } + + mHydrax->mDepthPlane->getParentNode()->translate(0,mHydrax->mPlanesError,0); + mHydrax->mCamera->enableCustomNearClipPlane(mHydrax->mDepthPlane); + } + + void Hydrax::CDepthListener::postRenderTargetUpdate(const Ogre::RenderTargetEvent& evt) + { + Ogre::SceneManager::MovableObjectIterator it = mHydrax->mSceneManager->getMovableObjectIterator("Entity"); + + Ogre::Entity* cur; + + while (it.hasMoreElements()) + { + std::string name = mMaterials.front(); + + cur = dynamic_cast<Ogre::Entity*>(it.peekNextValue()); + if (Ogre::MaterialManager::getSingleton().resourceExists(name)) + cur->setMaterialName(name); + + mMaterials.pop(); + it.moveNext(); + } + + mHydrax->mMesh->getEntity()->setVisible(true); + + mHydrax->mCamera->disableCustomNearClipPlane(); + mHydrax->mDepthPlane->getParentNode()->translate(0,-mHydrax->mPlanesError,0); + } + + void Hydrax::setPerlinOptions(PerlinOptions PerlinOptions) + { + mPerlinOptions = PerlinOptions; + + if (isCreated()) + { + LOG("[Hydrax] Updating perlin options."); + + Ogre::TextureManager::getSingleton().remove("HydraxHeight"); + Ogre::TextureManager::getSingleton().remove("HydraxNormalMap"); + + mNoiseBuffer.clear(); + + _createTextures(); + _updateTextures(0); + + LOG("[Hydrax] Perlin options updated."); + } + } + + void Hydrax::setMeshOptions(MeshOptions MeshOptions) + { + if (isCreated()) + { + Ogre::String MaterialNameTmp = mMesh->getMaterialName(); + + LOG("[Hydrax] Updating water mesh."); + LOG("[Hydrax] Deleting water mesh."); + + delete mMesh; + + LOG("[Hydrax] Water mesh deleted."); + + LOG("[Hydrax] Creating water mesh."); + mMesh = new Mesh(mSceneManager); + mMesh->setMeshOptions(MeshOptions); + mMesh->setMaterialName(MaterialNameTmp); + mMesh->create(mSceneNode); + setPosition(mPosition); + mMesh->update(mNoiseBuffer[2]); + LOG("[Hydrax] Water mesh created"); + + return; + } + + mMesh->setMeshOptions(MeshOptions); + } + + void Hydrax::setRttOptions(RttOptions RttOptions) + { + mRttOptions = RttOptions; + + if (isCreated()) + { + LOG("[Hydrax] Updating Rtt options."); + + Ogre::RenderTarget* mRT_TextureRefraction = mTextureRefraction->getBuffer()->getRenderTarget(); + mRT_TextureRefraction->removeAllListeners(); + mRT_TextureRefraction->removeAllViewports(); + + Ogre::RenderTarget* mRT_TextureReflection = mTextureReflection->getBuffer()->getRenderTarget(); + mRT_TextureReflection->removeAllListeners(); + mRT_TextureReflection->removeAllViewports(); + + if (isComponent(HYDRAX_COMPONENT_DEPTH)) + { + Ogre::RenderTarget* mRT_TextureDepth = mTextureDepth->getBuffer()->getRenderTarget(); + mRT_TextureDepth->removeAllListeners(); + mRT_TextureDepth->removeAllViewports(); + + Ogre::TextureManager::getSingleton().remove("Depth"); + } + + Ogre::TextureManager::getSingleton().remove("Reflection"); + Ogre::TextureManager::getSingleton().remove("Refraction"); + + _createRttListeners(); + + LOG("[Hydrax] Rtt options updated."); + } + } + + void Hydrax::setPolygonMode(int Tipe) + { + Ogre::MaterialPtr mat = Ogre::MaterialManager::getSingleton().getByName(mMesh->getMaterialName()); + + if (Tipe == 0) + { + mat->getTechnique(0)->getPass(0)->setPolygonMode(Ogre::PM_SOLID); + } + else if (Tipe == 1) + { + mat->getTechnique(0)->getPass(0)->setPolygonMode(Ogre::PM_WIREFRAME); + } + else if (Tipe == 2) + { + mat->getTechnique(0)->getPass(0)->setPolygonMode(Ogre::PM_POINTS); + } + } + + void Hydrax::update(Ogre::Real timeSinceLastFrame) + { + if (mVelocity == 0) + { + return; + } + + _updateTextures(timeSinceLastFrame); + mMesh->update(mNoiseBuffer[2]); + } + + void Hydrax::setComponents(HydraxComponent Components) + { + // Create/Delete depth rtt listeners if it's necesary + if (isCreated()) + { + if (isComponent(HYDRAX_COMPONENT_DEPTH)) + { + if (!(Components & HYDRAX_COMPONENT_DEPTH)) + { + _createDepthRttListener(false, true); + } + } + else + { + if (Components & HYDRAX_COMPONENT_DEPTH) + { + _createDepthRttListener(); + } + } + } + + mComponents = Components; + + /* Shaders: + + 1 - Standard + 2 - Standard, Sun + 3 - Standard, Foam + 4 - Standard, Sun, Foam + + 5 - Depth + 6 - Depth, Sun + 7 - Depth, Foam + 8 - Depth, Sun, Foam + + 9 - Depth, Smooth + 10 - Depth, Smooth, Sun + 11 - Depth, Smooth, Foam + 12 - Depth, Smooth, Sun, Foam + + 13 - Depth, Caustics + 14 - Depth, Sun, Caustics + 15 - Depth, Foam, Caustics + 16 - Depth, Sun, Foam, Caustics + + 17 - Depth, Smooth, Caustics + 18 - Depth, Smooth, Sun, Caustics + 19 - Depth, Smooth, Foam, Caustics + 20 - Depth, Smooth, Sun, Foam, Caustics + */ + + int Index = 1; + + if (isComponent(HYDRAX_COMPONENT_SUN)) + { + Index ++; + } + + if (isComponent(HYDRAX_COMPONENT_FOAM)) + { + Index += 2; + } + + if (isComponent(HYDRAX_COMPONENT_DEPTH)) + { + Index += 4; + } + + if (isComponent(HYDRAX_COMPONENT_SMOOTH) || isComponent(HYDRAX_COMPONENT_CAUSTICS)) + { + if (isComponent(HYDRAX_COMPONENT_DEPTH)) + { + Index += 4; + + if (isComponent(HYDRAX_COMPONENT_CAUSTICS)) + { + Index += 8; + } + } + else + { + // Delete smooth component: Mask flags can't be removed + // so we have to evaluate all posibilities + // and reasign components... + + if (isComponent(HYDRAX_COMPONENT_SUN) && + isComponent(HYDRAX_COMPONENT_FOAM) && + isComponent(HYDRAX_COMPONENT_PLSM2)) + { + mComponents = static_cast<HydraxComponent> + (HYDRAX_COMPONENT_SUN | + HYDRAX_COMPONENT_FOAM | + HYDRAX_COMPONENT_PLSM2); + } + else + if (isComponent(HYDRAX_COMPONENT_SUN) && + isComponent(HYDRAX_COMPONENT_FOAM)) + { + mComponents = static_cast<HydraxComponent> + (HYDRAX_COMPONENT_SUN | + HYDRAX_COMPONENT_FOAM); + } + else + if (isComponent(HYDRAX_COMPONENT_SUN) && + isComponent(HYDRAX_COMPONENT_PLSM2)) + { + mComponents = static_cast<HydraxComponent> + (HYDRAX_COMPONENT_SUN | + HYDRAX_COMPONENT_PLSM2); + } + else + if (isComponent(HYDRAX_COMPONENT_FOAM) && + isComponent(HYDRAX_COMPONENT_PLSM2)) + { + mComponents = static_cast<HydraxComponent> + (HYDRAX_COMPONENT_FOAM | + HYDRAX_COMPONENT_PLSM2); + } + else + if (isComponent(HYDRAX_COMPONENT_SUN)) + { + mComponents = static_cast<HydraxComponent> + (HYDRAX_COMPONENT_SUN); + } + else + if (isComponent(HYDRAX_COMPONENT_FOAM)) + { + mComponents = static_cast<HydraxComponent> + (HYDRAX_COMPONENT_FOAM); + } + else + if (isComponent(HYDRAX_COMPONENT_PLSM2)) + { + mComponents = static_cast<HydraxComponent> + (HYDRAX_COMPONENT_PLSM2); + } + + LOG("[Hydrax] Requested component needs depth component... requested component desactivated."); + } + } + + mMesh->setMaterialName(Ogre::String("HydraxShader"+Ogre::StringConverter::toString(Index))); + } + + bool Hydrax::isComponent(HydraxComponent Component) + { + if (mComponents & Component) + { + return true; + } + + if (Component == HYDRAX_COMPONENTS_NONE && mComponents == HYDRAX_COMPONENTS_NONE) + { + ... [truncated message content] |
From: <and...@us...> - 2008-02-16 01:41:23
|
Revision: 569 http://python-ogre.svn.sourceforge.net/python-ogre/?rev=569&view=rev Author: andy_miller Date: 2008-02-15 17:41:26 -0800 (Fri, 15 Feb 2008) Log Message: ----------- ThirdParty cleanups Added Paths: ----------- trunk/python-ogre/ThirdParty/ogreal/OgreALMemberFunctionPointer.h Removed Paths: ------------- trunk/python-ogre/ThirdParty/caelum/EarthSunPositionModel.cpp trunk/python-ogre/ThirdParty/caelum/EarthSunPositionModel.h trunk/python-ogre/ThirdParty/caelum/SimpleSunPositionModel.cpp trunk/python-ogre/ThirdParty/caelum/SimpleSunPositionModel.h trunk/python-ogre/ThirdParty/caelum/SunPositionModel.h trunk/python-ogre/ThirdParty/quickgui/QuickGUIPrerequisites.h trunk/python-ogre/ThirdParty/quickgui/QuickGUIUtility.cpp trunk/python-ogre/ThirdParty/quickgui/QuickGUIUtility.h Deleted: trunk/python-ogre/ThirdParty/caelum/EarthSunPositionModel.cpp =================================================================== --- trunk/python-ogre/ThirdParty/caelum/EarthSunPositionModel.cpp 2008-02-16 01:38:02 UTC (rev 568) +++ trunk/python-ogre/ThirdParty/caelum/EarthSunPositionModel.cpp 2008-02-16 01:41:26 UTC (rev 569) @@ -1,88 +0,0 @@ -/* -This file is part of Caelum. -See http://www.ogre3d.org/wiki/index.php/Caelum - -Copyright (c) 2006-2007 Caelum team. See Contributors.txt for details. - -Caelum is free software: you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published -by the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -Caelum is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with Caelum. If not, see <http://www.gnu.org/licenses/>. -*/ - -#include "CaelumPrecompiled.h" -#include "EarthSunPositionModel.h" - -namespace caelum { - -EarthSunPositionModel::EarthSunPositionModel (const Ogre::Radian lat, const Ogre::Real date) { - setLatitude (lat); - setJulianDate (date); -} - -void EarthSunPositionModel::setLatitude (const Ogre::Radian lat) { - mLatitude = lat; -} - -Ogre::Radian EarthSunPositionModel::getLatitude () const { - return mLatitude; -} - -void EarthSunPositionModel::setJulianDate (const Ogre::Real date) { - mJulianDate = date; -} - -Ogre::Real EarthSunPositionModel::getJulianDate () const { - return mJulianDate; -} - -Ogre::Vector3 EarthSunPositionModel::update (const float time) { - Ogre::Radian declination, zenith, azimuth; // Variables - Ogre::Real x, y, sinL, sinDelta, sinTime, cosL, cosDelta, cosTime, twoPi; // Recurrent values (speed up calculations) - - twoPi = 2 * Ogre::Math::PI; - - declination = Ogre::Radian (0.4093 * Ogre::Math::Sin ((twoPi * (mJulianDate * 365 - 81)) / 368.0)); - - sinL = Ogre::Math::Sin (mLatitude); - cosL = Ogre::Math::Cos (mLatitude); - sinDelta = Ogre::Math::Sin (declination); - cosDelta = Ogre::Math::Cos (declination); - sinTime = Ogre::Math::Sin (twoPi * time); - cosTime = Ogre::Math::Cos (twoPi * time); - - x = (cosL * sinDelta - sinL * cosDelta * cosTime); - y = -cosDelta * sinTime; - - zenith = Ogre::Radian (Ogre::Math::PI * 0.5) - Ogre::Math::ASin (sinL * sinDelta + cosL * cosDelta * cosTime); - azimuth = Ogre::Math::ATan (y / x); - - if (x < 0) - azimuth += Ogre::Radian (Ogre::Math::PI); - else if (y < 0 && x > 0) - azimuth += Ogre::Radian (twoPi); - - Ogre::Vector3 dir = Ogre::Vector3::UNIT_Y; - Ogre::Quaternion rotZen, rotAzi; - - rotZen = Ogre::Quaternion (zenith, Ogre::Vector3::UNIT_X); - rotAzi = Ogre::Quaternion (azimuth, Ogre::Vector3::UNIT_Y); - - dir = rotAzi * (rotZen * dir); - - mSunPosition = dir.normalisedCopy () * -1; - - mSunPosition.z *= -1; - - return mSunPosition; -} - -} // namespace caelum Deleted: trunk/python-ogre/ThirdParty/caelum/EarthSunPositionModel.h =================================================================== --- trunk/python-ogre/ThirdParty/caelum/EarthSunPositionModel.h 2008-02-16 01:38:02 UTC (rev 568) +++ trunk/python-ogre/ThirdParty/caelum/EarthSunPositionModel.h 2008-02-16 01:41:26 UTC (rev 569) @@ -1,80 +0,0 @@ -/* -This file is part of Caelum. -See http://www.ogre3d.org/wiki/index.php/Caelum - -Copyright (c) 2006-2007 Caelum team. See Contributors.txt for details. - -Caelum is free software: you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published -by the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -Caelum is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with Caelum. If not, see <http://www.gnu.org/licenses/>. -*/ - -#ifndef EARTHSUNPOSITIONMODEL_H -#define EARTHSUNPOSITIONMODEL_H - -#include "CaelumPrerequisites.h" -#include "SunPositionModel.h" - -namespace caelum { - -/** The simplified Sun position model for the earth. - Based on experimental data and some simplifications (forumlas taken from the paper - "A Practical Analytic Model for Daylight", by Preetham et al.) - @author Jesús Alonso Abad. - */ -class DllExport EarthSunPositionModel : public SunPositionModel { -// Attributes ----------------------------------------------------------------- - protected: - /// Latitude - Ogre::Radian mLatitude; - - /// Julian date - Ogre::Real mJulianDate; - -// Methods -------------------------------------------------------------------- - public: - /** Basic constructor. - * @param lat The latitude (in radians). - * @param date The Julian date in the range [0, 1] (Jan 1st - Dec 31st respectively). - * Values above will be wrapped and below will be treated as positive. - */ - EarthSunPositionModel (const Ogre::Radian lat, const Ogre::Real date); - - /** Changes the current latitude. - * @param lat The new latitude in radians. - */ - void setLatitude (const Ogre::Radian lat); - - /** Gets the current latitude. - * @return The latitude in radians. - */ - Ogre::Radian getLatitude () const; - - /** Changes the Julian date. - * @param date The current Julian date in the range [0, 1] (Jan 1st - Dec 31st Respectively). - * Values above will be wrapped and below will be treated as positive. - */ - void setJulianDate (const Ogre::Real date); - - /** Gets the Julian date. - * @return The Julian date in the range [0, 1]. - */ - Ogre::Real getJulianDate () const; - - /** @copydoc SunPositionModel::update(). - */ - Ogre::Vector3 update (const float time); -}; - -} // namespace caelum - -#endif // EARTHSUNPOSITIONMODEL_H Deleted: trunk/python-ogre/ThirdParty/caelum/SimpleSunPositionModel.cpp =================================================================== --- trunk/python-ogre/ThirdParty/caelum/SimpleSunPositionModel.cpp 2008-02-16 01:38:02 UTC (rev 568) +++ trunk/python-ogre/ThirdParty/caelum/SimpleSunPositionModel.cpp 2008-02-16 01:41:26 UTC (rev 569) @@ -1,52 +0,0 @@ -/* -This file is part of Caelum. -See http://www.ogre3d.org/wiki/index.php/Caelum - -Copyright (c) 2006-2007 Caelum team. See Contributors.txt for details. - -Caelum is free software: you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published -by the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -Caelum is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with Caelum. If not, see <http://www.gnu.org/licenses/>. -*/ - -#include "CaelumPrecompiled.h" -#include "SimpleSunPositionModel.h" - -namespace caelum { - -SimpleSunPositionModel::SimpleSunPositionModel (Ogre::Degree inc) { - setInclination (inc); -} - -void SimpleSunPositionModel::setInclination (Ogre::Degree inc) { - mInclination = inc; -} - -Ogre::Degree SimpleSunPositionModel::getInclination () const { - return mInclination; -} - -Ogre::Vector3 SimpleSunPositionModel::update (const float time) { - // Get the inclinated axis - Ogre::Vector3 axis = Ogre::Vector3::UNIT_Z; - axis = Ogre::Quaternion (mInclination, Ogre::Vector3::UNIT_X) * axis; - - // Get the inclinated light direction, according to the day time - Ogre::Vector3 dir = Ogre::Vector3::UNIT_Y; - dir = Ogre::Quaternion (Ogre::Radian (time * 2 * Ogre::Math::PI), axis) * dir; - - mSunPosition = dir.normalisedCopy () * -1; - - return mSunPosition * -1; -} - -} // namespace caelum Deleted: trunk/python-ogre/ThirdParty/caelum/SimpleSunPositionModel.h =================================================================== --- trunk/python-ogre/ThirdParty/caelum/SimpleSunPositionModel.h 2008-02-16 01:38:02 UTC (rev 568) +++ trunk/python-ogre/ThirdParty/caelum/SimpleSunPositionModel.h 2008-02-16 01:41:26 UTC (rev 569) @@ -1,64 +0,0 @@ -/* -This file is part of Caelum. -See http://www.ogre3d.org/wiki/index.php/Caelum - -Copyright (c) 2006-2007 Caelum team. See Contributors.txt for details. - -Caelum is free software: you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published -by the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -Caelum is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with Caelum. If not, see <http://www.gnu.org/licenses/>. -*/ - -#ifndef SIMPLESUNPOSITIONMODEL_H -#define SIMPLESUNPOSITIONMODEL_H - -#include "CaelumPrerequisites.h" -#include "SunPositionModel.h" - -namespace caelum { - -/** A simple circular sun position model. - It just creates an inclinated circular orbit. - @author Jesús Alonso Abad. - */ -class DllExport SimpleSunPositionModel : public SunPositionModel { -// Attributes ----------------------------------------------------------------- - protected: - /** The sun trajectory inclination. This is similar to the earth's rotation axis inclination. - */ - Ogre::Degree mInclination; - -// Methods -------------------------------------------------------------------- - public: - /** Basic constructor. - @param inc The orbit inclination. - */ - SimpleSunPositionModel (Ogre::Degree inc); - - /** Changes the orbit inclination. - @param inc The inclination in degrees. - */ - void setInclination (Ogre::Degree inc); - - /** Gets the orbit inclination. - @return The orbit inclination in degrees. - */ - Ogre::Degree getInclination () const; - - /** @copydoc SunPositionModel::update(). - */ - Ogre::Vector3 update (const float time); -}; - -} // namespace caelum - -#endif // SIMPLESUNPOSITIONMODEL_H Deleted: trunk/python-ogre/ThirdParty/caelum/SunPositionModel.h =================================================================== --- trunk/python-ogre/ThirdParty/caelum/SunPositionModel.h 2008-02-16 01:38:02 UTC (rev 568) +++ trunk/python-ogre/ThirdParty/caelum/SunPositionModel.h 2008-02-16 01:41:26 UTC (rev 569) @@ -1,56 +0,0 @@ -/* -This file is part of Caelum. -See http://www.ogre3d.org/wiki/index.php/Caelum - -Copyright (c) 2006-2007 Caelum team. See Contributors.txt for details. - -Caelum is free software: you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published -by the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -Caelum is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with Caelum. If not, see <http://www.gnu.org/licenses/>. -*/ - -#ifndef SUNPOSITIONMODEL_H -#define SUNPOSITIONMODEL_H - -#include "CaelumPrerequisites.h" - -namespace caelum { - -/** Interface for all the sun positioning models. - A sun position model is a configurable utility/model that will return sun's sky coordinates (direction/azimuth in the - form of a normalised vector) depending on various parameters. - These models can range from a simple circular (sin/cos) oscillation, to complex equations for accurate positioning. - @author Jesús Alonso Abad. - */ -class DllExport SunPositionModel { -// Attributes ----------------------------------------------------------------- - protected: - /** The last calculated sun position. - */ - Ogre::Vector3 mSunPosition; - -// Methods -------------------------------------------------------------------- - public: - /** Destructor - */ - virtual ~SunPositionModel () {}; - - /** Updates the sun position. - @param time Local time. - @return The sun light direction (or the negated sun position). - */ - virtual Ogre::Vector3 update (const float time) = 0; -}; - -} // namespace caelum - -#endif // SUNPOSITIONMODEL_H Added: trunk/python-ogre/ThirdParty/ogreal/OgreALMemberFunctionPointer.h =================================================================== --- trunk/python-ogre/ThirdParty/ogreal/OgreALMemberFunctionPointer.h (rev 0) +++ trunk/python-ogre/ThirdParty/ogreal/OgreALMemberFunctionPointer.h 2008-02-16 01:41:26 UTC (rev 569) @@ -0,0 +1,45 @@ +#ifndef _OGREAL_MEMBER_FUNCTION_POINTER_H_ +#define _OGREAL_MEMBER_FUNCTION_POINTER_H_ + +#include "OgreALPrereqs.h" + +namespace OgreAL { + // Predeclare so we don't need to include OgreALSound.h + class Sound; + + class OgreAL_Export MemberFunctionSlot + { + public: + virtual ~MemberFunctionSlot(){}; + virtual void execute(Sound* source) = 0; + }; + + template<typename T> + class MemberFunctionPointer : public MemberFunctionSlot + { + public: + typedef void (T::*MemberFunction)(Sound* source); + + MemberFunctionPointer() : mUndefined(true){} + + MemberFunctionPointer(MemberFunction func, T* obj) : + mFunction(func), + mObject(obj), + mUndefined(false) + {} + + virtual ~MemberFunctionPointer(){} + + void execute(Sound* source) + { + if(!mUndefined) + (mObject->*mFunction)(source); + } + + protected: + MemberFunction mFunction; + T* mObject; + bool mUndefined; + }; +} // Namespace +#endif Deleted: trunk/python-ogre/ThirdParty/quickgui/QuickGUIPrerequisites.h =================================================================== --- trunk/python-ogre/ThirdParty/quickgui/QuickGUIPrerequisites.h 2008-02-16 01:38:02 UTC (rev 568) +++ trunk/python-ogre/ThirdParty/quickgui/QuickGUIPrerequisites.h 2008-02-16 01:41:26 UTC (rev 569) @@ -1,88 +0,0 @@ -#ifndef __QUICKPREQUISITES_H -#define __QUICKPREQUISITES_H - -#include "Ogre.h" -#include "QuickGUIExportDLL.h" - -namespace QuickGUI -{ - ////////////DRAWING///////////// - #define VERTICES_PER_QUAD 6 - - class Rect; - class Point; - class Size; - - struct Vertex; - class VertexBuffer; - class QuadContainer; - class Quad; - - // Stores the Texture of a quad, and the index of the first quad following it with a different texture. - typedef std::pair<Ogre::String,unsigned int > TextureQuadIndex; - typedef std::vector<TextureQuadIndex > TextureChangeList; - - typedef std::list<Quad*> QuadList; - typedef std::vector<Quad*> QuadArray; - - typedef std::list<QuadContainer*> QuadContainerList; - - ////////////EVENTS///////////// - class MemberFunctionSlot; - class EventArgs; - class WidgetEventArgs; - class MouseEventArgs; - - typedef std::vector<MemberFunctionSlot*> EventHandlerArray; - - ////////////UTILS///////////// - class MouseCursor; - class Utility; - class ConfigScriptLoader; - - ////////////Handlers///////////// - class GUIManager; - class Sheet; - class SkinSet; - - ////////////Effects///////////// - class Effect; - class AlphaEffect; - class MoveEffect; - class SizeEffect; - - ////////////Widgets///////////// - class Widget; - typedef std::vector<Widget*> WidgetArray; - - class Window; - - class Image; - class Panel; - class Border; - class ScrollPane; - class Button; - class NStateButton; - - class Text; - class Label; - class MenuLabel; - class LabelArea; - class TextBox; - class Console; - class TextArea; - class TextBox; - - class List; - class ComboBox; - class TitleBar; - class Tree; - - class ProgressBar; - class HorizontalTrackBar; - class VerticalTrackBar; - class VerticalScrollBar; - class HorizontalScrollBar; - -} -#endif //__QUICKPREQUISITES_H Deleted: trunk/python-ogre/ThirdParty/quickgui/QuickGUIUtility.cpp =================================================================== --- trunk/python-ogre/ThirdParty/quickgui/QuickGUIUtility.cpp 2008-02-16 01:38:02 UTC (rev 568) +++ trunk/python-ogre/ThirdParty/quickgui/QuickGUIUtility.cpp 2008-02-16 01:41:26 UTC (rev 569) @@ -1,88 +0,0 @@ -#include "QuickGUIPrecompiledHeaders.h" - -#include "QuickGUIUtility.h" - -namespace QuickGUI -{ - Utility::Utility() - { - } - - Utility::~Utility() - { - } - - Ogre::Vector4 Utility::getImageBounds(const Ogre::Image& i) - { - size_t left = i.getWidth(); - size_t right = 0; - size_t top = i.getHeight(); - size_t bottom = 0; - - const Ogre::PixelBox& pb = i.getPixelBox(); - - // Pointers to the pixel data of the bar, and the destination image - Ogre::uint8* ptr = static_cast<Ogre::uint8*>(pb.data); - - // iterate through pixel by pixel, to determine the min/max bar bounds. - for( size_t row = 0; row < i.getHeight(); ++row ) - { - for( size_t col = 0; col < i.getWidth(); col++ ) - { - // skip R,B,G channels - ptr += 3; - // check for non zero alpha value - if(*ptr++ > 0) - { - if( col < left ) - left = col; - if( col > right ) - right = col; - if( row < top ) - top = row; - if( row > bottom ) - bottom = row; - } - } - } - - return Ogre::Vector4(left,top,right,bottom); - } - - bool Utility::isImageFile(const Ogre::String& fileName) - { - Ogre::String::size_type index = fileName.find_last_of('.'); - if( index != Ogre::String::npos ) - { - Ogre::String extension = fileName.substr(index + 1); - Ogre::StringUtil::toLowerCase(extension); - - Ogre::StringVector supportedImageCodecs = Ogre::Codec::getExtensions(); - - return (std::find(supportedImageCodecs.begin(),supportedImageCodecs.end(),extension) != supportedImageCodecs.end()); - } - - return false; - } - - bool Utility::textureExistsOnDisk(const Ogre::String& textureName) - { - if(textureName.empty()) - return false; - - if(!isImageFile(textureName)) - return false; - - Ogre::ResourceGroupManager* rgm = Ogre::ResourceGroupManager::getSingletonPtr(); - - Ogre::StringVector resourceGroups = rgm->getResourceGroups(); - Ogre::StringVector::iterator it; - for( it = resourceGroups.begin(); it != resourceGroups.end(); ++it ) - { - if(rgm->resourceExists((*it),textureName)) - return true; - } - - return false; - } -} Deleted: trunk/python-ogre/ThirdParty/quickgui/QuickGUIUtility.h =================================================================== --- trunk/python-ogre/ThirdParty/quickgui/QuickGUIUtility.h 2008-02-16 01:38:02 UTC (rev 568) +++ trunk/python-ogre/ThirdParty/quickgui/QuickGUIUtility.h 2008-02-16 01:41:26 UTC (rev 569) @@ -1,35 +0,0 @@ -#ifndef QUICKGUIUTILITY_H -#define QUICKGUIUTILITY_H - -#include "OgreCodec.h" -#include "OgreHardwarePixelBuffer.h" -#include "OgreImage.h" -#include "OgreResourceGroupManager.h" -#include "OgreVector4.h" - -#include "QuickGUIPrerequisites.h" -#include "QuickGUIExportDLL.h" - -namespace QuickGUI -{ - class _QuickGUIExport Utility - { - public: - Utility(); - ~Utility(); - - static Ogre::Vector4 getImageBounds(const Ogre::Image& i); - - static bool isImageFile(const Ogre::String& fileName); - - /* - * Returns true if the textureName represents an image file on disk. (ie *.png, *.jpg, etc) - */ - static bool textureExistsOnDisk(const Ogre::String& textureName); - - protected: - static Ogre::StringVector mSupportedImageCodecs; - }; -} - -#endif This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <and...@us...> - 2008-02-16 01:37:57
|
Revision: 568 http://python-ogre.svn.sourceforge.net/python-ogre/?rev=568&view=rev Author: andy_miller Date: 2008-02-15 17:38:02 -0800 (Fri, 15 Feb 2008) Log Message: ----------- Thirdparty Updates Added Paths: ----------- trunk/python-ogre/ThirdParty/caelum/Astronomy.cpp trunk/python-ogre/ThirdParty/caelum/Astronomy.h trunk/python-ogre/ThirdParty/caelum/CaelumPrerequisites.h.bak trunk/python-ogre/ThirdParty/caelum/SolarSystemModel.cpp trunk/python-ogre/ThirdParty/caelum/SolarSystemModel.h trunk/python-ogre/ThirdParty/nxogre/BetajaenCC.cpp trunk/python-ogre/ThirdParty/nxogre/BetajaenCC.h trunk/python-ogre/ThirdParty/nxogre/NxOgreActors.h trunk/python-ogre/ThirdParty/nxogre/NxOgreAllocator.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreAllocator.h trunk/python-ogre/ThirdParty/nxogre/NxOgreConfig.h trunk/python-ogre/ThirdParty/nxogre/NxOgreContactCallback.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreContactCallback.h trunk/python-ogre/ThirdParty/nxogre/NxOgreContactCallbackController.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreContactCallbackController.h trunk/python-ogre/ThirdParty/nxogre/NxOgreDualIdentifier.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreDualIdentifier.h trunk/python-ogre/ThirdParty/nxogre/NxOgreDynamicMesh.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreDynamicMesh.h trunk/python-ogre/ThirdParty/nxogre/NxOgreEffectsSystem.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreEffectsSystem.h trunk/python-ogre/ThirdParty/nxogre/NxOgreFileResourceStream.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreFileResourceStream.h trunk/python-ogre/ThirdParty/nxogre/NxOgreInflatable.h trunk/python-ogre/ThirdParty/nxogre/NxOgreJointCallback.h trunk/python-ogre/ThirdParty/nxogre/NxOgreMeshRenderable.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreMeshRenderable.h trunk/python-ogre/ThirdParty/nxogre/NxOgreNXM.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreNXM.h trunk/python-ogre/ThirdParty/nxogre/NxOgreOBJStream.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreOBJStream.h trunk/python-ogre/ThirdParty/nxogre/NxOgreOgreMesh.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreOgreMesh.h trunk/python-ogre/ThirdParty/nxogre/NxOgreOgreMeshRenderable.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreOgreMeshRenderable.h trunk/python-ogre/ThirdParty/nxogre/NxOgreOgreResourceStream.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreOgreResourceStream.h trunk/python-ogre/ThirdParty/nxogre/NxOgreOgreTimeController.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreOgreTimeController.h trunk/python-ogre/ThirdParty/nxogre/NxOgrePlatform.h trunk/python-ogre/ThirdParty/nxogre/NxOgreResourceManager_Cloth.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreSheet.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreSheet.h trunk/python-ogre/ThirdParty/nxogre/NxOgreSimpleActor.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreSimpleActor.h trunk/python-ogre/ThirdParty/nxogre/NxOgreSleepCallback.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreSleepCallback.h trunk/python-ogre/ThirdParty/nxogre/NxOgreThrow.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreTimeController.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreTimeController.h trunk/python-ogre/ThirdParty/nxogre/NxOgreTransitionalMesh.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreTransitionalMesh.h trunk/python-ogre/ThirdParty/nxogre/NxOgreTriggerCallback.cpp trunk/python-ogre/ThirdParty/nxogre/NxOgreTriggerCallback.h trunk/python-ogre/ThirdParty/quickgui/QuickGUIExportDLL.h.bak trunk/python-ogre/ThirdParty/quickgui/QuickGUIForwardDeclarations.h trunk/python-ogre/ThirdParty/quickgui/QuickGUIRadioButton.cpp trunk/python-ogre/ThirdParty/quickgui/QuickGUIRadioButton.h trunk/python-ogre/ThirdParty/quickgui/QuickGUIRadioButtonGroup.cpp trunk/python-ogre/ThirdParty/quickgui/QuickGUIRadioButtonGroup.h trunk/python-ogre/ThirdParty/quickgui/QuickGUITypedef.h trunk/python-ogre/ThirdParty/quickgui/QuickGUIVector4.cpp trunk/python-ogre/ThirdParty/quickgui/QuickGUIVector4.h Added: trunk/python-ogre/ThirdParty/caelum/Astronomy.cpp =================================================================== --- trunk/python-ogre/ThirdParty/caelum/Astronomy.cpp (rev 0) +++ trunk/python-ogre/ThirdParty/caelum/Astronomy.cpp 2008-02-16 01:38:02 UTC (rev 568) @@ -0,0 +1,240 @@ +/* +This file is part of Caelum. +See http://www.ogre3d.org/wiki/index.php/Caelum + +Copyright (c) 2008 Caelum team. See Contributors.txt for details. + +Caelum is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published +by the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +Caelum is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with Caelum. If not, see <http://www.gnu.org/licenses/>. +*/ + +#include "CaelumPrecompiled.h" +#include "Astronomy.h" + +using Ogre::Degree; +using Ogre::Radian; +using Ogre::Math; + +namespace caelum +{ + const Ogre::Degree Astronomy::normalizeAngle (Ogre::Degree value) + { + value = fmod (value.valueDegrees (), 360); + if (value < Degree (0)) { + value += Degree (360); + } + return value; + } + + void Astronomy::convertRectangularToSpherical ( + LongReal x, LongReal y, LongReal z, + Degree &rasc, Degree &decl, LongReal &dist) + { + dist = Math::Sqrt (x * x + y * y + z * z); + rasc = Math::ATan2 (y, x); + decl = Math::ATan2 (z, Math::Sqrt (x * x + y * y)); + } + + void Astronomy::convertSphericalToRectangular ( + Degree rasc, Degree decl, LongReal dist, + LongReal &x, LongReal &y, LongReal &z) + { + x = dist * Math::Cos (rasc) * Math::Cos (decl); + y = dist * Math::Sin (rasc) * Math::Cos (decl); + z = dist * Math::Sin (decl); + } + + void Astronomy::convertEquatorialToHorizontal ( + LongReal jday, + Degree longitude, Degree latitude, + Degree rasc, Degree decl, + Degree &azimuth, Degree &altitude) + { + LongReal d = jday - 2451543.5; + Degree w = Degree (282.9404 + 4.70935E-5 * d); + Degree M = Degree (356.0470 + 0.9856002585 * d); + // Sun's mean longitude + Degree L = w + M; + // Universal time of day in degrees. + Degree UT = Degree(fmod(d, 1) * 360); + Degree hourAngle = longitude + L + Degree (180) + UT - rasc; + + LongReal x = Math::Cos (hourAngle) * Math::Cos (decl); + LongReal y = Math::Sin (hourAngle) * Math::Cos (decl); + LongReal z = Math::Sin (decl); + + LongReal xhor = x * Math::Sin (latitude) - z * Math::Cos (latitude); + LongReal yhor = y; + LongReal zhor = x * Math::Cos (latitude) + z * Math::Sin (latitude); + + azimuth = Math::ATan2 (yhor, xhor) + Degree (180); + altitude = Math::ATan2 (zhor, Math::Sqrt (xhor * xhor + yhor * yhor)); + } + + void Astronomy::getHorizontalSunPosition ( + LongReal jday, + Ogre::Degree longitude, Ogre::Degree latitude, + Ogre::Degree &azimuth, Ogre::Degree &altitude) + { + // Midnight at the start of 31 december 2000 + // 2451543.5 == Astronomy::getJulianDayFromGregorianDateTime(1999, 12, 31, 0, 0, 0)); + LongReal d = jday - 2451543.5; + + // Sun's Orbital elements: + // argument of perihelion + Degree w = Degree (282.9404 + 4.70935E-5 * d); + // eccentricity (0=circle, 0-1=ellipse, 1=parabola) + LongReal e = 0.016709 - 1.151E-9 * d; + // mean anomaly (0 at perihelion; increases uniformly with time) + Degree M = Degree(356.0470 + 0.9856002585 * d); + // Obliquity of the ecliptic. + Degree oblecl = Degree (23.4393 - 3.563E-7 * d); + + // Eccentric anomaly + Degree E = M + Radian(e * Math::Sin (M) * (1 + e * Math::Cos (M))); + + // Sun's Distance(R) and true longitude(L) + LongReal xv = Math::Cos (E) - e; + LongReal yv = Math::Sin (E) * Math::Sqrt (1 - e * e); + LongReal r = Math::Sqrt (xv * xv + yv * yv); + Degree lon = Math::ATan2 (yv, xv) + w; + + // Ecliptic rectangular. + LongReal xecl = r * Math::Cos(lon); + LongReal yecl = r * Math::Sin(lon); + LongReal zecl = 0; + + // Equatorial rectangular. + LongReal xequ = xecl; + LongReal yequ = yecl * Math::Cos (oblecl) - zecl * Math::Sin (oblecl); + LongReal zequ = yecl * Math::Sin (oblecl) + zecl * Math::Cos (oblecl); + + // Equatorial spherical. + Degree rasc, decl; + Astronomy::convertRectangularToSpherical (xequ, yequ, zequ, rasc, decl, r); + + // Horizontal spherical. + Astronomy::convertEquatorialToHorizontal ( + jday, longitude, latitude, rasc, decl, azimuth, altitude); + } + + int Astronomy::getJulianDayFromGregorianDate( + int year, int month, int day) + { + // Formulas from http://en.wikipedia.org/wiki/Julian_day + // These are all integer divisions, but I'm not sure it works + // correctly for negative values. + int a = (14 - month) / 12; + int y = year + 4800 - a; + int m = month + 12 * a - 3; + return day + (153 * m + 2) / 5 + 365 * y + y / 4 - y / 100 + y / 400 - 32045; + } + + LongReal Astronomy::getJulianDayFromGregorianDateTime( + int year, int month, int day, + int hour, int minute, LongReal second) + { + int fpmode = Astronomy::enterHighPrecissionFloatingPointMode (); + + int jdn = getJulianDayFromGregorianDate (year, month, day); + // These are NOT integer divisions. + LongReal jd = jdn + (hour - 12) / 24.0 + minute / 1440.0 + second / 86400.0; + + Astronomy::restoreFloatingPointMode(fpmode); + return jd; + } + + LongReal Astronomy::getJulianDayFromGregorianDateTime( + int year, int month, int day, + LongReal secondsFromMidnight) + { + int jdn = getJulianDayFromGregorianDate(year, month, day); + LongReal jd = jdn + secondsFromMidnight / 86400.0 - 0.5; + return jd; + } + + void Astronomy::getGregorianDateFromJulianDay( + int julianDay, int &year, int &month, int &day) + { + // From http://en.wikipedia.org/wiki/Julian_day + int J = julianDay; + int j = J + 32044; + int g = j / 146097; + int dg = j % 146097; + int c = (dg / 36524 + 1) * 3 / 4; + int dc = dg - c * 36524; + int b = dc / 1461; + int db = dc % 1461; + int a = (db / 365 + 1) * 3 / 4; + int da = db - a * 365; + int y = g * 400 + c * 100 + b * 4 + a; + int m = (da * 5 + 308) / 153 - 2; + int d = da - (m + 4) * 153 / 5 + 122; + year = y - 4800 + (m + 2) / 12; + month = (m + 2) % 12 + 1; + day = d + 1; + } + + void Astronomy::getGregorianDateTimeFromJulianDay( + LongReal julianDay, int &year, int &month, int &day, + int &hour, int &minute, LongReal &second) + { + // Integer julian days are at noon. + // static_cast<int)(floor( is more precise than Ogre::Math::IFloor. + // Yes, it does matter. + int ijd = static_cast<int>(floor(julianDay + 0.5)); + getGregorianDateFromJulianDay(ijd, year, month, day); + + LongReal s = (julianDay + 0.5 - ijd) * 86400.0; + hour = static_cast<int>(floor(s / 3600)); + s -= hour * 3600; + minute = static_cast<int>(floor(s / 60)); + s -= minute * 60; + second = s; + } + + void Astronomy::getGregorianDateFromJulianDay( + LongReal julianDay, int &year, int &month, int &day) + { + int hour; + int minute; + LongReal second; + getGregorianDateTimeFromJulianDay(julianDay, year, month, day, hour, minute, second); + } + +#if (OGRE_PLATFORM == OGRE_PLATFORM_WIN32) && (OGRE_COMPILER == OGRE_COMPILER_MSVC) + int Astronomy::enterHighPrecissionFloatingPointMode () + { + int oldMode = ::_controlfp (0, 0); + ::_controlfp (_PC_64, _MCW_PC); + return oldMode; + } + + void Astronomy::restoreFloatingPointMode (int oldMode) + { + ::_controlfp (oldMode, _MCW_PC); + } +#else + void Astronomy::enterHighPrecissionFloatingPointMode () + { + // Meaningless + return 0xC0FFEE; + } + + void Astronomy::restoreFloatingPointMode (int oldMode) + { + // Useless check. + assert(oldMode == 0xC0FFEE); + } +#endif +} Added: trunk/python-ogre/ThirdParty/caelum/Astronomy.h =================================================================== --- trunk/python-ogre/ThirdParty/caelum/Astronomy.h (rev 0) +++ trunk/python-ogre/ThirdParty/caelum/Astronomy.h 2008-02-16 01:38:02 UTC (rev 568) @@ -0,0 +1,154 @@ +/* +This file is part of Caelum. +See http://www.ogre3d.org/wiki/index.php/Caelum + +Copyright (c) 2008 Caelum team. See Contributors.txt for details. + +Caelum is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published +by the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +Caelum is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with Caelum. If not, see <http://www.gnu.org/licenses/>. +*/ + +#ifndef ASTRONOMY_H +#define ASTRONOMY_H + +#include "CaelumPrerequisites.h" + +namespace caelum +{ + /** Static class with astronomy routines. + * This class contains various astronomical routines useful in Caelum. + * + * Most of the formulas are from http://stjarnhimlen.se/comp/ppcomp.html + * That site contains much more than was implemented here; it has code + * for determining the positions of all the planets. Only the sun and + * moon are actually useful for caelum. + * + * The formulas are isolated here in pure procedural code for easier + * testing (Tests are done as assert in the demo). + * + * Precision is vital here, and this class should be converted to use + * caelum::LongReal instead of Ogre::Real and Ogre::Degree. + */ + class DllExport Astronomy + { + private: + Astronomy() {} + + public: + /** Normalize an angle to the 0, 360 range. + * @param x The angle to normalize + */ + static const Ogre::Degree normalizeAngle(Ogre::Degree x); + + static void convertRectangularToSpherical ( + LongReal x, LongReal y, LongReal z, + Ogre::Degree &rasc, Ogre::Degree &decl, LongReal &dist); + + static void convertSphericalToRectangular ( + Ogre::Degree rasc, Ogre::Degree decl, LongReal dist, + LongReal &x, LongReal &y, LongReal &z); + + /** Convert from equatorial to horizontal coordinates. + * This function converts from angles relative to the earth's equator + * to angle relative to the horizon at a given point. + * @param jday Astronomical time as julian day. + * @param longitude Observer's longitude in degrees east. + * @param latitude Observer's latitude in degrees north. + * @param rasc Object's right ascension. + * @param decl Object's declination. + * @param azimuth Object's azimuth (clockwise degrees from true north). + * @param altitude Object's altitude (degrees above the horizon). + */ + static void convertEquatorialToHorizontal ( + LongReal jday, + Ogre::Degree longitude, Ogre::Degree latitude, + Ogre::Degree rasc, Ogre::Degree decl, + Ogre::Degree &azimuth, Ogre::Degree &altitude); + + /** Get the sun's position in the sky in, relative to the horizon. + * @param jday Astronomical time as julian day. + * @param longitude Observer longitude + * @param latitude Observer latitude + * @param azimuth Astronomical azimuth, measured clockwise from North = 0. + * @param altitude Astronomical altitude, elevation above the horizon. + */ + static void getHorizontalSunPosition ( + LongReal jday, + Ogre::Degree longitude, Ogre::Degree latitude, + Ogre::Degree &azimuth, Ogre::Degree &altitude); + + /** Get astronomical julian day from normal gregorian calendar. + * From wikipedia: the integer number of days that have elapsed + * since the initial epoch defined as + * noon Universal Time (UT) Monday, January 1, 4713 BC + * @note this is the time at noon, not midnight. + */ + static int getJulianDayFromGregorianDate( + int year, int month, int day); + + /** Get astronomical julian day from normal gregorian calendar. + * Calculate julian day from a day in the normal gregorian calendar. + * Time should be given as UTC. + * @see http://en.wikipedia.org/wiki/Julian_day + */ + static LongReal getJulianDayFromGregorianDateTime( + int year, int month, int day, + int hour, int minute, LongReal second); + + /** Get astronomical julian day from normal gregorian calendar. + * @see above (I don't know the proper doxygen syntax). + */ + static LongReal getJulianDayFromGregorianDateTime( + int year, int month, int day, + LongReal secondsFromMidnight); + + /// Get gregorian date from integer julian day. + static void getGregorianDateFromJulianDay( + int julianDay, int &year, int &month, int &day); + + /// Get gregorian date time from floating point julian day. + static void getGregorianDateTimeFromJulianDay( + LongReal julianDay, int &year, int &month, int &day, + int &hour, int &minute, LongReal &second); + + /// Get gregorian date from floating point julian day. + static void getGregorianDateFromJulianDay( + LongReal julianDay, int &year, int &month, int &day); + + /** Enter high-precission floating-point mode. + * + * By default Direct3D decreases the precission of ALL floating + * point calculations, enough to stop Caelum's astronomy routines + * from working correctly. + * + * To trigger this behaviour in a standard ogre demo select the + * Direct3D render system and set "Floating-point mode" to + * "Fastest". Otherwise it's not a problem. + * + * It can be fixed by changing the precission only inside caelum's + * astronomy routines using the _controlfp function. This only works + * for MSVC on WIN32; This is a no-op on other compilers. + * + * @note: Must be paired with restoreFloatingPointMode. + * @return Value to pass to restoreFloatingModeMode. + */ + static int enterHighPrecissionFloatingPointMode (); + + /** Restore old floating point precission. + * @see enterHighPrecissionFloatingPointMode. + */ + static void restoreFloatingPointMode (int oldMode); + }; +} + +#endif // SOLARSYSTEMMODEL_H \ No newline at end of file Added: trunk/python-ogre/ThirdParty/caelum/CaelumPrerequisites.h.bak =================================================================== --- trunk/python-ogre/ThirdParty/caelum/CaelumPrerequisites.h.bak (rev 0) +++ trunk/python-ogre/ThirdParty/caelum/CaelumPrerequisites.h.bak 2008-02-16 01:38:02 UTC (rev 568) @@ -0,0 +1,71 @@ +/* +This file is part of Caelum. +See http://www.ogre3d.org/wiki/index.php/Caelum + +Copyright (c) 2006-2008 Caelum team. See Contributors.txt for details. + +Caelum is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published +by the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +Caelum is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with Caelum. If not, see <http://www.gnu.org/licenses/>. +*/ + +#ifndef CAELUMPREREQUISITES_H +#define CAELUMPREREQUISITES_H + +// Include external headers +#include "Ogre.h" + +// Define the dll export qualifier if compiling for Windows +#if OGRE_PLATFORM == OGRE_PLATFORM_WIN32 + #ifdef CAELUM_LIB + #define DllExport __declspec (dllexport) + #else + #ifdef __MINGW32__ + #define DllExport + #else + #define DllExport __declspec (dllimport) + #endif + #endif +#else + #define DllExport +#endif + +// Define the version code +#define CAELUM_VERSION_MAIN 0 +#define CAELUM_VERSION_SEC 2 +#define CAELUM_VERSION_TER 1 +#define CAELUM_VERSION = (CAELUM_VERSION_MAIN << 16) | (CAELUM_VERSION_SEC << 8) | CAELUM_VERSION_TER + +namespace caelum { + /// Resource group name for caelum resources. + extern DllExport Ogre::String RESOURCE_GROUP_NAME; + + // Render group for caelum stuff + // It's best to have them all together + enum CaelumRenderQueueGroupId + { + CAELUM_RENDER_QUEUE_STARFIELD = Ogre::RENDER_QUEUE_SKIES_EARLY + 0, + CAELUM_RENDER_QUEUE_SKYDOME = Ogre::RENDER_QUEUE_SKIES_EARLY + 1, + CAELUM_RENDER_QUEUE_SUN = Ogre::RENDER_QUEUE_SKIES_EARLY + 2, + CAELUM_RENDER_QUEUE_CLOUDS = Ogre::RENDER_QUEUE_SKIES_EARLY + 3, + CAELUM_RENDER_QUEUE_GROUND_FOG = Ogre::RENDER_QUEUE_SKIES_EARLY + 4, + }; + + // Caelum needs a lot of precission for astronomical calculations. + // Very few calculations use it, and the precission IS required. + typedef double LongReal; +} + +// Log macro +#define LOG(msg) Ogre::LogManager::getSingleton().logMessage(msg); + +#endif //CAELUMPREREQUISITES_H Added: trunk/python-ogre/ThirdParty/caelum/SolarSystemModel.cpp =================================================================== --- trunk/python-ogre/ThirdParty/caelum/SolarSystemModel.cpp (rev 0) +++ trunk/python-ogre/ThirdParty/caelum/SolarSystemModel.cpp 2008-02-16 01:38:02 UTC (rev 568) @@ -0,0 +1,60 @@ +/* +This file is part of Caelum. +See http://www.ogre3d.org/wiki/index.php/Caelum + +Copyright (c) 2006-2008 Caelum team. See Contributors.txt for details. + +Caelum is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published +by the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +Caelum is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with Caelum. If not, see <http://www.gnu.org/licenses/>. +*/ + +#include "CaelumPrecompiled.h" +#include "SolarSystemModel.h" +#include "UniversalClock.h" +#include "Astronomy.h" + +using Ogre::Degree; +using Ogre::Radian; +using Ogre::Math; +using Ogre::Real; + +namespace caelum +{ + SolarSystemModel::SolarSystemModel ( + Ogre::Degree longitude, Ogre::Degree latitude): + mObserverLatitude(latitude), mObserverLongitude(longitude) + { + } + + const Ogre::Vector3 SolarSystemModel::getSunDirection (LongReal jday) + { + int fpmode = Astronomy::enterHighPrecissionFloatingPointMode (); + + // Horizontal spherical. + Degree azimuth; + Degree altitude; + Astronomy::getHorizontalSunPosition(jday, + getObserverLongitude(), getObserverLatitude(), + azimuth, altitude); + + // Ogre direction. + Ogre::Vector3 res; + res.x = Math::Sin (azimuth); // East + res.y = -Math::Sin (altitude); // Zenith + res.z = -Math::Cos (azimuth); // North + + Astronomy::restoreFloatingPointMode(fpmode); + + return res; + } +} Added: trunk/python-ogre/ThirdParty/caelum/SolarSystemModel.h =================================================================== --- trunk/python-ogre/ThirdParty/caelum/SolarSystemModel.h (rev 0) +++ trunk/python-ogre/ThirdParty/caelum/SolarSystemModel.h 2008-02-16 01:38:02 UTC (rev 568) @@ -0,0 +1,64 @@ +/* +This file is part of Caelum. +See http://www.ogre3d.org/wiki/index.php/Caelum + +Copyright (c) 2006-2008 Caelum team. See Contributors.txt for details. + +Caelum is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published +by the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +Caelum is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with Caelum. If not, see <http://www.gnu.org/licenses/>. +*/ + +#ifndef SOLARSYSTEMMODEL_H +#define SOLARSYSTEMMODEL_H + +#include "CaelumPrerequisites.h" + +namespace caelum +{ + /** Class which calculates sun and moon positions on the sky. + * Most of the calculations are done in the astronomy class. + */ + class DllExport SolarSystemModel + { + private: + Ogre::Degree mObserverLatitude; + Ogre::Degree mObserverLongitude; + + public: + /** Constructor, initializes observer's position on earth. + */ + SolarSystemModel ( + Ogre::Degree longitude = Ogre::Degree (0), + Ogre::Degree latitude = Ogre::Degree (45)); + + /// Get the observer's longitude. East is positive, west is negative. + inline const Ogre::Degree getObserverLongitude () const { return mObserverLongitude; } + + /// Set the observer's longitude. East is positive, west is negative. + inline void setObserverLongitude (Ogre::Degree value) { mObserverLongitude = value; } + + /// Get the observer's latitude. North is positive, south is negative. + inline const Ogre::Degree getObserverLatitude () const { return mObserverLatitude; } + + /// Set the observer's latitude. North is positive, south is negative. + inline void setObserverLatitude (Ogre::Degree value) { mObserverLatitude = value; } + + /** Get the sun's direction at a certain time. + * @param jday astronomical julian day. + * @see UniversalClock for julian day calculations. + */ + const Ogre::Vector3 getSunDirection (LongReal jday); + }; +} + +#endif // SOLARSYSTEMMODEL_H \ No newline at end of file Added: trunk/python-ogre/ThirdParty/nxogre/BetajaenCC.cpp =================================================================== --- trunk/python-ogre/ThirdParty/nxogre/BetajaenCC.cpp (rev 0) +++ trunk/python-ogre/ThirdParty/nxogre/BetajaenCC.cpp 2008-02-16 01:38:02 UTC (rev 568) @@ -0,0 +1,28 @@ +/* + +Betajaen's Container Classes + +Copyright (c) 2007 Robin Southern, http://www.nxogre.org + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +*/ + +#include "NxOgreStable.h" +#include "BetajaenCC.h" \ No newline at end of file Added: trunk/python-ogre/ThirdParty/nxogre/BetajaenCC.h =================================================================== --- trunk/python-ogre/ThirdParty/nxogre/BetajaenCC.h (rev 0) +++ trunk/python-ogre/ThirdParty/nxogre/BetajaenCC.h 2008-02-16 01:38:02 UTC (rev 568) @@ -0,0 +1,1654 @@ +/* + +Betajaen's Container Classes + +Copyright (c) 2007 Robin Southern, http://www.nxogre.org + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +*/ + +#ifndef BETAJAENS_CC_H +#define BETAJAENS_CC_H + +#include "NxOgrePlatform.h" +#include "NxOgreAllocator.h" + +// Configuration + +/** \brief Namespace to place the Containers in. Comment out if you want it in the global namespace. +*/ +#define BETAJAEN_CC_NAMESPACE Betajaen + + +/** \brief Enable debug comments. Set to zero to disable, 1 to enable +*/ +#define BETAJAEN_CC_DEBUG_COMMENTS 1 + + +/** \brief Export Class Macro, replace value with your export macro +*/ +#define BETAJAEN_CC_CLASS_EXPORT __declspec(dllexport) +#define BETAJAEN_CC_TEMPLATE_CLASS_EXPORT __forceinline +// #define BETAJAEN_CC_FUNCTION_EXPORT NxPublicFunction + +////////////////////////////////////////////////////////////////////////// + +#if (BETAJAEN_CC_DEBUG_COMMENTS == 1) +# include <stdio.h> +#endif + +#ifdef BETAJAEN_CC_NAMESPACE +# define BETAJAEN_CC_NAMESPACE_START namespace BETAJAEN_CC_NAMESPACE { +# define BETAJAEN_CC_NAMESPACE_END } +#else +# define BETAJAEN_CC_NAMESPACE_START /**/ +# define BETAJAEN_CC_NAMESPACE_END /**/ +#endif + +BETAJAEN_CC_NAMESPACE_START + +#if (BETAJAEN_CC_DEBUG_COMMENTS == 1) +# define BETAJAEN_CC_PRINT(x) printf(x "\n"); +# define BETAJAEN_CC_PRINTF(x, y) printf(x "\n",y); +#else +# define BETAJAEN_CC_PRINT(x) /* x */ +# define BETAJAEN_CC_PRINTF(x,y) /* x, y*/ +#endif + +#if (_MSC_VER>=1000) +# define BETAJAEN_CC_INLINE +// __forceinline +#else +# define BETAJAEN_CC_INLINE +//inline +#endif + +#ifndef BETAJAEN_CC_CLASS_EXPORT +# define BETAJAEN_CC_CLASS_EXPORT +#endif + +#ifndef BETAJAEN_CC_TEMPLATE_CLASS_EXPORT +# define BETAJAEN_CC_TEMPLATE_CLASS_EXPORT +#endif + +#ifndef BETAJAEN_CC_FUNCTION_EXPORT +# define BETAJAEN_CC_FUNCTION_EXPORT +#endif + +BETAJAEN_CC_NAMESPACE_END + +////////////////////////////////////////////////////////////////////////// + +BETAJAEN_CC_NAMESPACE_START +class SharedAllocator; + +template <class TypePtr, class AllocatorType = SharedAllocator> class Flat; + +template <class BaseType, class AllocatorType = SharedAllocator> class SharedList; +template <typename IdentifierType, class BaseType, class AllocatorType = SharedAllocator> class SharedMap; +template <typename IdentifierType, class TypePtr> class Tree; +template <typename> class Vector2; +template <typename> class Vector3; +template <typename> class Vector4; + +BETAJAEN_CC_NAMESPACE_END + +////////////////////////////////////////////////////////////////////////// + +BETAJAEN_CC_NAMESPACE_START + +class BETAJAEN_CC_CLASS_EXPORT SharedAllocator { + +public: + +///////////////////////////////////////////////////////////// + +void* Allocate(size_t size) +{ + return malloc(size); +} + +///////////////////////////////////////////////////////////// + +void Deallocate(void* mem) +{ + if (mem) + free(mem); +} + +///////////////////////////////////////////////////////////// + +void* Reallocate(void* mem, size_t size) +{ + return realloc(mem, size); +} + +///////////////////////////////////////////////////////////// + +}; // End of the SharedAllocator class. + +BETAJAEN_CC_NAMESPACE_END + +////////////////////////////////////////////////////////////////////////// + +BETAJAEN_CC_NAMESPACE_START + +template + < + class Type, + class AllocatorType + > +class BETAJAEN_CC_CLASS_EXPORT Flat +{ + +public: + +typedef Type * Iterator; +typedef AllocatorType* AllocatorPtr; + +///////////////////////////////////////////////////////////// + +BETAJAEN_CC_INLINE Flat(AllocatorPtr allocator, bool deleteAllocator) + : First(NULL), Last(NULL), End(NULL), Allocator(allocator), AutoDeleteAllocator(deleteAllocator) +{ +} + +///////////////////////////////////////////////////////////// + +BETAJAEN_CC_INLINE ~Flat() +{ + _deallocate(First); + if (AutoDeleteAllocator) + delete Allocator; +} + +///////////////////////////////////////////////////////////// + +BETAJAEN_CC_INLINE unsigned int _size() const +{ + return (unsigned int) (Last - First); +} + +///////////////////////////////////////////////////////////// + +BETAJAEN_CC_INLINE unsigned int _capacity() const +{ + return (unsigned int) (First == 0 ? 0 : End - First); +} + +///////////////////////////////////////////////////////////// + +BETAJAEN_CC_INLINE Type* _allocate(unsigned int size) +{ + return (Type*) Allocator->Allocate(size * sizeof(Type)); +} + +///////////////////////////////////////////////////////////// + +BETAJAEN_CC_INLINE void _deallocate(Type* p) +{ + if (p) + Allocator->Deallocate(p); +} + +///////////////////////////////////////////////////////////// + +BETAJAEN_CC_INLINE Iterator _reallocate(Iterator p, unsigned int size) +{ + return (Iterator) Allocator->Reallocate(p, size * sizeof(Type)); +} + +///////////////////////////////////////////////////////////// + +BETAJAEN_CC_INLINE void _clip(unsigned int size) +{ + + if (size < _size()) + return; + + Iterator new_first = _allocate(size); + _copy(First, Last, new_first); + _destroy(First, Last); + _deallocate(First); + End = new_first + size; + Last = new_first + _size(); + First = new_first; + +} + +///////////////////////////////////////////////////////////// + +BETAJAEN_CC_INLINE void _reserve(unsigned int new_size) +{ + if (_capacity() >= new_size) + return; + + Iterator new_first = _allocate(new_size); + _copy(First, Last, new_first); + _destroy(First, Last); + _deallocate(First); + End = new_first + new_size; + Last = new_first + _size(); + First = new_first; + +} + +///////////////////////////////////////////////////////////// + +BETAJAEN_CC_INLINE Iterator _copy(Iterator begin, Iterator end, Iterator dest) +{ + for (;begin != end; ++dest, ++begin) + *dest = *begin; + return dest; +} + +///////////////////////////////////////////////////////////// + +BETAJAEN_CC_INLINE void _delete_range(Iterator begin, Iterator end) +{ + for (; begin != end; ++begin) { + {::NxOgre::Allocator::getPtr()->watch_delete(static_cast<void*>(*begin));}; + delete *begin; + /** NxOgre Remove*/ // delete *begin; + } +} + +///////////////////////////////////////////////////////////// + +BETAJAEN_CC_INLINE void _destroy(Iterator begin, Iterator end) +{ + for (; begin != end; ++begin) { + /** NxOgre */ ::NxOgre::Allocator::getPtr()->watch_delete(begin); + begin->~Type(); + } +} + +///////////////////////////////////////////////////////////// + +private: AllocatorPtr Allocator; +private: bool AutoDeleteAllocator; +public: Iterator First, Last, End; + +}; // End of Flat<Type,AllocatorType> class. + +BETAJAEN_CC_NAMESPACE_END + +////////////////////////////////////////////////////////////////////////// + +BETAJAEN_CC_NAMESPACE_START + +/** \brief A list of pointers with garbage collections and the ability to + share the same list with similar lists. Like STL's Vector. + + \example + <code> + class A; + + SharedList<A> aList; + a.Insert(new A()); + a.Remove(a.Last); + </code> + +*/ +template + < + class Type, /* Class to Store; A, myClassName, etc. */ + class AllocatorType /* Allocator to use, or leave blank for SharedAllocator */ + > +class BETAJAEN_CC_CLASS_EXPORT SharedList { + +public: + +typedef Type* TypePtr; +typedef TypePtr* Iterator; +typedef SharedList<Type, AllocatorType> SharedListType; +typedef Flat<TypePtr, AllocatorType> FlatType; +typedef FlatType* FlatPtr; + +///////////////////////////////////////////////////////////// + +enum AbsolutePosition +{ + First, + Last +}; + +/** + Constructor with optional custom allocator +*/ +BETAJAEN_CC_INLINE SharedList(AllocatorType* _allocator = NULL, bool _auto_delete_allocator = true) +{ + if (_allocator == NULL) + _allocator = new AllocatorType(); + + _Flat = new FlatType(_allocator, _auto_delete_allocator); + _Usage = new unsigned int(1); + +} + +/** \brief Copy Constructor between SharedList's. The Flat will not be copied but referenced. + Any action on this list will effect all lists using the same Flat. Clean up will only + happen on the destruction of the last surviving list. + + \example + <code> + typedef SharedList<A> AList; + AList a; + AList b(a); + </code> +*/ +BETAJAEN_CC_INLINE SharedList(const SharedListType& other) +{ + + _Flat = other._Flat; + _Usage = other._Usage; + ++(*_Usage); + +} + + +/** \brief Copy Operator. Functions the same as Copy Constructor but deletes the set that this + may already have. + + \example + <code> + typedef SharedList<A> AList; + AList a; + AList b; + b = a; + </code> +*/ +BETAJAEN_CC_INLINE SharedListType& operator=(const SharedListType& other) +{ + + if (_Flat) + { + _Flat->_delete_range(_Flat->First, _Flat->Last); + delete _Flat; + } + + if (_Usage) + delete _Usage; + + _Flat = other._Flat; + _Usage = other._Usage; + ++(*_Usage); + + return *this; + +} + + +/** \brief Destructor. If this is the last of all SharedLists sharing the same set, + the set will be destroyed otherwise the Flat will be ignored and this SharedList + dies gracefully. +*/ +BETAJAEN_CC_INLINE ~SharedList() +{ + + if (--(*_Usage) == 0) + { + _Flat->_delete_range(_Flat->First, _Flat->Last); + delete _Flat; + delete _Usage; + } + +} + + +/** \brief Gets the pointer to the nth Type in the list. Alternate interface to operator[]. +*/ +BETAJAEN_CC_INLINE TypePtr Get(size_t pos) +{ + if (pos > Size()) + return NULL; + + return *(_Flat->First + pos); +} + + +/** \brief Gets the pointer to the nth TypePtr in the list. +*/ +BETAJAEN_CC_INLINE TypePtr operator[](size_t pos) +{ + if (pos > Size()) + return NULL; + + return *(_Flat->First + pos); +} + + +/** \brief Where is something in the list. +*/ +BETAJAEN_CC_INLINE unsigned int WhereIs(TypePtr ptr) +{ + + if (_Flat->_size() == 0) + return 0; + + unsigned int i=0; + for(Iterator begin = _Flat->First; begin != _Flat->Last; ++begin, ++i) + { + if (ptr == (*begin)) + return i; + } + + return 0; +} + +BETAJAEN_CC_INLINE bool Has(TypePtr ptr) +{ + + if (_Flat->_size() == 0) + return false; + + for(Iterator begin = _Flat->First; begin != _Flat->Last; ++begin) + { + if (ptr == (*begin)) + return true; + } + + return false; + +} + +/** \brief The size of the SharedList. +*/ +BETAJAEN_CC_INLINE unsigned Size() const +{ + return _Flat->_size(); +} + + +/** \brief Insert something into the list +*/ +BETAJAEN_CC_INLINE void Insert(const TypePtr& val) +{ + + if (_Flat->End <= _Flat->Last) + _Flat->_reserve( (1 + Size()) * 2); + + *_Flat->Last = val; + _Flat->Last++; + +} + + +/** \brief Resize the capacity of the list to size + n. +*/ +BETAJAEN_CC_INLINE void Clean(unsigned int n = 4) +{ + _Flat->_clip(_Flat->_size() + n); +} + + +/** \brief Destroy something nth position into the list. +*/ +BETAJAEN_CC_INLINE void Destroy(unsigned int n) +{ + if (n == 0) + return Destroy(First); + + if (n == Size()) + return Destroy(Last); + + delete *(_Flat->First + n); + + _Flat->_destroy(_Flat->First + n, _Flat->First + n + 1); + _Flat->_copy(_Flat->First + n + 1, _Flat->Last, _Flat->First + n); + _Flat->Last--; + +} + +// \brief Destroys everything +// +BETAJAEN_CC_INLINE void DestroyAll() +{ + if (Size() == 0) + return; + + _Flat->_delete_range(_Flat->First, _Flat->Last); + // Could be iffy. + _Flat->Last = _Flat->First; + +} + +/** \brief Destroys something in the list based on the pointer in the list. +*/ +BETAJAEN_CC_INLINE void Destroy(TypePtr val) { + unsigned int i = WhereIs(val); + Destroy(i); +} + +/** \brief Deletes something from the list based on AbsolutePosition +*/ +BETAJAEN_CC_INLINE void Destroy(AbsolutePosition position) +{ + + switch(position) { + + case First: + { + delete *_Flat->First; + _Flat->_copy(_Flat->First + 1, _Flat->Last + 1, _Flat->First); + _Flat->Last--; + } + break; + + case Last: + { + _Flat->Last--; + delete *_Flat->Last; + } + break; + + } + +} + + +/** \brief Removes something from the list based on numerical position. +*/ +BETAJAEN_CC_INLINE TypePtr Remove(unsigned int n) +{ + + if (n == 0) + return Remove(First); + + if (n == Size()) + return Remove(Last); + + TypePtr ptr = Get(n); + _Flat->_destroy(_Flat->First + n, _Flat->First + n + 1); + _Flat->_copy(_Flat->First + n + 1, _Flat->Last, _Flat->First + n); + _Flat->Last--; + + return ptr; +} + + +/** \brief Removes something from the list based on AbsolutePosition +*/ +BETAJAEN_CC_INLINE TypePtr Remove(AbsolutePosition position) +{ + + if (_Flat->_size() == 0) + return NULL; + + switch(position) { + + case First: + { + TypePtr t = *(_Flat->First); + _Flat->_copy(_Flat->First + 1, _Flat->Last + 1, _Flat->First); + _Flat->Last--; + return t; + } + + break; + + case Last: + { + _Flat->Last--; + return *(_Flat->Last); + } + break; + } + + return NULL; + +} + + +/** \brief Places the Iterator at the beginning of the List +*/ +BETAJAEN_CC_INLINE TypePtr Begin() +{ + + if (_Flat->_size() == 0) + return NULL; + + _Iterator = _Flat->First; + return *_Iterator; + +} + + +/** \brief Advances the Iterator forward by one, and returns the value of the list or NULL + \returns The next item in the list, or NULL if it has reached the end of it. +*/ +BETAJAEN_CC_INLINE TypePtr Next() +{ + + if (_Flat->_size() == 0) + return NULL; + else if (_Iterator == _Flat->Last) + return NULL; + else + return (*_Iterator++); + +} + + +/** \brief Places the iterator at the end of the List +*/ +BETAJAEN_CC_INLINE TypePtr End() +{ + + if (_Flat->_size() == 0) + return NULL; + + _Iterator = _Flat->Last - 1; + return *_Iterator; + +} + + +/** \brief Advances the Iterator backwards by one, and returns the value of the list or NULL + \returns The previous item in the list, or NULL if it has reached the beginning of it. +*/ +BETAJAEN_CC_INLINE TypePtr Previous() +{ + + if (_Flat->_size() == 0) + return NULL; + else if (_Iterator == _Flat->First - 1) + return NULL; + else + return (*_Iterator--); + +} + +/** \brief For each item in the list call it's own method. +*/ +BETAJAEN_CC_INLINE void Each(void (Type::*MethodPtr)()) { + + if (_Flat->_size() == 0) + return; + + for(Iterator begin = _Flat->First; begin != _Flat->Last; ++begin) { + (*begin->*MethodPtr)(); + } + +} + + +/** \brief For each item in the list call it's own method, with one argument. +*/ +template <typename _A> +BETAJAEN_CC_INLINE void Each(void (Type::*MethodPtr)(_A), _A _1) { + + if (_Flat->_size() == 0) + return; + + for(Iterator begin = _Flat->First; begin != _Flat->Last; ++begin) { + (*begin->*MethodPtr)(_1); + } + +} + + +/** \brief For each item in the list call it's own method, with two arguments. +*/ +template <typename _A, typename _B> +BETAJAEN_CC_INLINE void Each(void (Type::*MethodPtr)(_A, _B), _A _1, _B _2) { + + if (_Flat->_size() == 0) + return; + + for(Iterator begin = _Flat->First; begin != _Flat->Last; ++begin) + (*begin->*MethodPtr)(_1, _2); + +} + + +/** \brief For each item in the list call it's own method, with three arguments. +*/ +template <typename _A, typename _B, typename _C> +BETAJAEN_CC_INLINE void Each(void (Type::*MethodPtr)(_A, _B, _C), _A _1, _B _2, _C _3) { + + if (_Flat->_size() == 0) + return; + + for(Iterator begin = _Flat->First; begin != _Flat->Last; ++begin) + (*begin->*MethodPtr)(_1, _2, _3); + +} + + +/** \brief For each item in the list call it's own method, with four arguments. +*/ +template <typename _A, typename _B, typename _C, typename _D> +BETAJAEN_CC_INLINE void Each(void (Type::*MethodPtr)(_A, _B, _C, _D), _A _1, _B _2, _C _3, _D _4) { + + if (_Flat->_size() == 0) + return; + + for(Iterator begin = _Flat->First; begin != _Flat->Last; ++begin) + (*begin->*MethodPtr)(_1, _2, _3, _4); + +} + + +/** \brief For each item in the list call it's own method, with five arguments. +*/ +template <typename _A, typename _B, typename _C, typename _D, typename _E> +BETAJAEN_CC_INLINE void Each(void (Type::*MethodPtr)(_A, _B, _C, _D), _A _1, _B _2, _C _3, _D _4, _E _5) { + + if (_Flat->_size() == 0) + return; + + for(Iterator begin = _Flat->First; begin != _Flat->Last; ++begin) + (*begin->*MethodPtr)(_1, _2, _3, _4, _5); + +} + + +/** \brief For each item in the list call it's own method, with six arguments. +*/ +template <typename _A, typename _B, typename _C, typename _D, typename _E, typename _F> +BETAJAEN_CC_INLINE void Each(void (Type::*MethodPtr)(_A, _B, _C, _D), _A _1, _B _2, _C _3, _D _4, _E _5, _F _6) { + + if (_Flat->_size() == 0) + return; + + for(Iterator begin = _Flat->First; begin != _Flat->Last; ++begin) + (*begin->*MethodPtr)(_1, _2, _3, _4, _5, _6); + +} + + +/** \brief For each item in the list call it's own method, with seven arguments. +*/ +template <typename _A, typename _B, typename _C, typename _D, typename _E, typename _F, typename _G> +BETAJAEN_CC_INLINE void Each(void (Type::*MethodPtr)(_A, _B, _C, _D), _A _1, _B _2, _C _3, _D _4, _E _5, _F _6, _G _7) { + + if (_Flat->_size() == 0) + return; + + for(Iterator begin = _Flat->First; begin != _Flat->Last; ++begin) + (*begin->*MethodPtr)(_1, _2, _3, _4, _5, _6, _7); + +} + + +/** \brief For each item in the list call it's own method, with eight arguments. +*/ +template <typename _A, typename _B, typename _C, typename _D, typename _E, typename _F, typename _G, typename _H> +BETAJAEN_CC_INLINE void Each(void (Type::*MethodPtr)(_A, _B, _C, _D), _A _1, _B _2, _C _3, _D _4, _E _5, _F _6, _G _7, _H _8) { + + if (_Flat->_size() == 0) + return; + + for(Iterator begin = _Flat->First; begin != _Flat->Last; ++begin) + (*begin->*MethodPtr)(_1, _2, _3, _4, _5, _6, _7, _8); + +} + +/** \brief Returns the pointer to the working set. +*/ +BETAJAEN_CC_INLINE FlatPtr getFlat() const { + return _Flat; +} + + +/** \brief Returns the number of SharedLists using this set. +*/ +BETAJAEN_CC_INLINE unsigned int getUsageCount() const { + return *_Usage; +} + + +private: unsigned int* _Usage; +private: FlatPtr _Flat; +private: Iterator _Iterator; + +}; // End of SharedList<Type, AllocatorType> Class. + +BETAJAEN_CC_NAMESPACE_END + +////////////////////////////////////////////////////////////////////////// + +BETAJAEN_CC_NAMESPACE_START + + +/** \brief Binary Tree with variable identifer and storage type. + +*/ +template <typename NodeIdentifier, class Type> +class BETAJAEN_CC_CLASS_EXPORT Tree +{ + // Much of this Tree was from the excellent tutorial by Julienne Walker + // http://eternallyconfuzzled.com/tuts/datastructures/jsw_tut_bst1.aspx + +public: + +class Node; +typedef Node* NodePtr; +typedef Type* TypePtr; + +/** \brief A tree is made up of nodes. +*/ +class BETAJAEN_CC_CLASS_EXPORT Node +{ + +public: + +Node(NodeIdentifier id, TypePtr val) : _ID(id), _Val(val) +{ + _Children[0] = NULL; + _Children[1] = NULL; +} + +void Replace(Node* n) +{ + _ID = n->_ID; + _Val = n->_Val; +} + +NodeIdentifier _ID; +TypePtr _Val; +NodePtr _Children[2]; + +}; + + +/** \brief Tree constructor +*/ +public: BETAJAEN_CC_INLINE Tree() : _Root(NULL) +{ +} + + +/** \brief Tree destructor. + \note Does not remove or destroy the contents of the tree. +*/ +public: BETAJAEN_CC_INLINE ~Tree() +{ +} + + +/** \brief Destroys all the nodes in the tree and deletes all of the values referenced in it. +*/ +public: BETAJAEN_CC_INLINE void DestroyAll() +{ + + NodePtr iterator = _Root; + NodePtr save = 0; + + while (iterator != NULL) + { + if (iterator->_Children[0] != NULL) + { + save = iterator->_Children[0]; + iterator->_Children[0] = save->_Children[1]; + save->_Children[1] = iterator; + } + else + { + save = iterator->_Children[1]; + delete iterator->_Val; + delete iterator; + } + + iterator = save; + } + +} + + +/** \brief Destroys all the nodes in the tree, but not all of the values referenced in it. +*/ +public: BETAJAEN_CC_INLINE void RemoveAll() +{ + NodePtr iterator = _Root; + NodePtr save = 0; + + while (iterator != NULL) + { + if (iterator->_Children[0] != NULL) + { + save = iterator->_Children[0]; + iterator->_Children[0] = save->_Children[1]; + save->_Children[1] = iterator; + } + else + { + save = iterator->_Children[1]; + delete iterator; + } + + iterator = save; + } + +} + + +/** \brief Remove a Node based of an identifier +*/ +public: BETAJAEN_CC_INLINE void Remove(NodeIdentifier id) +{ + + if (_Root == NULL) + return; + + Node head = {0}; + NodePtr iterator = &head; + NodePtr *f = 0, *p = 0; + int direction = 1; + + iterator->_Children[1] = _Root; + + //while (iterator = + +} + + + +/** \brief Removes a ranges of nodes based on max. and min. identifiers. + \note This operates based on the "operator <" of the TypeIdentifier the class, + which defines if the type is in the range or not. Types such as ints, or reals + aren't a problem but things like strings or complicated classes may produce + strange results. +*/ +public: BETAJAEN_CC_INLINE void RemoveRange(NodeIdentifier id_min, NodeIdentifier id_max) +{ + + +} + + +/** +*/ +public: BETAJAEN_CC_INLINE void Destroy(NodeIdentifier id) +{ + +} + + +/** +*/ +public: BETAJAEN_CC_INLINE void DestroyRange(NodeIdentifier id_min, NodeIdentifier id_max) +{ + +} + + +/** +*/ +public: BETAJAEN_CC_INLINE TypePtr Find(NodeIdentifier target) +{ + NodePtr iterator = _Root; + while (iterator != NULL) + { + if (iterator->_ID == target) + { + return iterator->_Val; + } + else + { + iterator = iterator->_Children[int(iterator->_ID < target)]; + } + } + + return 0; +} + + +/** +*/ +public: BETAJAEN_CC_INLINE bool Insert(NodeIdentifier target, TypePtr val) +{ + Node* node = new Node(target, val); + + + if (_Root == NULL) + { + _Root = node; + return true; + } + else + { + Node* iterator = _Root; + unsigned int direction; + + for ( ; ; ) + { + direction = iterator->_ID < target; + + if (iterator->_ID == target) + { + delete node; + return false; + } + else if (iterator->_Children[direction] == NULL) + break; + + + iterator = iterator->_Children[direction]; + } + + iterator->_Children[direction] = node; + } + + return true; +} + +private: NodePtr _Root; + +}; + +BETAJAEN_CC_NAMESPACE_END + +////////////////////////////////////////////////////////////////////////// + +BETAJAEN_CC_NAMESPACE_START + +template < + typename IdentifierType, + class Type, + class AllocatorType + > +class BETAJAEN_CC_CLASS_EXPORT SharedMap +{ + +public: + +typedef Type* TypePtr; +typedef Tree<IdentifierType, Type> TreeType; +typedef TreeType* TreePtr; + + +///////////////////////////////////////////////////////////// + +BETAJAEN_CC_INLINE SharedMap() +{ + _Tree = new TreeType(); +} + +///////////////////////////////////////////////////////////// + +BETAJAEN_CC_INLINE ~SharedMap() +{ + _Tree->DestroyAll(); + delete _Tree; +} + +///////////////////////////////////////////////////////////// + +BETAJAEN_CC_INLINE TypePtr Get(IdentifierType identifier) +{ + return _Tree->Find(identifier); +} + +///////////////////////////////////////////////////////////// + +BETAJAEN_CC_INLINE TypePtr operator[](IdentifierType identifier) +{ + return _Tree->Find(identifier); +} + +///////////////////////////////////////////////////////////// + +BETAJAEN_CC_INLINE void Insert(IdentifierType identifier, TypePtr ptr) +{ + _Tree->Insert(identifier, ptr); +} + +///////////////////////////////////////////////////////////// + +BETAJAEN_CC_INLINE void DestroyAll() +{ + +} + +///////////////////////////////////////////////////////////// + +BETAJAEN_CC_INLINE void RemoveAll() +{ + +} + +///////////////////////////////////////////////////////////// + +BETAJAEN_CC_INLINE void Destroy(IdentifierType) +{ + +} + +///////////////////////////////////////////////////////////// + +BETAJAEN_CC_INLINE void Remove(IdentifierType) +{ + +} + +///////////////////////////////////////////////////////////// + +BETAJAEN_CC_INLINE TypePtr Begin() +{ + +} + +///////////////////////////////////////////////////////////// + +BETAJAEN_CC_INLINE TypePtr Next() +{ + +} + +///////////////////////////////////////////////////////////// + +BETAJAEN_CC_INLINE TypePtr End() +{ + +} + +///////////////////////////////////////////////////////////// + +BETAJAEN_CC_INLINE TypePtr Previous() +{ + +} + +///////////////////////////////////////////////////////////// + +BETAJAEN_CC_INLINE void Each(void (Type::*MethodPtr)()) +{ + +} + +///////////////////////////////////////////////////////////// + +BETAJAEN_CC_INLINE TreePtr getTree() const +{ + return _Tree; +} + +///////////////////////////////////////////////////////////// + +BETAJAEN_CC_INLINE unsigned int getUsage() const +{ + return *_Usage; +} + +///////////////////////////////////////////////////////////// + +private: TreePtr _Tree; +private: unsigned int* _Usage; + +///////////////////////////////////////////////////////////// + +}; + +BETAJAEN_CC_NAMESPACE_END + +////////////////////////////////////////////////////////////////////////// + +BETAJAEN_CC_NAMESPACE_START + +/** \brief Vector with two rows. +*/ +template < + typename Type + > +class BETAJAEN_CC_CLASS_EXPORT Vector2 +{ + +public: + +typedef Vector2<Type> ThisType; + +/* \brief First */ +Type i; + +/* \brief Second */ +Type j; + +BETAJAEN_CC_INLINE Vector2() +{ +} + +BETAJAEN_CC_INLINE Vector2(Type _i, Type _j) +: i(_i), j(_j) +{ +} + +BETAJAEN_CC_INLINE void swap(ThisType& other) +{ + Type First = i, Second = j; + i = other.i; other.i = First; + j = other.j; other.j = Second; +} + +BETAJAEN_CC_INLINE ThisType& operator = (const ThisType& other) +{ + i = other.i; j = other.j; + return *this; +} + +BETAJAEN_CC_INLINE ThisType& operator = (const Type& other) +{ + i = other; j = other; + return *this; +} + +BETAJAEN_CC_INLINE ThisType& operator *= (const Type& other) +{ + i *= other; j *= other; +} + +BETAJAEN_CC_INLINE ThisType& operator *= (const ThisType& other) +{ + i *= other.i; j *= other.j; +} + +BETAJAEN_CC_INLINE bool operator == (const ThisType& other) const +{ + return (i == other.i && j == other.j); +} + +BETAJAEN_CC_INLINE bool operator != (const ThisType& other) const +{ + return (i != other.i || j != other.j); +} + +}; + +BETAJAEN_CC_NAMESPACE_END + +////////////////////////////////////////////////////////////////////////// + +BETAJAEN_CC_NAMESPACE_START + +/** \brief Vector with three rows. +*/ +template < + typename Type + > +class BETAJAEN_CC_CLASS_EXPORT Vector3 +{ + +public: + +typedef Vector3<Type> ThisType; + +/* \brief First */ +Type i; + +/* \brief Second */ +Type j; + +/* \brief Third */ +Type k; + + +BETAJAEN_CC_INLINE Vector3() +{ +} + +BETAJAEN_CC_INLINE Vector3(Type _i, Type _j, Type _k) +: i(_i), j(_j), k(_k) +{ +} + +BETAJAEN_CC_INLINE void swap(ThisType& other) +{ + Type First = i, Second = j, Third = k; + i = other.i; other.i = First; + j = other.j; other.j = Second; + k = other.k; other.k = Third; +} + +BETAJAEN_CC_INLINE ThisType& operator = (const ThisType& other) +{ + i = other.i; j = other.j; k = other.k; + return *this; +} + +BETAJAEN_CC_INLINE ThisType& operator = (const Type& other) +{ + i = other; j = other; k = other; + return *this; +} + +BETAJAEN_CC_INLINE ThisType& operator *= (const Type& other) +{ + i *= other; j *= other; k *= other; +} + +BETAJAEN_CC_INLINE ThisType& operator *= (const ThisType& other) +{ + i *= other.i; j *= other.j; k *= other.k; +} + +BETAJAEN_CC_INLINE bool operator == (const ThisType& other) const +{ + return (i == other.i && j == other.j && k == other.k); +} + +BETAJAEN_CC_INLINE bool operator != (const ThisType& other) const +{ + return (i != other.i || j != other.j || k != other.k); +} + +}; + +BETAJAEN_CC_NAMESPACE_END + +////////////////////////////////////////////////////////////////////////// + +BETAJAEN_CC_NAMESPACE_START + +/** \brief Vector with four rows. +*/ +template < + typename Type + > +class BETAJAEN_CC_CLASS_EXPORT Vector4 { + +public: + +typedef Vector4<Type> ThisType; + +/* \brief First */ +Type i; + +/* \brief Second */ +Type j; + +/* \brief Third */ +Type k; + +/* \brief Fourth */ +Type l; + +BETAJAEN_CC_INLINE Vector4() +{ +} + +BETAJAEN_CC_INLINE Vector4(Type _i, Type _j, Type _k, Type _l) +: i(_i), j(_j), k(_k), l(_l) +{ +} + +BETAJAEN_CC_INLINE void swap(ThisType& other) +{ + Type First = i, Second = j, Third = k, Fourth = l; + i = other.i; other.i = First; + j = other.j; other.j = Second; + k = other.k; other.k = Third; + l = other.l; other.l = Fourth; +} + +BETAJAEN_CC_INLINE ThisType& operator = (const ThisType& other) { + i = other.i; j = other.j; k = other.k; l = other.l; + return *this; +} + +BETAJAEN_CC_INLINE ThisType& operator *= (const Type& other) +{ + i *= other; j *= other; k *= other; l *= other +} + +BETAJAEN_CC_INLINE ThisType& operator *= (const ThisType& other) +{ + i *= other.i; j *= other.j; k *= other.k; l *= other.l; +} + +BETAJAEN_CC_INLINE bool operator == (const ThisType& other) const { + return (i == other.i && j == other.j && k == other.k && l == other.l); +} + +BETAJAEN_CC_INLINE bool operator != (const ThisType& other) const { + return (i != other.i || j != other.j || k != other.k || l != other.l); +} + +}; + +BETAJAEN_CC_NAMESPACE_END + +////////////////////////////////////////////////////////////////////////// + +BETAJAEN_CC_NAMESPACE_START + +template <typename Type> +class BETAJAEN_CC_CLASS_EXPORT Vector { + + public: + typedef Type* TypePtr; + + TypePtr j; + unsigned int jSize; + + Vector(unsigned int j_size) + { + + } + + ~Vector() + { + + } + +}; + +BETAJAEN_CC_NAMESPACE_END + +////////////////////////////////////////////////////////////////////////// +#if 0 +BETAJAEN_CC_NAMESPACE_START + +template <typename Type> +class BETAJAEN_CC_TEMPLATE_CLASS_EXPORT Matrix { + +public: + typedef Type* TypePtr; + + TypePtr ij; + unsigned int iSize, + jSize; + + class MatrixIterator { + public: + + enum IteratorRole { + IR_COLUMN, + IR_ROW + }; + + MatrixIterator(Matrix* _matrix, IteratorRole _role, unsigned int _iterator = 0) + mMatrix(_matrix), mRole(_role), mIterator(_iterator) + { + } + + Ma... [truncated message content] |
From: <and...@us...> - 2008-02-16 01:42:54
|
Revision: 570 http://python-ogre.svn.sourceforge.net/python-ogre/?rev=570&view=rev Author: andy_miller Date: 2008-02-15 17:43:00 -0800 (Fri, 15 Feb 2008) Log Message: ----------- More Thirdparty Cleanup Removed Paths: ------------- trunk/python-ogre/ThirdParty/nxogre/FireState.cpp trunk/python-ogre/ThirdParty/ogrebullet/Collisions/OgreBulletCollisionsBoxShape.cpp trunk/python-ogre/ThirdParty/ogrebullet/Collisions/OgreBulletCollisionsCompoundShape.cpp trunk/python-ogre/ThirdParty/ogrebullet/Collisions/OgreBulletCollisionsConeShape.cpp trunk/python-ogre/ThirdParty/ogrebullet/Collisions/OgreBulletCollisionsConvexCast.h trunk/python-ogre/ThirdParty/ogrebullet/Collisions/OgreBulletCollisionsConvexHullShape.cpp trunk/python-ogre/ThirdParty/ogrebullet/Collisions/OgreBulletCollisionsCylinderShape.cpp trunk/python-ogre/ThirdParty/ogrebullet/Collisions/OgreBulletCollisionsDebugContact.cpp trunk/python-ogre/ThirdParty/ogrebullet/Collisions/OgreBulletCollisionsDebugDrawer.cpp trunk/python-ogre/ThirdParty/ogrebullet/Collisions/OgreBulletCollisionsDebugLines.cpp trunk/python-ogre/ThirdParty/ogrebullet/Collisions/OgreBulletCollisionsDebugShape.cpp trunk/python-ogre/ThirdParty/ogrebullet/Collisions/OgreBulletCollisionsMeshToShapeConverter.cpp trunk/python-ogre/ThirdParty/ogrebullet/Collisions/OgreBulletCollisionsMinkowskiSumShape.cpp trunk/python-ogre/ThirdParty/ogrebullet/Collisions/OgreBulletCollisionsMultiSphereShape.cpp trunk/python-ogre/ThirdParty/ogrebullet/Collisions/OgreBulletCollisionsSphereShape.cpp trunk/python-ogre/ThirdParty/ogrebullet/Collisions/OgreBulletCollisionsStaticPlaneShape.cpp trunk/python-ogre/ThirdParty/ogrebullet/Collisions/OgreBulletCollisionsTriangleShape.cpp trunk/python-ogre/ThirdParty/ogrebullet/Collisions/OgreBulletCollisionsTrimeshShape.cpp trunk/python-ogre/ThirdParty/ogrebullet/Dynamics/OgreBulletDynamics6DofConstraint.cpp trunk/python-ogre/ThirdParty/ogrebullet/Dynamics/OgreBulletDynamicsConeTwistConstraint.cpp trunk/python-ogre/ThirdParty/ogrebullet/Dynamics/OgreBulletDynamicsHingeConstraint.cpp trunk/python-ogre/ThirdParty/ogrebullet/Dynamics/OgreBulletDynamicsPoint2pointConstraint.cpp trunk/python-ogre/ThirdParty/ogrebullet/Dynamics/OgreBulletDynamicsRaycastVehicle.cpp Deleted: trunk/python-ogre/ThirdParty/nxogre/FireState.cpp =================================================================== --- trunk/python-ogre/ThirdParty/nxogre/FireState.cpp 2008-02-16 01:41:26 UTC (rev 569) +++ trunk/python-ogre/ThirdParty/nxogre/FireState.cpp 2008-02-16 01:43:00 UTC (rev 570) @@ -1 +0,0 @@ -// FireState Deleted: trunk/python-ogre/ThirdParty/ogrebullet/Collisions/OgreBulletCollisionsBoxShape.cpp =================================================================== --- trunk/python-ogre/ThirdParty/ogrebullet/Collisions/OgreBulletCollisionsBoxShape.cpp 2008-02-16 01:41:26 UTC (rev 569) +++ trunk/python-ogre/ThirdParty/ogrebullet/Collisions/OgreBulletCollisionsBoxShape.cpp 2008-02-16 01:43:00 UTC (rev 570) @@ -1,49 +0,0 @@ -/*************************************************************************** - -This source file is part of OGREBULLET -(Object-oriented Graphics Rendering Engine Bullet Wrapper) -For the latest info, see http://www.ogre3d.org/phpBB2addons/viewforum.php?f=10 - -Copyright (c) 2007 tua...@gm... - - - -This program is free software; you can redistribute it and/or modify it under -the terms of the GNU Lesser General Public License as published by the Free Software -Foundation; either version 2 of the License, or (at your option) any later -version. - -This program is distributed in the hope that it will be useful, but WITHOUT -ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS -FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along with -this program; if not, write to the Free Software Foundation, Inc., 59 Temple -Place - Suite 330, Boston, MA 02111-1307, USA, or go to -http://www.gnu.org/copyleft/lesser.txt. ------------------------------------------------------------------------------ -*/ - -#include "OgreBulletCollisions.h" - -#include "Utils/OgreBulletConverter.h" -#include "Shapes/OgreBulletCollisionsBoxShape.h" -#include "Debug/OgreBulletCollisionsDebugLines.h" - -using namespace Ogre; -using namespace OgreBulletCollisions; - -namespace OgreBulletCollisions -{ - // ------------------------------------------------------------------------- - BoxCollisionShape::BoxCollisionShape(const Vector3 &bodyBounds): - CollisionShape() - { - mShape = new btBoxShape(OgreBtConverter::to(bodyBounds)); - } - // ------------------------------------------------------------------------- - BoxCollisionShape::~BoxCollisionShape() - { - } -} - Deleted: trunk/python-ogre/ThirdParty/ogrebullet/Collisions/OgreBulletCollisionsCompoundShape.cpp =================================================================== --- trunk/python-ogre/ThirdParty/ogrebullet/Collisions/OgreBulletCollisionsCompoundShape.cpp 2008-02-16 01:41:26 UTC (rev 569) +++ trunk/python-ogre/ThirdParty/ogrebullet/Collisions/OgreBulletCollisionsCompoundShape.cpp 2008-02-16 01:43:00 UTC (rev 570) @@ -1,93 +0,0 @@ -/*************************************************************************** - -This source file is part of OGREBULLET -(Object-oriented Graphics Rendering Engine Bullet Wrapper) -For the latest info, see http://www.ogre3d.org/phpBB2addons/viewforum.php?f=10 - -Copyright (c) 2007 tua...@gm... - - - -This program is free software; you can redistribute it and/or modify it under -the terms of the GNU Lesser General Public License as published by the Free Software -Foundation; either version 2 of the License, or (at your option) any later -version. - -This program is distributed in the hope that it will be useful, but WITHOUT -ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS -FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along with -this program; if not, write to the Free Software Foundation, Inc., 59 Temple -Place - Suite 330, Boston, MA 02111-1307, USA, or go to -http://www.gnu.org/copyleft/lesser.txt. ------------------------------------------------------------------------------ -*/ - -#include "OgreBulletCollisions.h" -#include "Utils/OgreBulletConverter.h" - -#include "Shapes/OgreBulletCollisionsCompoundShape.h" - -using namespace Ogre; -using namespace OgreBulletCollisions; - -namespace OgreBulletCollisions -{ - // ------------------------------------------------------------------------- - CompoundCollisionShape::CompoundCollisionShape(): - CollisionShape() - { - mShape = new btCompoundShape(); - } - // ------------------------------------------------------------------------- - CompoundCollisionShape::~CompoundCollisionShape() - { - } - // ------------------------------------------------------------------------- - void CompoundCollisionShape::addChildShape(CollisionShape *shape, const Vector3 &pos, const Quaternion &quat) - { - btTransform localTrans; - - //localTrans.setIdentity(); - //localTrans effectively shifts the center of mass with respect to the chassis - localTrans.setOrigin (OgreBtConverter::to(pos)); - localTrans.setRotation (OgreBtConverter::to(quat)); - - static_cast <btCompoundShape *> (mShape)->addChildShape(localTrans, shape->getBulletShape()); - - mShapes.push_back (shape); - } - // ------------------------------------------------------------------------- - bool CompoundCollisionShape::drawWireFrame(DebugLines *wire, - const Ogre::Vector3 &pos, - const Ogre::Quaternion &quat) const - { - bool isVisual = false; - btCompoundShape * const myBtCompoundShape = static_cast <btCompoundShape *> (mShape); - int numChildShapes = myBtCompoundShape->getNumChildShapes (); - - int i; - for (std::vector<CollisionShape *>::const_iterator itShape = mShapes.begin(); - itShape != mShapes.end(); ++itShape) - { - const btCollisionShape * const shape = (*itShape)->getBulletShape(); - for (i = 0; i < numChildShapes; i++) - { - if (myBtCompoundShape->getChildShape (i) == shape) - break; - } - assert (i < numChildShapes); - - const btTransform &localTrans = myBtCompoundShape->getChildTransform (i); - - const Vector3 pos (BtOgreConverter::to(localTrans.getOrigin ())); - const Quaternion quat( BtOgreConverter::to(localTrans.getRotation ())); - - if ((*itShape)->drawWireFrame(wire, pos, quat)) - isVisual = true; - } - return isVisual; - } -} - Deleted: trunk/python-ogre/ThirdParty/ogrebullet/Collisions/OgreBulletCollisionsConeShape.cpp =================================================================== --- trunk/python-ogre/ThirdParty/ogrebullet/Collisions/OgreBulletCollisionsConeShape.cpp 2008-02-16 01:41:26 UTC (rev 569) +++ trunk/python-ogre/ThirdParty/ogrebullet/Collisions/OgreBulletCollisionsConeShape.cpp 2008-02-16 01:43:00 UTC (rev 570) @@ -1,54 +0,0 @@ -/*************************************************************************** - -This source file is part of OGREBULLET -(Object-oriented Graphics Rendering Engine Bullet Wrapper) -For the latest info, see http://www.ogre3d.org/phpBB2addons/viewforum.php?f=10 - -Copyright (c) 2007 tua...@gm... - - - -This program is free software; you can redistribute it and/or modify it under -the terms of the GNU Lesser General Public License as published by the Free Software -Foundation; either version 2 of the License, or (at your option) any later -version. - -This program is distributed in the hope that it will be useful, but WITHOUT -ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS -FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along with -this program; if not, write to the Free Software Foundation, Inc., 59 Temple -Place - Suite 330, Boston, MA 02111-1307, USA, or go to -http://www.gnu.org/copyleft/lesser.txt. ------------------------------------------------------------------------------ -*/ - -#include "OgreBulletCollisions.h" - -#include "Shapes/OgreBulletCollisionsConeShape.h" -#include "Debug/OgreBulletCollisionsDebugLines.h" - -using namespace Ogre; -using namespace OgreBulletCollisions; - -namespace OgreBulletCollisions -{ - // ------------------------------------------------------------------------- - ConeCollisionShape::ConeCollisionShape(Real radius, Real height, const Vector3 &axe): - CollisionShape() - { - if (axe == Vector3::UNIT_Y) - mShape = new btConeShape (btScalar (radius), btScalar (height)); - else if (axe == Vector3::UNIT_X) - mShape = new btConeShapeX (btScalar (radius), btScalar (height)); - else - mShape = new btConeShapeZ (btScalar (radius), btScalar (height)); - - } - // ------------------------------------------------------------------------- - ConeCollisionShape::~ConeCollisionShape () - { - } -} - Deleted: trunk/python-ogre/ThirdParty/ogrebullet/Collisions/OgreBulletCollisionsConvexCast.h =================================================================== --- trunk/python-ogre/ThirdParty/ogrebullet/Collisions/OgreBulletCollisionsConvexCast.h 2008-02-16 01:41:26 UTC (rev 569) +++ trunk/python-ogre/ThirdParty/ogrebullet/Collisions/OgreBulletCollisionsConvexCast.h 2008-02-16 01:43:00 UTC (rev 570) @@ -1,47 +0,0 @@ -/*************************************************************************** - -This source file is part of OGREBULLET -(Object-oriented Graphics Rendering Engine Bullet Wrapper) -For the latest info, see http://www.ogre3d.org/phpBB2addons/viewforum.php?f=10 - -Copyright (c) 2007 tua...@gm... - - - -This program is free software; you can redistribute it and/or modify it under -the terms of the GNU Lesser General Public License as published by the Free Software -Foundation; either version 2 of the License, or (at your option) any later -version. - -This program is distributed in the hope that it will be useful, but WITHOUT -ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS -FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along with -this program; if not, write to the Free Software Foundation, Inc., 59 Temple -Place - Suite 330, Boston, MA 02111-1307, USA, or go to -http://www.gnu.org/copyleft/lesser.txt. ------------------------------------------------------------------------------ -*/ - -#ifndef _OGREBULLETCOLLISIONS_BoxShape_H -#define _OGREBULLETCOLLISIONS_BoxShape_H - -#include "OgreBulletCollisionsPreRequisites.h" - -#include "OgreBulletCollisionsShape.h" - -namespace OgreBulletCollisions -{ - // ------------------------------------------------------------------------- - // basic BoxShape - class BoxCollisionShape : public CollisionShape - { - public: - BoxCollisionShape(const Ogre::Vector3 &boxBounds); - virtual ~BoxCollisionShape(); - - }; -} -#endif //_OGREBULLETCOLLISIONS_BoxShape_H - Deleted: trunk/python-ogre/ThirdParty/ogrebullet/Collisions/OgreBulletCollisionsConvexHullShape.cpp =================================================================== --- trunk/python-ogre/ThirdParty/ogrebullet/Collisions/OgreBulletCollisionsConvexHullShape.cpp 2008-02-16 01:41:26 UTC (rev 569) +++ trunk/python-ogre/ThirdParty/ogrebullet/Collisions/OgreBulletCollisionsConvexHullShape.cpp 2008-02-16 01:43:00 UTC (rev 570) @@ -1,55 +0,0 @@ -/*************************************************************************** - -This source file is part of OGREBULLET -(Object-oriented Graphics Rendering Engine Bullet Wrapper) -For the latest info, see http://www.ogre3d.org/phpBB2addons/viewforum.php?f=10 - -Copyright (c) 2007 tua...@gm... - - - -This program is free software; you can redistribute it and/or modify it under -the terms of the GNU Lesser General Public License as published by the Free Software -Foundation; either version 2 of the License, or (at your option) any later -version. - -This program is distributed in the hope that it will be useful, but WITHOUT -ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS -FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along with -this program; if not, write to the Free Software Foundation, Inc., 59 Temple -Place - Suite 330, Boston, MA 02111-1307, USA, or go to -http://www.gnu.org/copyleft/lesser.txt. ------------------------------------------------------------------------------ -*/ - -#include "OgreBulletCollisions.h" - -#include "Shapes/OgreBulletCollisionsConvexHullShape.h" -#include "Debug/OgreBulletCollisionsDebugLines.h" - -using namespace Ogre; -using namespace OgreBulletCollisions; - -namespace OgreBulletCollisions -{ - // ------------------------------------------------------------------------- - ConvexHullCollisionShape::ConvexHullCollisionShape(const Real* points, int numPoints, int stride): - CollisionShape() - { - mShape = new btConvexHullShape((btScalar*) points, numPoints, stride); - } - // ------------------------------------------------------------------------- - ConvexHullCollisionShape::ConvexHullCollisionShape(): - CollisionShape() - { - mShape = new btConvexHullShape(); - } - // ------------------------------------------------------------------------- - ConvexHullCollisionShape::~ConvexHullCollisionShape() - { - } - -} - Deleted: trunk/python-ogre/ThirdParty/ogrebullet/Collisions/OgreBulletCollisionsCylinderShape.cpp =================================================================== --- trunk/python-ogre/ThirdParty/ogrebullet/Collisions/OgreBulletCollisionsCylinderShape.cpp 2008-02-16 01:41:26 UTC (rev 569) +++ trunk/python-ogre/ThirdParty/ogrebullet/Collisions/OgreBulletCollisionsCylinderShape.cpp 2008-02-16 01:43:00 UTC (rev 570) @@ -1,54 +0,0 @@ -/*************************************************************************** - -This source file is part of OGREBULLET -(Object-oriented Graphics Rendering Engine Bullet Wrapper) -For the latest info, see http://www.ogre3d.org/phpBB2addons/viewforum.php?f=10 - -Copyright (c) 2007 tua...@gm... - - - -This program is free software; you can redistribute it and/or modify it under -the terms of the GNU Lesser General Public License as published by the Free Software -Foundation; either version 2 of the License, or (at your option) any later -version. - -This program is distributed in the hope that it will be useful, but WITHOUT -ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS -FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along with -this program; if not, write to the Free Software Foundation, Inc., 59 Temple -Place - Suite 330, Boston, MA 02111-1307, USA, or go to -http://www.gnu.org/copyleft/lesser.txt. ------------------------------------------------------------------------------ -*/ - -#include "OgreBulletCollisions.h" -#include "Utils/OgreBulletConverter.h" - -#include "Shapes/OgreBulletCollisionsCylinderShape.h" -#include "Debug/OgreBulletCollisionsDebugLines.h" - -using namespace Ogre; -using namespace OgreBulletCollisions; - -namespace OgreBulletCollisions -{ - // ------------------------------------------------------------------------- - CylinderCollisionShape::CylinderCollisionShape(const Vector3 &halfExtents, const Vector3 &axe): - CollisionShape() - { - if (axe == Vector3::UNIT_X) - mShape = new btCylinderShapeX(OgreBtConverter::to(halfExtents)); - else if (axe == Vector3::UNIT_Y) - mShape = new btCylinderShape (OgreBtConverter::to(halfExtents)); - else if (axe == Vector3::UNIT_Z) - mShape = new btCylinderShapeZ(OgreBtConverter::to(halfExtents)); - } - // ------------------------------------------------------------------------- - CylinderCollisionShape::~CylinderCollisionShape() - { - } -} - Deleted: trunk/python-ogre/ThirdParty/ogrebullet/Collisions/OgreBulletCollisionsDebugContact.cpp =================================================================== --- trunk/python-ogre/ThirdParty/ogrebullet/Collisions/OgreBulletCollisionsDebugContact.cpp 2008-02-16 01:41:26 UTC (rev 569) +++ trunk/python-ogre/ThirdParty/ogrebullet/Collisions/OgreBulletCollisionsDebugContact.cpp 2008-02-16 01:43:00 UTC (rev 570) @@ -1,650 +0,0 @@ -/*************************************************************************** - -This source file is part of OGREBULLET -(Object-oriented Graphics Rendering Engine Bullet Wrapper) -For the latest info, see http://www.ogre3d.org/phpBB2addons/viewforum.php?f=10 - -Copyright (c) 2007 tua...@gm... - - - -This program is free software; you can redistribute it and/or modify it under -the terms of the GNU Lesser General Public License as published by the Free Software -Foundation; either version 2 of the License, or (at your option) any later -version. - -This program is distributed in the hope that it will be useful, but WITHOUT -ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS -FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along with -this program; if not, write to the Free Software Foundation, Inc., 59 Temple -Place - Suite 330, Boston, MA 02111-1307, USA, or go to -http://www.gnu.org/copyleft/lesser.txt. ------------------------------------------------------------------------------ -*/ - - -#include "OgreBulletCollisions.h" - -#include "Ogre.h" -#include "OgreFontManager.h" - -#include "Debug/OgreBulletCollisionsDebugContact.h" -#include "OgreBulletCollisionsShape.h" -#include "OgreBulletCollisionsObject.h" -#include "OgreBulletCollisionsWorld.h" - -using namespace Ogre; - -#define POS_TEX_BINDING 0 -#define COLOUR_BINDING 1 - -namespace OgreBulletCollisions -{ - //------------------------------------------------------------------------------------------------ - DebugContact::DebugContact(const String &name, CollisionsWorld *world) : - _name(name), - _world(world), - _enabled(false) - { - // scene node - _node = _world->getSceneManager()->getRootSceneNode ()->createChildSceneNode (); - - // sphere attach to contact point - _point = _world->getSceneManager()->createEntity(name + String("_debug_point"), "sphere.mesh"); - _point_node = _node->createChildSceneNode (); - _point_node->attachObject (_point); - _point_node->setScale(0.001, 0.001, 0.001); - - // normal direction debug - _normal = new DebugNormal(); - _node->attachObject (_normal); - - // text info on contact - _text = new DebugContactText(name + String("_debug_text"), _node->createChildSceneNode ()); - _text->setPosition (Vector3(0,5,0)); - _text->setCaption ("-"); - _text->setVisible (false); - - _node->setVisible (false); - } - //------------------------------------------------------------------------------------------------ - DebugContact::~DebugContact() - { - delete _text; - - _point_node->detachObject (_point->getName ()); - _node->detachObject (_normal->getName ()); - - _world->getSceneManager()->destroyEntity (_point->getName ()); - - _node->detachAllObjects (); - _node->removeAndDestroyAllChildren (); - - delete _normal; - } - //------------------------------------------------------------------------------------------------ - void DebugContact::update(const Ogre::Vector3 &normal, const Ogre::Vector3 &pt, const Ogre::Real depth) - { - _node->setPosition (pt); - - _point_node->setPosition (depth * normal); - - //String contactLabel("p: "); - //contactLabel = contactLabel + StringConverter::toString(contact->getPosition()); - //contactLabel = contactLabel + ", n: "; - //contactLabel = contactLabel + StringConverter::toString(contact->getNormal()); - //_text->setCaption (contactLabel); - //_text->setVisible (false); - - //_text->setPosition (contact->getPosition () + Vector3(0,5,0)); - - _normal->update (normal, pt, depth); - } - //------------------------------------------------------------------------------------------------ - bool DebugContact::isEnabled () const - { - return _enabled; - } - //------------------------------------------------------------------------------------------------ - void DebugContact::setEnabled (bool enable) - { - _enabled = enable; - _node->setVisible (_enabled); - }; - //------------------------------------------------------------------------------------------------ - void DebugNormal::update(const Ogre::Vector3 &normal, const Ogre::Vector3 &pt, const Ogre::Real depth) - { - DebugLines::clear (); - // set normal following contact normal - //contact->_normal - //contact->_position - DebugLines::addLine (Vector3::ZERO, - 5*normal); - DebugLines::draw (); - } - //------------------------------------------------------------------------------------------------ - DebugContactText::DebugContactText(const String &name, - SceneNode *node, - const String &caption, - const String &fontName, - int charHeight, - const ColourValue &color) - : mpCam(NULL) - , mpWin(NULL) - , mpFont(NULL) - , mName(name) - , mCaption(caption) - , mFontName(fontName) - , mCharHeight(charHeight) - , mColor(color) - , mType("DebugContact") - , mTimeUntilNextToggle(0) - , mSpaceWidth(0) - , mUpdateColors(true) - , mOnTop(false) - , mHorizontalAlignment(H_LEFT) - , mVerticalAlignment(V_BELOW) - , mAdditionalHeight(0.0) - , mNode(node) - - { - if (name.empty()) - Exception(Exception::ERR_INVALIDPARAMS, "Trying to create DebugContact without name", "DebugContact::DebugContact"); -// -// if (caption.empty()) -// Exception(Exception::ERR_INVALIDPARAMS, "Trying to create DebugContact without caption", "DebugContact::DebugContact"); - - mRenderOp.vertexData = NULL; - this->setFontName(mFontName); - //this->_setupGeometry(); - mNode->attachObject(this); - } - //------------------------------------------------------------------------------------------------ - DebugContactText::~DebugContactText() - { - mNode->detachObject(this->getName()); - if (mRenderOp.vertexData) - delete mRenderOp.vertexData; - } -#if (OGRE_VERSION >= ((1 << 16) | (5 << 8) | 0)) // must have at least shoggoth (1.5.0) - void DebugContactText::visitRenderables(Renderable::Visitor* visitor, - bool debugRenderables) - { - visitor->visit(this, 0, false); - } -#endif - //------------------------------------------------------------------------------------------------ - void DebugContactText::setPosition(const Vector3 &pos) - { - mNode->setPosition (pos); - } - //------------------------------------------------------------------------------------------------ - void DebugContactText::setFontName(const String &fontName) - { - if((Ogre::MaterialManager::getSingletonPtr()->resourceExists(mName + "Material"))) - { - Ogre::MaterialManager::getSingleton().remove(mName + "Material"); - } - - if (mFontName != fontName || mpMaterial.isNull() || !mpFont) - { - mFontName = fontName; - mpFont = (Font *)FontManager::getSingleton().getByName(mFontName).getPointer(); - if (!mpFont) - Exception(Exception::ERR_ITEM_NOT_FOUND, "Could not find font " + fontName, "DebugContact::setFontName"); - - mpFont->load(); - if (!mpMaterial.isNull()) - { - MaterialManager::getSingletonPtr()->remove(mpMaterial->getName()); - mpMaterial.setNull(); - } - - mpMaterial = mpFont->getMaterial()->clone(mName + "Material"); - if (!mpMaterial->isLoaded()) - mpMaterial->load(); - - mpMaterial->setDepthCheckEnabled(!mOnTop); - //mpMaterial->setDepthBias(!mOnTop); - mpMaterial->setDepthBias(0,!mOnTop); - mpMaterial->setDepthWriteEnabled(mOnTop); - mpMaterial->setLightingEnabled(false); - mNeedUpdate = true; - } - } - //------------------------------------------------------------------------------------------------ - void DebugContactText::setCaption(const String &caption) - { - if (caption != mCaption) - { - mCaption = caption; - mNeedUpdate = true; - } - } - //------------------------------------------------------------------------------------------------ - void DebugContactText::setColor(const ColourValue &color) - { - if (color != mColor) - { - mColor = color; - mUpdateColors = true; - } - } - //------------------------------------------------------------------------------------------------ - void DebugContactText::setCharacterHeight(unsigned int height) - { - if (height != mCharHeight) - { - mCharHeight = height; - mNeedUpdate = true; - } - } - //------------------------------------------------------------------------------------------------ - void DebugContactText::setSpaceWidth(unsigned int width) - { - if (width != mSpaceWidth) - { - mSpaceWidth = width; - mNeedUpdate = true; - } - } - //------------------------------------------------------------------------------------------------ - void DebugContactText::setTextAlignment(const HorizontalAlignment& horizontalAlignment, const VerticalAlignment& verticalAlignment) - { - if(mHorizontalAlignment != horizontalAlignment) - { - mHorizontalAlignment = horizontalAlignment; - mNeedUpdate = true; - } - if(mVerticalAlignment != verticalAlignment) - { - mVerticalAlignment = verticalAlignment; - mNeedUpdate = true; - } - } - //------------------------------------------------------------------------------------------------ - void DebugContactText::setAdditionalHeight( Real height ) - { - if( mAdditionalHeight != height ) - { - mAdditionalHeight = height; - mNeedUpdate = true; - } - } - //------------------------------------------------------------------------------------------------ - void DebugContactText::showOnTop(bool show) - { - if( mOnTop != show && !mpMaterial.isNull() ) - { - mOnTop = show; - mpMaterial->setDepthBias(0,!mOnTop); - mpMaterial->setDepthCheckEnabled(!mOnTop); - mpMaterial->setDepthWriteEnabled(mOnTop); - } - } - //------------------------------------------------------------------------------------------------ - void DebugContactText::_setupGeometry() - { - assert(mpFont); - assert(!mpMaterial.isNull()); - - unsigned int vertexCount = static_cast<unsigned int>(mCaption.size() * 6); - - if (mRenderOp.vertexData) - { - // Removed this test as it causes problems when replacing a caption - // of the same size: replacing "Hello" with "hello" - // as well as when changing the text alignment - //if (mRenderOp.vertexData->vertexCount != vertexCount) - { - delete mRenderOp.vertexData; - mRenderOp.vertexData = NULL; - mUpdateColors = true; - } - } - - if (!mRenderOp.vertexData) - mRenderOp.vertexData = new VertexData(); - - mRenderOp.indexData = 0; - mRenderOp.vertexData->vertexStart = 0; - mRenderOp.vertexData->vertexCount = vertexCount; - mRenderOp.operationType = RenderOperation::OT_TRIANGLE_LIST; - mRenderOp.useIndexes = false; - - VertexDeclaration *decl = mRenderOp.vertexData->vertexDeclaration; - VertexBufferBinding *bind = mRenderOp.vertexData->vertexBufferBinding; - size_t offset = 0; - - // create/bind positions/tex.ccord. buffer - if (!decl->findElementBySemantic(VES_POSITION)) - decl->addElement(POS_TEX_BINDING, offset, VET_FLOAT3, VES_POSITION); - - offset += VertexElement::getTypeSize(VET_FLOAT3); - - if (!decl->findElementBySemantic(VES_TEXTURE_COORDINATES)) - decl->addElement(POS_TEX_BINDING, offset, Ogre::VET_FLOAT2, Ogre::VES_TEXTURE_COORDINATES, 0); - - HardwareVertexBufferSharedPtr ptbuf = HardwareBufferManager::getSingleton().createVertexBuffer(decl->getVertexSize(POS_TEX_BINDING), - mRenderOp.vertexData->vertexCount, - HardwareBuffer::HBU_DYNAMIC_WRITE_ONLY); - bind->setBinding(POS_TEX_BINDING, ptbuf); - - // Colours - store these in a separate buffer because they change less often - if (!decl->findElementBySemantic(VES_DIFFUSE)) - decl->addElement(COLOUR_BINDING, 0, VET_COLOUR, VES_DIFFUSE); - - HardwareVertexBufferSharedPtr cbuf = HardwareBufferManager::getSingleton().createVertexBuffer(decl->getVertexSize(COLOUR_BINDING), - mRenderOp.vertexData->vertexCount, - HardwareBuffer::HBU_DYNAMIC_WRITE_ONLY); - bind->setBinding(COLOUR_BINDING, cbuf); - - size_t charlen = mCaption.size(); - Real *pPCBuff = static_cast<Real*>(ptbuf->lock(HardwareBuffer::HBL_DISCARD)); - - float largestWidth = 0; - float left = 0 * 2.0 - 1.0; - float top = -((0 * 2.0) - 1.0); - - // Derive space width from a capital A - if (mSpaceWidth == 0) - mSpaceWidth = mpFont->getGlyphAspectRatio('A') * mCharHeight * 2.0; - - // for calculation of AABB - Ogre::Vector3 min, max, currPos; - Ogre::Real maxSquaredRadius; - bool first = true; - - // Use iterator - String::iterator i, iend; - iend = mCaption.end(); - bool newLine = true; - Real len = 0.0f; - - if(mVerticalAlignment == DebugContactText::V_ABOVE) - { - // Raise the first line of the caption - top += mCharHeight; - for (i = mCaption.begin(); i != iend; ++i) - { - if (*i == '\n') - top += mCharHeight * 2.0; - } - } - - for (i = mCaption.begin(); i != iend; ++i) - { - if (newLine) - { - len = 0.0f; - for (String::iterator j = i; j != iend && *j != '\n'; j++) - { - if (*j == ' ') - len += mSpaceWidth; - else - len += mpFont->getGlyphAspectRatio(*j) * mCharHeight * 2.0; - } - newLine = false; - } - - if (*i == '\n') - { - left = 0 * 2.0 - 1.0; - top -= mCharHeight * 2.0; - newLine = true; - continue; - } - - if (*i == ' ') - { - // Just leave a gap, no tris - left += mSpaceWidth; - // Also reduce tri count - mRenderOp.vertexData->vertexCount -= 6; - continue; - } - - Real horiz_height = mpFont->getGlyphAspectRatio(*i); - - //mpFont->getGlyphTexCoords(*i, u1, v1, u2, v2); - const Font::UVRect &uvRect = mpFont->getGlyphTexCoords(*i); - const Real u1 = uvRect.left; - const Real u2 = uvRect.right; - const Real v1 = uvRect.top; - const Real v2 = uvRect.bottom; - - // each vert is (x, y, z, u, v) - //------------------------------------------------------------------------------------- - // First tri - // - // Upper left - if(mHorizontalAlignment == DebugContactText::H_LEFT) - *pPCBuff++ = left; - else - *pPCBuff++ = left - (len / 2); - *pPCBuff++ = top; - *pPCBuff++ = -1.0; - *pPCBuff++ = u1; - *pPCBuff++ = v1; - - // Deal with bounds - if(mHorizontalAlignment == DebugContactText::H_LEFT) - currPos = Ogre::Vector3(left, top, -1.0); - else - currPos = Ogre::Vector3(left - (len / 2), top, -1.0); - if (first) - { - min = max = currPos; - maxSquaredRadius = currPos.squaredLength(); - first = false; - } - else - { - min.makeFloor(currPos); - max.makeCeil(currPos); - maxSquaredRadius = std::max(maxSquaredRadius, currPos.squaredLength()); - } - - top -= mCharHeight * 2.0; - - // Bottom left - if(mHorizontalAlignment == DebugContactText::H_LEFT) - *pPCBuff++ = left; - else - *pPCBuff++ = left - (len / 2); - *pPCBuff++ = top; - *pPCBuff++ = -1.0; - *pPCBuff++ = u1; - *pPCBuff++ = v2; - - // Deal with bounds - if(mHorizontalAlignment == DebugContactText::H_LEFT) - currPos = Ogre::Vector3(left, top, -1.0); - else - currPos = Ogre::Vector3(left - (len / 2), top, -1.0); - min.makeFloor(currPos); - max.makeCeil(currPos); - maxSquaredRadius = std::max(maxSquaredRadius, currPos.squaredLength()); - - top += mCharHeight * 2.0; - left += horiz_height * mCharHeight * 2.0; - - // Top right - if(mHorizontalAlignment == DebugContactText::H_LEFT) - *pPCBuff++ = left; - else - *pPCBuff++ = left - (len / 2); - *pPCBuff++ = top; - *pPCBuff++ = -1.0; - *pPCBuff++ = u2; - *pPCBuff++ = v1; - //------------------------------------------------------------------------------------- - - // Deal with bounds - if(mHorizontalAlignment == DebugContactText::H_LEFT) - currPos = Ogre::Vector3(left, top, -1.0); - else - currPos = Ogre::Vector3(left - (len / 2), top, -1.0); - min.makeFloor(currPos); - max.makeCeil(currPos); - maxSquaredRadius = std::max(maxSquaredRadius, currPos.squaredLength()); - - //------------------------------------------------------------------------------------- - // Second tri - // - // Top right (again) - if(mHorizontalAlignment == DebugContactText::H_LEFT) - *pPCBuff++ = left; - else - *pPCBuff++ = left - (len / 2); - *pPCBuff++ = top; - *pPCBuff++ = -1.0; - *pPCBuff++ = u2; - *pPCBuff++ = v1; - - currPos = Ogre::Vector3(left, top, -1.0); - min.makeFloor(currPos); - max.makeCeil(currPos); - maxSquaredRadius = std::max(maxSquaredRadius, currPos.squaredLength()); - - top -= mCharHeight * 2.0; - left -= horiz_height * mCharHeight * 2.0; - - // Bottom left (again) - if(mHorizontalAlignment == DebugContactText::H_LEFT) - *pPCBuff++ = left; - else - *pPCBuff++ = left - (len / 2); - *pPCBuff++ = top; - *pPCBuff++ = -1.0; - *pPCBuff++ = u1; - *pPCBuff++ = v2; - - currPos = Ogre::Vector3(left, top, -1.0); - min.makeFloor(currPos); - max.makeCeil(currPos); - maxSquaredRadius = std::max(maxSquaredRadius, currPos.squaredLength()); - - left += horiz_height * mCharHeight * 2.0; - - // Bottom right - if(mHorizontalAlignment == DebugContactText::H_LEFT) - *pPCBuff++ = left; - else - *pPCBuff++ = left - (len / 2); - *pPCBuff++ = top; - *pPCBuff++ = -1.0; - *pPCBuff++ = u2; - *pPCBuff++ = v2; - //------------------------------------------------------------------------------------- - - currPos = Ogre::Vector3(left, top, -1.0); - min.makeFloor(currPos); - max.makeCeil(currPos); - maxSquaredRadius = std::max(maxSquaredRadius, currPos.squaredLength()); - - // Go back up with top - top += mCharHeight * 2.0; - - float currentWidth = (left + 1)/2 - 0; - if (currentWidth > largestWidth) - largestWidth = currentWidth; - } - - // Unlock vertex buffer - ptbuf->unlock(); - - // update AABB/Sphere radius - mAABB = Ogre::AxisAlignedBox(min, max); - mRadius = Ogre::Math::Sqrt(maxSquaredRadius); - - if (mUpdateColors) - this->_updateColors(); - - mNeedUpdate = false; - } - //------------------------------------------------------------------------------------------------ - void DebugContactText::_updateColors(void) - { - assert(mpFont); - assert(!mpMaterial.isNull()); - - // Convert to system-specific - RGBA color; - Root::getSingleton().convertColourValue(mColor, &color); - HardwareVertexBufferSharedPtr vbuf = mRenderOp.vertexData->vertexBufferBinding->getBuffer(COLOUR_BINDING); - RGBA *pDest = static_cast<RGBA*>(vbuf->lock(HardwareBuffer::HBL_DISCARD)); - for (unsigned int i = 0; i < mRenderOp.vertexData->vertexCount; ++i) - *pDest++ = color; - vbuf->unlock(); - mUpdateColors = false; - } - //------------------------------------------------------------------------------------------------ - const Quaternion& DebugContactText::getWorldOrientation(void) const - { - assert(mpCam); - return const_cast<Quaternion&>(mpCam->getDerivedOrientation()); - } - //------------------------------------------------------------------------------------------------ - const Vector3& DebugContactText::getWorldPosition(void) const - { - assert(mParentNode); - return mParentNode->_getDerivedPosition(); - } - //------------------------------------------------------------------------------------------------ - void DebugContactText::getWorldTransforms(Matrix4 *xform) const - { - if (this->isVisible() && mpCam) - { - Matrix3 rot3x3, scale3x3 = Matrix3::IDENTITY; - - // store rotation in a matrix - mpCam->getDerivedOrientation().ToRotationMatrix(rot3x3); - - // parent node position - Vector3 ppos = mParentNode->_getDerivedPosition() + Vector3::UNIT_Y*mAdditionalHeight; - - // apply scale - scale3x3[0][0] = mParentNode->_getDerivedScale().x / 2; - scale3x3[1][1] = mParentNode->_getDerivedScale().y / 2; - scale3x3[2][2] = mParentNode->_getDerivedScale().z / 2; - - // apply all transforms to xform - *xform = (rot3x3 * scale3x3); - xform->setTrans(ppos); - } - } - //------------------------------------------------------------------------------------------------ - void DebugContactText::getRenderOperation(RenderOperation &op) - { - if (this->isVisible()) - { - if (mNeedUpdate) - this->_setupGeometry(); - if (mUpdateColors) - this->_updateColors(); - op = mRenderOp; - } - } - //------------------------------------------------------------------------------------------------ - void DebugContactText::_notifyCurrentCamera(Camera *cam) - { - mpCam = cam; - } - //------------------------------------------------------------------------------------------------ - void DebugContactText::_updateRenderQueue(RenderQueue* queue) - { - if (this->isVisible()) - { - if (mNeedUpdate) - this->_setupGeometry(); - if (mUpdateColors) - this->_updateColors(); - - queue->addRenderable(this, mRenderQueueID, OGRE_RENDERABLE_DEFAULT_PRIORITY); - // queue->addRenderable(this, mRenderQueueID, RENDER_QUEUE_SKIES_LATE); - } - } -} Deleted: trunk/python-ogre/ThirdParty/ogrebullet/Collisions/OgreBulletCollisionsDebugDrawer.cpp =================================================================== --- trunk/python-ogre/ThirdParty/ogrebullet/Collisions/OgreBulletCollisionsDebugDrawer.cpp 2008-02-16 01:41:26 UTC (rev 569) +++ trunk/python-ogre/ThirdParty/ogrebullet/Collisions/OgreBulletCollisionsDebugDrawer.cpp 2008-02-16 01:43:00 UTC (rev 570) @@ -1,237 +0,0 @@ -/*************************************************************************** - -This source file is part of OGREBULLET -(Object-oriented Graphics Rendering Engine Bullet Wrapper) -For the latest info, see http://www.ogre3d.org/phpBB2addons/viewforum.php?f=10 - -Copyright (c) 2007 tua...@gm... - - - -This program is free software; you can redistribute it and/or modify it under -the terms of the GNU Lesser General Public License as published by the Free Software -Foundation; either version 2 of the License, or (at your option) any later -version. - -This program is distributed in the hope that it will be useful, but WITHOUT -ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS -FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along with -this program; if not, write to the Free Software Foundation, Inc., 59 Temple -Place - Suite 330, Boston, MA 02111-1307, USA, or go to -http://www.gnu.org/copyleft/lesser.txt. ------------------------------------------------------------------------------ -*/ - -#include "OgreBulletCollisions.h" - -#include "Debug/OgreBulletCollisionsDebugDrawer.h" -#include "Utils/OgreBulletConverter.h" - -using namespace OgreBulletCollisions; -using namespace Ogre; - -//------------------------------------------------------------------------------------------------ -DebugDrawer::DebugDrawer() : - DebugLines(), - btIDebugDraw(), - mDebugMode(0) -{ -} -//------------------------------------------------------------------------------------------------ -DebugDrawer::~DebugDrawer() -{ -} -//------------------------------------------------------------------------------------------------ -void DebugDrawer::reportErrorWarning(const char* warningString) -{ - Ogre::LogManager::getSingleton().getDefaultLog()->logMessage(warningString); -} -//------------------------------------------------------------------------------------------------ -void DebugDrawer::setDrawAabb(bool enable) -{ - if (enable) - mDebugMode |= btIDebugDraw::DBG_DrawAabb; - else - mDebugMode &= ~btIDebugDraw::DBG_DrawAabb; -} -//------------------------------------------------------------------------------------------------ -bool DebugDrawer::doesDrawAabb () const {return (mDebugMode & btIDebugDraw::DBG_DrawAabb) != 0;}; -//------------------------------------------------------------------------------------------------ -bool DebugDrawer::doesDrawWireframe () const {return (mDebugMode & btIDebugDraw::DBG_DrawWireframe) != 0;}; -//------------------------------------------------------------------------------------------------ -bool DebugDrawer::doesDrawFeaturesText () const {return (mDebugMode & btIDebugDraw::DBG_DrawFeaturesText) != 0;}; -//------------------------------------------------------------------------------------------------ -bool DebugDrawer::doesDrawContactPoints () const {return (mDebugMode & btIDebugDraw::DBG_DrawContactPoints) != 0;}; -//------------------------------------------------------------------------------------------------ -bool DebugDrawer::doesNoDeactivation () const {return (mDebugMode & btIDebugDraw::DBG_NoDeactivation) != 0;}; -//------------------------------------------------------------------------------------------------ -bool DebugDrawer::doesNoHelpText () const {return (mDebugMode & btIDebugDraw::DBG_NoHelpText) != 0;}; -//------------------------------------------------------------------------------------------------ -bool DebugDrawer::doesDrawText () const {return (mDebugMode & btIDebugDraw::DBG_DrawText) != 0;}; -//------------------------------------------------------------------------------------------------ -bool DebugDrawer::doesProfileTimings () const {return (mDebugMode & btIDebugDraw::DBG_ProfileTimings) != 0;}; -//------------------------------------------------------------------------------------------------ -bool DebugDrawer::doesEnableSatComparison () const {return (mDebugMode & btIDebugDraw::DBG_EnableSatComparison) != 0;}; -//------------------------------------------------------------------------------------------------ -bool DebugDrawer::doesDisableBulletLCP () const {return (mDebugMode & btIDebugDraw::DBG_DisableBulletLCP) != 0;}; -//------------------------------------------------------------------------------------------------ -bool DebugDrawer::doesEnableCCD () const {return (mDebugMode & btIDebugDraw::DBG_EnableCCD) != 0;}; -//------------------------------------------------------------------------------------------------ -void DebugDrawer::setDrawWireframe(bool enable) -{ - if (enable) - mDebugMode |= btIDebugDraw::DBG_DrawWireframe; - else - mDebugMode &= ~btIDebugDraw::DBG_DrawWireframe; -} -//------------------------------------------------------------------------------------------------ -void DebugDrawer::setDrawFeaturesText(bool enable) -{ - if (enable) - mDebugMode |= btIDebugDraw::DBG_DrawFeaturesText; - else - mDebugMode &= ~btIDebugDraw::DBG_DrawFeaturesText; -} -//------------------------------------------------------------------------------------------------ -void DebugDrawer::setDrawContactPoints(bool enable) -{ - if (enable) - mDebugMode |= btIDebugDraw::DBG_DrawContactPoints; - else - mDebugMode &= ~btIDebugDraw::DBG_DrawContactPoints; -} -//------------------------------------------------------------------------------------------------ -void DebugDrawer::setNoDeactivation(bool enable) -{ - if (enable) - mDebugMode |= btIDebugDraw::DBG_NoDeactivation; - else - mDebugMode &= ~btIDebugDraw::DBG_NoDeactivation; -} -//------------------------------------------------------------------------------------------------ -void DebugDrawer::setNoHelpText(bool enable) -{ - if (enable) - mDebugMode |= btIDebugDraw::DBG_NoHelpText; - else - mDebugMode &= ~btIDebugDraw::DBG_NoHelpText; -} -//------------------------------------------------------------------------------------------------ -void DebugDrawer::setDrawText(bool enable) -{ - if (enable) - mDebugMode |= btIDebugDraw::DBG_DrawText; - else - mDebugMode &= ~btIDebugDraw::DBG_DrawText; -} -//------------------------------------------------------------------------------------------------ -void DebugDrawer::setProfileTimings(bool enable) -{ - if (enable) - mDebugMode |= btIDebugDraw::DBG_ProfileTimings; - else - mDebugMode &= ~btIDebugDraw::DBG_ProfileTimings; -} -//------------------------------------------------------------------------------------------------ -void DebugDrawer::setEnableSatComparison(bool enable) -{ - if (enable) - mDebugMode |= btIDebugDraw::DBG_EnableSatComparison; - else - mDebugMode &= ~btIDebugDraw::DBG_EnableSatComparison; -} -//------------------------------------------------------------------------------------------------ -void DebugDrawer::setDisableBulletLCP (bool enable) -{ - if (enable) - mDebugMode |= btIDebugDraw::DBG_DisableBulletLCP ; - else - mDebugMode &= ~btIDebugDraw::DBG_DisableBulletLCP ; -} -//------------------------------------------------------------------------------------------------ -void DebugDrawer::setEnableCCD(bool enable) -{ - if (enable) - mDebugMode |= btIDebugDraw::DBG_EnableCCD; - else - mDebugMode &= ~btIDebugDraw::DBG_EnableCCD; -} -//------------------------------------------------------------------------------------------------ -void DebugDrawer::drawAabb(const btVector3& from,const btVector3& to,const btVector3& color) -{ - if (mDebugMode & btIDebugDraw::DBG_DrawAabb) - { - drawAabb (BtOgreConverter::to(from), BtOgreConverter::to(to), BtOgreConverter::to (color)); - } -} -//------------------------------------------------------------------------------------------------ -void DebugDrawer::drawLine(const btVector3& from,const btVector3& to,const btVector3& color) -{ - if (mDebugMode > 0) - { - drawLine (BtOgreConverter::to(from), BtOgreConverter::to(to), BtOgreConverter::to (color)); - } -} -//------------------------------------------------------------------------------------------------ -void DebugDrawer::drawContactPoint(const btVector3& PointOnB,const btVector3& normalOnB, - btScalar distance,int lifeTime,const btVector3& color) -{ - if (mDebugMode & btIDebugDraw::DBG_DrawContactPoints) - { - // - } -} -//------------------------------------------------------------------------------------------------ -void DebugDrawer::drawAabb (const Ogre::Vector3& from,const Ogre::Vector3& to,const Ogre::Vector3& color) -{ - if (mDebugMode & btIDebugDraw::DBG_DrawAabb) - { - Vector3 halfExtents = (to-from)* 0.5f; - Vector3 center = (to+from) *0.5f; - int i,j; - - Vector3 edgecoord(1.f,1.f,1.f),pa,pb; - for (i=0;i<4;i++) - { - for (j=0;j<3;j++) - { - pa = Vector3(edgecoord[0]*halfExtents[0], edgecoord[1]*halfExtents[1], - edgecoord[2]*halfExtents[2]); - pa+=center; - - int othercoord = j%3; - edgecoord[othercoord]*=-1.f; - pb = Vector3(edgecoord[0]*halfExtents[0], edgecoord[1]*halfExtents[1], - edgecoord[2]*halfExtents[2]); - pb+=center; - - drawLine(pa,pb,color); - } - edgecoord = Vector3(-1.f,-1.f,-1.f); - if (i<3) - edgecoord[i]*=-1.f; - } - } -} -//------------------------------------------------------------------------------------------------ -void DebugDrawer::drawLine(const Ogre::Vector3& from,const Ogre::Vector3& to,const Ogre::Vector3& color) -{ - if (mDebugMode > 0) - { - addLine (from, to); - } -} -//------------------------------------------------------------------------------------------------ -void DebugDrawer::drawContactPoint(const Ogre::Vector3& PointOnB,const Ogre::Vector3& normalOnB, - Real distance,int lifeTime,const Ogre::Vector3& color) -{ - if (mDebugMode & btIDebugDraw::DBG_DrawContactPoints) - { - - } - //... -} -//------------------------------------------------------------------------------------------------ - Deleted: trunk/python-ogre/ThirdParty/ogrebullet/Collisions/OgreBulletCollisionsDebugLines.cpp =================================================================== --- trunk/python-ogre/ThirdParty/ogrebullet/Collisions/OgreBulletCollisionsDebugLines.cpp 2008-02-16 01:41:26 UTC (rev 569) +++ trunk/python-ogre/ThirdParty/ogrebullet/Collisions/OgreBulletCollisionsDebugLines.cpp 2008-02-16 01:43:00 UTC (rev 570) @@ -1,162 +0,0 @@ -/*************************************************************************** - -This source file is part of OGREBULLET -(Object-oriented Graphics Rendering Engine Bullet Wrapper) -For the latest info, see http://www.ogre3d.org/phpBB2addons/viewforum.php?f=10 - -Copyright (c) 2007 tua...@gm... - - - -This program is free software; you can redistribute it and/or modify it under -the terms of the GNU Lesser General Public License as published by the Free Software -Foundation; either version 2 of the License, or (at your option) any later -version. - -This program is distributed in the hope that it will be useful, but WITHOUT -ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS -FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along with -this program; if not, write to the Free Software Foundation, Inc., 59 Temple -Place - Suite 330, Boston, MA 02111-1307, USA, or go to -http://www.gnu.org/copyleft/lesser.txt. ------------------------------------------------------------------------------ -*/ - -#include "OgreBulletCollisions.h" - -#include "Debug/OgreBulletCollisionsDebugLines.h" -#include "Utils/OgreBulletConverter.h" - -using namespace OgreBulletCollisions; -using namespace Ogre; - -//------------------------------------------------------------------------------------------------ -bool DebugLines::_materials_created = false; -//------------------------------------------------------------------------------------------------ -DebugLines::DebugLines() : SimpleRenderable() -{ - mRenderOp.vertexData = new Ogre::VertexData(); - _drawn = false; - - if (!_materials_created) - { - MaterialPtr red = MaterialManager::getSingleton().create("OgreBulletCollisionsDebugLines/Disabled","OgreBulletCollisions"); - MaterialPtr green = MaterialManager::getSingleton().create("OgreBulletCollisionsDebugLines/Enabled","OgreBulletCollisions"); - MaterialPtr blue = MaterialManager::getSingleton().create("OgreBulletCollisionsDebugLines/Static","OgreBulletCollisions"); - - red->setReceiveShadows(false); - red->getTechnique(0)->setLightingEnabled(true); - red->getTechnique(0)->getPass(0)->setSelfIllumination(1,0,0); - - green->setReceiveShadows(false); - green->getTechnique(0)->setLightingEnabled(true); - green->getTechnique(0)->getPass(0)->setSelfIllumination(0,1,0); - - blue->setReceiveShadows(false); - blue->getTechnique(0)->setLightingEnabled(true); - blue->getTechnique(0)->getPass(0)->setSelfIllumination(0,0,1); - - _materials_created = true; - } - setCastShadows (false); - this->setMaterial("OgreBulletCollisionsDebugLines/Enabled"); -} - - -//------------------------------------------------------------------------------------------------ -void DebugLines::clear() -{ - if (_drawn) - { - _drawn = false; - _points.clear(); - delete mRenderOp.vertexData; - - mRenderOp.vertexData = new Ogre::VertexData(); - } -} -//------------------------------------------------------------------------------------------------ -DebugLines::~DebugLines(void) -{ - clear(); - - delete mRenderOp.vertexData; -} -//------------------------------------------------------------------------------------------------ -void DebugLines::draw() -{ - if (_drawn || _points.empty()) - return; - else - _drawn = true; - - // Initialization stuff - mRenderOp.indexData = 0; - mRenderOp.vertexData->vertexCount = _points.size(); - mRenderOp.vertexData->vertexStart = 0; - mRenderOp.operationType = RenderOperation::OT_LINE_LIST; - mRenderOp.useIndexes = false; - - Ogre::VertexDeclaration *decl = mRenderOp.vertexData->vertexDeclaration; - Ogre::VertexBufferBinding *bind = mRenderOp.vertexData->vertexBufferBinding; - - decl->addElement(0, 0, VET_FLOAT3, VES_POSITION); - - HardwareVertexBufferSharedPtr vbuf = - HardwareBufferManager::getSingleton().createVertexBuffer( - decl->getVertexSize(0), - mRenderOp.vertexData->vertexCount, - HardwareBuffer::HBU_STATIC_WRITE_ONLY); - - bind->setBinding(0, vbuf); - - // Drawing stuff - unsigned int size = (unsigned int)_points.size(); - Ogre::Vector3 vaabMin = _points[0]; - Ogre::Vector3 vaabMax = _points[0]; - - float *prPos = static_cast<float*>(vbuf->lock(HardwareBuffer::HBL_DISCARD)); - - for(unsigned int i = 0; i < size; i++) - { - *prPos++ = _points[i].x; - *prPos++ = _points[i].y; - *prPos++ = _points[i].z; - - if (_points[i].x < vaabMin.x) - vaabMin.x = _points[i].x; - if (_points[i].y < vaabMin.y) - vaabMin.y = _points[i].y; - if (_points[i].z < vaabMin.z) - vaabMin.z = _points[i].z; - - if (_points[i].x > vaabMax.x) - vaabMax.x = _points[i].x; - if (_points[i].y > vaabMax.y) - vaabMax.y = _points[i].y; - if (_points[i].z > vaabMax.z) - vaabMax.z = _points[i].z; - } - - vbuf->unlock(); - - mBox.setExtents(vaabMin, vaabMax); -} -//-------------------------------------------------------------------------... [truncated message content] |
From: <and...@us...> - 2008-06-25 07:19:51
|
Revision: 613 http://python-ogre.svn.sourceforge.net/python-ogre/?rev=613&view=rev Author: andy_miller Date: 2008-06-25 00:20:00 -0700 (Wed, 25 Jun 2008) Log Message: ----------- Updates to DXwebsetup and VCredist - needed to build windows binary Modified Paths: -------------- trunk/python-ogre/ThirdParty/dxwebsetup.exe trunk/python-ogre/ThirdParty/vcredist_x86.exe Modified: trunk/python-ogre/ThirdParty/dxwebsetup.exe =================================================================== (Binary files differ) Modified: trunk/python-ogre/ThirdParty/vcredist_x86.exe =================================================================== (Binary files differ) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |