Class for calculating a tangent space basis. More...
#include <OgreTangentSpaceCalc.h>
Classes | |
struct | IndexRemap |
Information about a remapped index. More... | |
struct | Result |
The result of having built a tangent space basis. More... | |
struct | VertexInfo |
Public Types | |
typedef std::pair< size_t, size_t > | VertexSplit |
typedef list< IndexRemap >::type | IndexRemapList |
List of indexes that were remapped (split vertices). | |
typedef list< VertexSplit >::type | VertexSplits |
Public Member Functions | |
TangentSpaceCalc () | |
virtual | ~TangentSpaceCalc () |
void | clear () |
Reset the calculation object. | |
void | setVertexData (VertexData *v_in) |
Set the incoming vertex data (which will be modified). | |
void | addIndexData (IndexData *i_in, RenderOperation::OperationType opType=RenderOperation::OT_TRIANGLE_LIST) |
Add a set of index data that references the vertex data. | |
void | setStoreParityInW (bool enabled) |
Sets whether to store tangent space parity in the W of a 4-component tangent or not. | |
bool | getStoreParityInW () const |
Gets whether to store tangent space parity in the W of a 4-component tangent or not. | |
void | setSplitMirrored (bool split) |
Sets whether or not to split vertices when a mirrored tangent space transition is detected (matrix parity differs). | |
bool | getSplitMirrored () const |
Gets whether or not to split vertices when a mirrored tangent space transition is detected. | |
void | setSplitRotated (bool split) |
Sets whether or not to split vertices when tangent space rotates more than 90 degrees around a vertex. | |
bool | getSplitRotated () const |
Sets whether or not to split vertices when tangent space rotates more than 90 degrees around a vertex. | |
Result | build (VertexElementSemantic targetSemantic=VES_TANGENT, unsigned short sourceTexCoordSet=0, unsigned short index=1) |
Build a tangent space basis from the provided data. | |
Protected Types | |
typedef vector< IndexData * >::type | IndexDataList |
typedef vector < RenderOperation::OperationType > ::type | OpTypeList |
typedef vector< VertexInfo >::type | VertexInfoArray |
Protected Member Functions | |
void | extendBuffers (VertexSplits &splits) |
void | insertTangents (Result &res, VertexElementSemantic targetSemantic, unsigned short sourceTexCoordSet, unsigned short index) |
void | populateVertexArray (unsigned short sourceTexCoordSet) |
void | processFaces (Result &result) |
void | calculateFaceTangentSpace (const size_t *vertInd, Vector3 &tsU, Vector3 &tsV, Vector3 &tsN) |
Calculate face tangent space, U and V are weighted by UV area, N is normalised. | |
Real | calculateAngleWeight (size_t v0, size_t v1, size_t v2) |
int | calculateParity (const Vector3 &u, const Vector3 &v, const Vector3 &n) |
void | addFaceTangentSpaceToVertices (size_t indexSet, size_t faceIndex, size_t *localVertInd, const Vector3 &faceTsU, const Vector3 &faceTsV, const Vector3 &faceNorm, Result &result) |
void | normaliseVertices () |
void | remapIndexes (Result &res) |
template<typename T > | |
void | remapIndexes (T *ibuf, size_t indexSet, Result &res) |
Protected Attributes | |
VertexData * | mVData |
IndexDataList | mIDataList |
OpTypeList | mOpTypes |
bool | mSplitMirrored |
bool | mSplitRotated |
bool | mStoreParityInW |
VertexInfoArray | mVertexArray |
Class for calculating a tangent space basis.
Definition at line 48 of file OgreTangentSpaceCalc.h.
typedef vector<IndexData*>::type Ogre::TangentSpaceCalc::IndexDataList [protected] |
Definition at line 186 of file OgreTangentSpaceCalc.h.
typedef list<IndexRemap>::type Ogre::TangentSpaceCalc::IndexRemapList |
List of indexes that were remapped (split vertices).
Definition at line 71 of file OgreTangentSpaceCalc.h.
typedef vector<RenderOperation::OperationType>::type Ogre::TangentSpaceCalc::OpTypeList [protected] |
Definition at line 187 of file OgreTangentSpaceCalc.h.
typedef vector<VertexInfo>::type Ogre::TangentSpaceCalc::VertexInfoArray [protected] |
Definition at line 210 of file OgreTangentSpaceCalc.h.
typedef std::pair<size_t, size_t> Ogre::TangentSpaceCalc::VertexSplit |
Definition at line 54 of file OgreTangentSpaceCalc.h.
typedef list<VertexSplit>::type Ogre::TangentSpaceCalc::VertexSplits |
Definition at line 73 of file OgreTangentSpaceCalc.h.
Ogre::TangentSpaceCalc::TangentSpaceCalc | ( | ) |
virtual Ogre::TangentSpaceCalc::~TangentSpaceCalc | ( | ) | [virtual] |
void Ogre::TangentSpaceCalc::addFaceTangentSpaceToVertices | ( | size_t | indexSet, | |
size_t | faceIndex, | |||
size_t * | localVertInd, | |||
const Vector3 & | faceTsU, | |||
const Vector3 & | faceTsV, | |||
const Vector3 & | faceNorm, | |||
Result & | result | |||
) | [protected] |
void Ogre::TangentSpaceCalc::addIndexData | ( | IndexData * | i_in, | |
RenderOperation::OperationType | opType = RenderOperation::OT_TRIANGLE_LIST | |||
) |
Add a set of index data that references the vertex data.
This might be modified if there are vertex splits.
Result Ogre::TangentSpaceCalc::build | ( | VertexElementSemantic | targetSemantic = VES_TANGENT , |
|
unsigned short | sourceTexCoordSet = 0 , |
|||
unsigned short | index = 1 | |||
) |
Build a tangent space basis from the provided data.
targetSemantic | The semantic to store the tangents in. Defaults to the explicit tangent binding, but note that this is only usable on more modern hardware (Shader Model 2), so if you need portability with older cards you should change this to a texture coordinate binding instead. | |
sourceTexCoordSet | The texture coordinate index which should be used as the source of 2D texture coordinates, with which to calculate the tangents. | |
index | The element index, ie the texture coordinate set which should be used to store the 3D coordinates representing a tangent vector per vertex, if targetSemantic is VES_TEXTURE_COORDINATES. If this already exists, it will be overwritten. |
Real Ogre::TangentSpaceCalc::calculateAngleWeight | ( | size_t | v0, | |
size_t | v1, | |||
size_t | v2 | |||
) | [protected] |
void Ogre::TangentSpaceCalc::calculateFaceTangentSpace | ( | const size_t * | vertInd, | |
Vector3 & | tsU, | |||
Vector3 & | tsV, | |||
Vector3 & | tsN | |||
) | [protected] |
Calculate face tangent space, U and V are weighted by UV area, N is normalised.
int Ogre::TangentSpaceCalc::calculateParity | ( | const Vector3 & | u, | |
const Vector3 & | v, | |||
const Vector3 & | n | |||
) | [protected] |
void Ogre::TangentSpaceCalc::clear | ( | ) |
Reset the calculation object.
void Ogre::TangentSpaceCalc::extendBuffers | ( | VertexSplits & | splits | ) | [protected] |
bool Ogre::TangentSpaceCalc::getSplitMirrored | ( | ) | const |
Gets whether or not to split vertices when a mirrored tangent space transition is detected.
Definition at line 135 of file OgreTangentSpaceCalc.h.
bool Ogre::TangentSpaceCalc::getSplitRotated | ( | ) | const |
Sets whether or not to split vertices when tangent space rotates more than 90 degrees around a vertex.
Definition at line 155 of file OgreTangentSpaceCalc.h.
bool Ogre::TangentSpaceCalc::getStoreParityInW | ( | ) | const |
Gets whether to store tangent space parity in the W of a 4-component tangent or not.
Definition at line 114 of file OgreTangentSpaceCalc.h.
void Ogre::TangentSpaceCalc::insertTangents | ( | Result & | res, | |
VertexElementSemantic | targetSemantic, | |||
unsigned short | sourceTexCoordSet, | |||
unsigned short | index | |||
) | [protected] |
void Ogre::TangentSpaceCalc::normaliseVertices | ( | ) | [protected] |
void Ogre::TangentSpaceCalc::populateVertexArray | ( | unsigned short | sourceTexCoordSet | ) | [protected] |
void Ogre::TangentSpaceCalc::processFaces | ( | Result & | result | ) | [protected] |
void Ogre::TangentSpaceCalc::remapIndexes | ( | T * | ibuf, | |
size_t | indexSet, | |||
Result & | res | |||
) | [protected] |
Definition at line 229 of file OgreTangentSpaceCalc.h.
References Ogre::TangentSpaceCalc::IndexRemap::faceIndex, Ogre::TangentSpaceCalc::Result::indexesRemapped, Ogre::TangentSpaceCalc::IndexRemap::indexSet, and Ogre::TangentSpaceCalc::IndexRemap::splitVertex.
void Ogre::TangentSpaceCalc::remapIndexes | ( | Result & | res | ) | [protected] |
void Ogre::TangentSpaceCalc::setSplitMirrored | ( | bool | split | ) |
Sets whether or not to split vertices when a mirrored tangent space transition is detected (matrix parity differs).
Definition at line 130 of file OgreTangentSpaceCalc.h.
void Ogre::TangentSpaceCalc::setSplitRotated | ( | bool | split | ) |
Sets whether or not to split vertices when tangent space rotates more than 90 degrees around a vertex.
Definition at line 151 of file OgreTangentSpaceCalc.h.
void Ogre::TangentSpaceCalc::setStoreParityInW | ( | bool | enabled | ) |
Sets whether to store tangent space parity in the W of a 4-component tangent or not.
enable | true to enable 4-component tangents (default false). If you enable this, you will probably also want to enable mirror splitting (see setSplitMirrored), and your shader must understand how to deal with the parity. |
Definition at line 111 of file OgreTangentSpaceCalc.h.
void Ogre::TangentSpaceCalc::setVertexData | ( | VertexData * | v_in | ) |
Set the incoming vertex data (which will be modified).
IndexDataList Ogre::TangentSpaceCalc::mIDataList [protected] |
Definition at line 188 of file OgreTangentSpaceCalc.h.
OpTypeList Ogre::TangentSpaceCalc::mOpTypes [protected] |
Definition at line 189 of file OgreTangentSpaceCalc.h.
bool Ogre::TangentSpaceCalc::mSplitMirrored [protected] |
Definition at line 190 of file OgreTangentSpaceCalc.h.
bool Ogre::TangentSpaceCalc::mSplitRotated [protected] |
Definition at line 191 of file OgreTangentSpaceCalc.h.
bool Ogre::TangentSpaceCalc::mStoreParityInW [protected] |
Definition at line 192 of file OgreTangentSpaceCalc.h.
VertexData* Ogre::TangentSpaceCalc::mVData [protected] |
Definition at line 185 of file OgreTangentSpaceCalc.h.
VertexInfoArray Ogre::TangentSpaceCalc::mVertexArray [protected] |
Definition at line 211 of file OgreTangentSpaceCalc.h.
Copyright © 2012 Torus Knot Software Ltd
This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.
Last modified Fri May 25 23:41:01 2012