Merge branch 'OpenSceneGraph-3.4' of https://github.com/openscenegraph/OpenSceneGraph into OpenSceneGraph-3.4
This commit is contained in:
commit
a9f5ce5d91
@ -24,9 +24,9 @@ matrix:
|
|||||||
#- clang-3.8
|
#- clang-3.8
|
||||||
- g++
|
- g++
|
||||||
- cmake
|
- cmake
|
||||||
# OSX build
|
# # OSX build
|
||||||
- os: osx
|
# - os: osx
|
||||||
language: cpp
|
# language: cpp
|
||||||
|
|
||||||
script:
|
script:
|
||||||
- mkdir build
|
- mkdir build
|
||||||
|
@ -16,7 +16,7 @@ FIND_PATH(NVTT_INCLUDE_DIR nvtt/nvtt.h
|
|||||||
)
|
)
|
||||||
|
|
||||||
# NVTT
|
# NVTT
|
||||||
FIND_LIBRARY(NVTT_LIBRARY
|
FIND_LIBRARY(NVTT_LIBRARY_RELEASE
|
||||||
NAMES nvtt
|
NAMES nvtt
|
||||||
PATHS
|
PATHS
|
||||||
/usr/local
|
/usr/local
|
||||||
@ -37,7 +37,7 @@ FIND_LIBRARY(NVTT_LIBRARY_DEBUG
|
|||||||
)
|
)
|
||||||
|
|
||||||
# NVIMAGE
|
# NVIMAGE
|
||||||
FIND_LIBRARY(NVIMAGE_LIBRARY
|
FIND_LIBRARY(NVIMAGE_LIBRARY_RELEASE
|
||||||
NAMES nvimage
|
NAMES nvimage
|
||||||
PATHS
|
PATHS
|
||||||
/usr/local
|
/usr/local
|
||||||
@ -58,7 +58,7 @@ FIND_LIBRARY(NVIMAGE_LIBRARY_DEBUG
|
|||||||
)
|
)
|
||||||
|
|
||||||
# NVMATH
|
# NVMATH
|
||||||
FIND_LIBRARY(NVMATH_LIBRARY
|
FIND_LIBRARY(NVMATH_LIBRARY_RELEASE
|
||||||
NAMES nvmath
|
NAMES nvmath
|
||||||
PATHS
|
PATHS
|
||||||
/usr/local
|
/usr/local
|
||||||
@ -79,7 +79,7 @@ FIND_LIBRARY(NVMATH_LIBRARY_DEBUG
|
|||||||
)
|
)
|
||||||
|
|
||||||
# NVCORE
|
# NVCORE
|
||||||
FIND_LIBRARY(NVCORE_LIBRARY
|
FIND_LIBRARY(NVCORE_LIBRARY_RELEASE
|
||||||
NAMES nvcore
|
NAMES nvcore
|
||||||
PATHS
|
PATHS
|
||||||
/usr/local
|
/usr/local
|
||||||
@ -99,7 +99,7 @@ FIND_LIBRARY(NVCORE_LIBRARY_DEBUG
|
|||||||
)
|
)
|
||||||
|
|
||||||
# NVTHREAD
|
# NVTHREAD
|
||||||
FIND_LIBRARY(NVTHREAD_LIBRARY
|
FIND_LIBRARY(NVTHREAD_LIBRARY_RELEASE
|
||||||
NAMES nvthread
|
NAMES nvthread
|
||||||
PATHS
|
PATHS
|
||||||
/usr/local
|
/usr/local
|
||||||
@ -119,7 +119,7 @@ FIND_LIBRARY(NVTHREAD_LIBRARY_DEBUG
|
|||||||
)
|
)
|
||||||
|
|
||||||
# SQUISH
|
# SQUISH
|
||||||
FIND_LIBRARY(NVSQUISH_LIBRARY
|
FIND_LIBRARY(NVSQUISH_LIBRARY_RELEASE
|
||||||
NAMES squish
|
NAMES squish
|
||||||
PATHS
|
PATHS
|
||||||
/usr/local
|
/usr/local
|
||||||
@ -139,7 +139,7 @@ FIND_LIBRARY(NVSQUISH_LIBRARY_DEBUG
|
|||||||
)
|
)
|
||||||
|
|
||||||
# BC6H
|
# BC6H
|
||||||
FIND_LIBRARY(NVBC6H_LIBRARY
|
FIND_LIBRARY(NVBC6H_LIBRARY_RELEASE
|
||||||
NAMES bc6h
|
NAMES bc6h
|
||||||
PATHS
|
PATHS
|
||||||
/usr/local
|
/usr/local
|
||||||
@ -159,7 +159,7 @@ FIND_LIBRARY(NVBC6H_LIBRARY_DEBUG
|
|||||||
)
|
)
|
||||||
|
|
||||||
# BC7
|
# BC7
|
||||||
FIND_LIBRARY(NVBC7_LIBRARY
|
FIND_LIBRARY(NVBC7_LIBRARY_RELEASE
|
||||||
NAMES bc7
|
NAMES bc7
|
||||||
PATHS
|
PATHS
|
||||||
/usr/local
|
/usr/local
|
||||||
@ -178,9 +178,34 @@ FIND_LIBRARY(NVBC7_LIBRARY_DEBUG
|
|||||||
PATH_SUFFIXES lib64 lib lib/shared lib/static lib64/static
|
PATH_SUFFIXES lib64 lib lib/shared lib/static lib64/static
|
||||||
)
|
)
|
||||||
|
|
||||||
|
IF (WIN32)
|
||||||
|
SET(LIBS_TO_SETUP "NVTT" "NVCORE" "NVMATH" "NVIMAGE" "NVTHREAD" "NVBC7" "NVBC6H" "NVSQUISH")
|
||||||
|
ELSE()
|
||||||
|
SET(LIBS_TO_SETUP "NVTT" "NVCORE" "NVMATH" "NVIMAGE")
|
||||||
|
ENDIF()
|
||||||
|
|
||||||
|
|
||||||
|
FOREACH(LIB ${LIBS_TO_SETUP})
|
||||||
|
IF(${LIB}_LIBRARY_DEBUG)
|
||||||
|
SET(${LIB}_LIBRARIES optimized ${${LIB}_LIBRARY_RELEASE} debug ${${LIB}_LIBRARY_DEBUG})
|
||||||
|
ELSE(${LIB}_LIBRARY_DEBUG)
|
||||||
|
SET(${LIB}_LIBRARY_DEBUG ${${LIB}_LIBRARY_RELEASE})
|
||||||
|
SET(${LIB}_LIBRARIES optimized ${${LIB}_LIBRARY_RELEASE} debug ${${LIB}_LIBRARY_DEBUG})
|
||||||
|
ENDIF(${LIB}_LIBRARY_DEBUG)
|
||||||
|
ENDFOREACH(LIB ${LIBS_TO_SETUP})
|
||||||
|
|
||||||
|
SET(NVTT_LIBRARIES
|
||||||
|
${NVTT_LIBRARIES}
|
||||||
|
${NVCORE_LIBRARIES}
|
||||||
|
${NVMATH_LIBRARIES}
|
||||||
|
${NVIMAGE_LIBRARIES}
|
||||||
|
${NVTHREAD_LIBRARIES}
|
||||||
|
${NVBC7_LIBRARIES}
|
||||||
|
${NVBC6H_LIBRARIES}
|
||||||
|
${NVSQUISH_LIBRARIES}
|
||||||
|
)
|
||||||
|
|
||||||
SET(NVTT_FOUND "NO")
|
SET(NVTT_FOUND "NO")
|
||||||
IF(NVTT_LIBRARY AND NVTT_INCLUDE_DIR)
|
IF(NVTT_LIBRARY_RELEASE AND NVTT_INCLUDE_DIR)
|
||||||
SET(NVTT_FOUND "YES")
|
SET(NVTT_FOUND "YES" )
|
||||||
ENDIF(NVTT_LIBRARY AND NVTT_INCLUDE_DIR)
|
ENDIF(NVTT_LIBRARY_RELEASE AND NVTT_INCLUDE_DIR)
|
||||||
|
@ -200,15 +200,10 @@ public:
|
|||||||
|
|
||||||
ComputeNode()
|
ComputeNode()
|
||||||
{
|
{
|
||||||
const char* envOsgFilePath = getenv("OSG_FILE_PATH");
|
_computeShaderSourcePath = "shaders/osgssboComputeShader.cs";
|
||||||
std::stringstream computeshaderpath; computeshaderpath << envOsgFilePath << "/shaders/osgssboComputeShader.cs";
|
_vertexShaderSourcePath = "shaders/osgssboVertexShader.vs";
|
||||||
_computeShaderSourcePath = computeshaderpath.str();
|
_geometryShaderSourcePath = "shaders/osgssboGeometryShader.gs";
|
||||||
std::stringstream vertexshaderpath; vertexshaderpath << envOsgFilePath << "/shaders/osgssboVertexShader.vs";
|
_fragmentShaderSourcePath = "shaders/osgssboFragmentShader.fs";
|
||||||
_vertexShaderSourcePath = vertexshaderpath.str();
|
|
||||||
std::stringstream geometryshaderpath; geometryshaderpath << envOsgFilePath << "/shaders/osgssboGeometryShader.gs";
|
|
||||||
_geometryShaderSourcePath = geometryshaderpath.str();
|
|
||||||
std::stringstream fragmentshaderpath; fragmentshaderpath << envOsgFilePath << "/shaders/osgssboFragmentShader.fs";
|
|
||||||
_fragmentShaderSourcePath = fragmentshaderpath.str();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
@ -243,7 +238,7 @@ public:
|
|||||||
if (_computeNode->_computeShader.valid())
|
if (_computeNode->_computeShader.valid())
|
||||||
{
|
{
|
||||||
runningSource = _computeNode->_computeShader->getShaderSource();
|
runningSource = _computeNode->_computeShader->getShaderSource();
|
||||||
reloadedshader = osg::Shader::readShaderFile(osg::Shader::COMPUTE, _computeNode->_computeShaderSourcePath);
|
reloadedshader = osgDB::readRefShaderFile(osg::Shader::COMPUTE, _computeNode->_computeShaderSourcePath);
|
||||||
|
|
||||||
reloadedstring = reloadedshader->getShaderSource();
|
reloadedstring = reloadedshader->getShaderSource();
|
||||||
if (!osgDB::equalCaseInsensitive(runningSource.c_str(), reloadedstring.c_str()))
|
if (!osgDB::equalCaseInsensitive(runningSource.c_str(), reloadedstring.c_str()))
|
||||||
@ -258,7 +253,7 @@ public:
|
|||||||
{
|
{
|
||||||
|
|
||||||
runningSource = _computeNode->_vertexShader->getShaderSource();
|
runningSource = _computeNode->_vertexShader->getShaderSource();
|
||||||
reloadedshader = osg::Shader::readShaderFile(osg::Shader::VERTEX, _computeNode->_vertexShaderSourcePath);
|
reloadedshader = osgDB::readRefShaderFile(osg::Shader::VERTEX, _computeNode->_vertexShaderSourcePath);
|
||||||
|
|
||||||
reloadedstring = reloadedshader->getShaderSource();
|
reloadedstring = reloadedshader->getShaderSource();
|
||||||
if (!osgDB::equalCaseInsensitive(runningSource.c_str(), reloadedstring.c_str()))
|
if (!osgDB::equalCaseInsensitive(runningSource.c_str(), reloadedstring.c_str()))
|
||||||
@ -274,7 +269,7 @@ public:
|
|||||||
if (_computeNode->_geometryShader.valid())
|
if (_computeNode->_geometryShader.valid())
|
||||||
{
|
{
|
||||||
runningSource = _computeNode->_geometryShader->getShaderSource();
|
runningSource = _computeNode->_geometryShader->getShaderSource();
|
||||||
reloadedshader = osg::Shader::readShaderFile(osg::Shader::GEOMETRY, _computeNode->_geometryShaderSourcePath);
|
reloadedshader = osgDB::readRefShaderFile(osg::Shader::GEOMETRY, _computeNode->_geometryShaderSourcePath);
|
||||||
|
|
||||||
reloadedstring = reloadedshader->getShaderSource();
|
reloadedstring = reloadedshader->getShaderSource();
|
||||||
if (!osgDB::equalCaseInsensitive(runningSource.c_str(), reloadedstring.c_str()))
|
if (!osgDB::equalCaseInsensitive(runningSource.c_str(), reloadedstring.c_str()))
|
||||||
@ -288,7 +283,7 @@ public:
|
|||||||
if (_computeNode->_fragmentShader.valid())
|
if (_computeNode->_fragmentShader.valid())
|
||||||
{
|
{
|
||||||
runningSource = _computeNode->_fragmentShader->getShaderSource();
|
runningSource = _computeNode->_fragmentShader->getShaderSource();
|
||||||
reloadedshader = osg::Shader::readShaderFile(osg::Shader::FRAGMENT, _computeNode->_fragmentShaderSourcePath);
|
reloadedshader = osgDB::readRefShaderFile(osg::Shader::FRAGMENT, _computeNode->_fragmentShaderSourcePath);
|
||||||
|
|
||||||
reloadedstring = reloadedshader->getShaderSource();
|
reloadedstring = reloadedshader->getShaderSource();
|
||||||
if (!osgDB::equalCaseInsensitive(runningSource.c_str(), reloadedstring.c_str()))
|
if (!osgDB::equalCaseInsensitive(runningSource.c_str(), reloadedstring.c_str()))
|
||||||
@ -518,13 +513,13 @@ void ComputeNode::addComputationResultsRenderTree()
|
|||||||
|
|
||||||
_computationResultsRenderProgram = new osg::Program;
|
_computationResultsRenderProgram = new osg::Program;
|
||||||
|
|
||||||
_vertexShader = osg::Shader::readShaderFile(osg::Shader::VERTEX, _vertexShaderSourcePath);
|
_vertexShader = osgDB::readRefShaderFile(osg::Shader::VERTEX, _vertexShaderSourcePath);
|
||||||
_computationResultsRenderProgram->addShader(_vertexShader.get());
|
_computationResultsRenderProgram->addShader(_vertexShader.get());
|
||||||
|
|
||||||
_geometryShader = osg::Shader::readShaderFile(osg::Shader::GEOMETRY, _geometryShaderSourcePath);
|
_geometryShader = osgDB::readRefShaderFile(osg::Shader::GEOMETRY, _geometryShaderSourcePath);
|
||||||
_computationResultsRenderProgram->addShader(_geometryShader.get());
|
_computationResultsRenderProgram->addShader(_geometryShader.get());
|
||||||
|
|
||||||
_fragmentShader = osg::Shader::readShaderFile(osg::Shader::FRAGMENT, _fragmentShaderSourcePath);
|
_fragmentShader = osgDB::readRefShaderFile(osg::Shader::FRAGMENT, _fragmentShaderSourcePath);
|
||||||
_computationResultsRenderProgram->addShader(_fragmentShader.get());
|
_computationResultsRenderProgram->addShader(_fragmentShader.get());
|
||||||
|
|
||||||
|
|
||||||
@ -629,7 +624,7 @@ void ComputeNode::initComputingSetup()
|
|||||||
|
|
||||||
_computeProgram = new osg::Program;
|
_computeProgram = new osg::Program;
|
||||||
_computeProgram->setComputeGroups((NUM_ELEMENTS_X / WORK_GROUP_SIZE) <= 1 ? 1 : (NUM_ELEMENTS_X / WORK_GROUP_SIZE), (NUM_ELEMENTS_Y / WORK_GROUP_SIZE) <= 1 ? 1 : (NUM_ELEMENTS_Y / WORK_GROUP_SIZE), 1);
|
_computeProgram->setComputeGroups((NUM_ELEMENTS_X / WORK_GROUP_SIZE) <= 1 ? 1 : (NUM_ELEMENTS_X / WORK_GROUP_SIZE), (NUM_ELEMENTS_Y / WORK_GROUP_SIZE) <= 1 ? 1 : (NUM_ELEMENTS_Y / WORK_GROUP_SIZE), 1);
|
||||||
_computeShader = osg::Shader::readShaderFile(osg::Shader::COMPUTE, _computeShaderSourcePath);
|
_computeShader = osgDB::readRefShaderFile(osg::Shader::COMPUTE, _computeShaderSourcePath);
|
||||||
_computeProgram->addShader(_computeShader.get());
|
_computeProgram->addShader(_computeShader.get());
|
||||||
|
|
||||||
setDataVariance(osg::Object::DYNAMIC);
|
setDataVariance(osg::Object::DYNAMIC);
|
||||||
|
@ -41,43 +41,14 @@ using namespace osg;
|
|||||||
using namespace osgGA;
|
using namespace osgGA;
|
||||||
|
|
||||||
|
|
||||||
class SwitchDOFVisitor : public osg::NodeVisitor, public osgGA::GUIEventHandler
|
class SwitchDOFHandler : public osgGA::GUIEventHandler
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
SwitchDOFVisitor():
|
|
||||||
osg::NodeVisitor(osg::NodeVisitor::TRAVERSE_ALL_CHILDREN)
|
SwitchDOFHandler()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
SwitchDOFVisitor(const SwitchDOFVisitor& sdfv, const osg::CopyOp& copyop=osg::CopyOp::SHALLOW_COPY) {}
|
|
||||||
|
|
||||||
META_Object(osg, SwitchDOFVisitor)
|
|
||||||
|
|
||||||
virtual void apply(Group& node)
|
|
||||||
{
|
|
||||||
osgSim::MultiSwitch* pMSwitch = dynamic_cast<osgSim::MultiSwitch*>(&node);
|
|
||||||
|
|
||||||
if (pMSwitch)
|
|
||||||
{
|
|
||||||
mSwitches.push_back(pMSwitch);
|
|
||||||
}
|
|
||||||
|
|
||||||
osg::NodeVisitor::apply(node);
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual void apply(Transform& node)
|
|
||||||
{
|
|
||||||
osgSim::DOFTransform* pDof = dynamic_cast<osgSim::DOFTransform*>(&node);
|
|
||||||
|
|
||||||
if (pDof)
|
|
||||||
{
|
|
||||||
mDofs.push_back(pDof);
|
|
||||||
pDof->setAnimationOn(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
osg::NodeVisitor::apply(node);
|
|
||||||
}
|
|
||||||
|
|
||||||
void nextSwitch()
|
void nextSwitch()
|
||||||
{
|
{
|
||||||
for (size_t i=0; i < mSwitches.size(); i++)
|
for (size_t i=0; i < mSwitches.size(); i++)
|
||||||
@ -151,9 +122,53 @@ public:
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void collectNodesOfInterest(osg::Node* node)
|
||||||
|
{
|
||||||
|
CollectNodes cn(this);
|
||||||
|
node->accept(cn);
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::vector<osgSim::MultiSwitch*> mSwitches;
|
|
||||||
std::vector<osgSim::DOFTransform*> mDofs;
|
friend class CollectNodes;
|
||||||
|
|
||||||
|
class CollectNodes : public osg::NodeVisitor
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
SwitchDOFHandler* _parent;
|
||||||
|
|
||||||
|
CollectNodes(SwitchDOFHandler* parent):
|
||||||
|
osg::NodeVisitor(osg::NodeVisitor::TRAVERSE_ALL_CHILDREN),
|
||||||
|
_parent(parent)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual void apply(Group& node)
|
||||||
|
{
|
||||||
|
osgSim::MultiSwitch* pMSwitch = dynamic_cast<osgSim::MultiSwitch*>(&node);
|
||||||
|
if (pMSwitch)
|
||||||
|
{
|
||||||
|
_parent->mSwitches.push_back(pMSwitch);
|
||||||
|
}
|
||||||
|
|
||||||
|
traverse(node);
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual void apply(Transform& node)
|
||||||
|
{
|
||||||
|
osgSim::DOFTransform* pDof = dynamic_cast<osgSim::DOFTransform*>(&node);
|
||||||
|
if (pDof)
|
||||||
|
{
|
||||||
|
_parent->mDofs.push_back(pDof);
|
||||||
|
pDof->setAnimationOn(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
traverse(node);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
std::vector< osg::ref_ptr<osgSim::MultiSwitch> > mSwitches;
|
||||||
|
std::vector< osg::ref_ptr<osgSim::DOFTransform> > mDofs;
|
||||||
};
|
};
|
||||||
|
|
||||||
void singleWindowSideBySideCameras(osgViewer::Viewer& viewer)
|
void singleWindowSideBySideCameras(osgViewer::Viewer& viewer)
|
||||||
@ -262,8 +277,8 @@ int main( int argc, char **argv )
|
|||||||
viewer.addEventHandler(new osgViewer::LODScaleHandler());
|
viewer.addEventHandler(new osgViewer::LODScaleHandler());
|
||||||
viewer.addEventHandler(new osgGA::StateSetManipulator());
|
viewer.addEventHandler(new osgGA::StateSetManipulator());
|
||||||
|
|
||||||
SwitchDOFVisitor* visit = new SwitchDOFVisitor;
|
SwitchDOFHandler* switchOFHandler = new SwitchDOFHandler;
|
||||||
viewer.addEventHandler(visit);
|
viewer.addEventHandler(switchOFHandler);
|
||||||
|
|
||||||
// load the scene.
|
// load the scene.
|
||||||
osg::ref_ptr<osg::Node> loadedModel = osgDB::readRefNodeFiles(arguments);
|
osg::ref_ptr<osg::Node> loadedModel = osgDB::readRefNodeFiles(arguments);
|
||||||
@ -289,13 +304,12 @@ int main( int argc, char **argv )
|
|||||||
group2->addChild(convertedModel.get());
|
group2->addChild(convertedModel.get());
|
||||||
group2->setNodeMask(2);
|
group2->setNodeMask(2);
|
||||||
|
|
||||||
// Activate DOF animations and collect switches
|
|
||||||
loadedModel->accept(*visit);
|
|
||||||
convertedModel->accept(*visit);
|
|
||||||
|
|
||||||
group->addChild(group1);
|
group->addChild(group1);
|
||||||
group->addChild(group2);
|
group->addChild(group2);
|
||||||
|
|
||||||
|
// Activate DOF animations and collect switches
|
||||||
|
switchOFHandler->collectNodesOfInterest(group);
|
||||||
|
|
||||||
viewer.setSceneData(group);
|
viewer.setSceneData(group);
|
||||||
|
|
||||||
viewer.setThreadingModel(osgViewer::Viewer::DrawThreadPerContext);
|
viewer.setThreadingModel(osgViewer::Viewer::DrawThreadPerContext);
|
||||||
|
@ -307,6 +307,13 @@ Registry::Registry()
|
|||||||
addFileExtensionAlias("vert", "glsl");
|
addFileExtensionAlias("vert", "glsl");
|
||||||
addFileExtensionAlias("frag", "glsl");
|
addFileExtensionAlias("frag", "glsl");
|
||||||
addFileExtensionAlias("geom", "glsl");
|
addFileExtensionAlias("geom", "glsl");
|
||||||
|
addFileExtensionAlias("compute", "glsl");
|
||||||
|
addFileExtensionAlias("vs", "glsl");
|
||||||
|
addFileExtensionAlias("fs", "glsl");
|
||||||
|
addFileExtensionAlias("gs", "glsl");
|
||||||
|
addFileExtensionAlias("cs", "glsl");
|
||||||
|
addFileExtensionAlias("tctrl", "glsl");
|
||||||
|
addFileExtensionAlias("teval", "glsl");
|
||||||
|
|
||||||
addFileExtensionAlias("js", "V8");
|
addFileExtensionAlias("js", "V8");
|
||||||
|
|
||||||
|
@ -85,7 +85,7 @@ bool readerText::success(bool inSuccess, string type)
|
|||||||
|
|
||||||
bool readerText::getTrimmedLine(std::ifstream& f)
|
bool readerText::getTrimmedLine(std::ifstream& f)
|
||||||
{
|
{
|
||||||
static string line = "";
|
std::string line;
|
||||||
if (getline(f, line, _delim)) {
|
if (getline(f, line, _delim)) {
|
||||||
++_lineCount;
|
++_lineCount;
|
||||||
_str.clear();
|
_str.clear();
|
||||||
|
@ -256,7 +256,7 @@ class ReaderWriterGDAL : public osgDB::ReaderWriter
|
|||||||
int internalFormat = GL_LUMINANCE;
|
int internalFormat = GL_LUMINANCE;
|
||||||
unsigned int pixelFormat = GL_LUMINANCE;
|
unsigned int pixelFormat = GL_LUMINANCE;
|
||||||
unsigned int dataType = 0;
|
unsigned int dataType = 0;
|
||||||
unsigned int numBytesPerPixel = 0;
|
unsigned int numBytesPerComponent = 0;
|
||||||
|
|
||||||
GDALDataType targetGDALType = GDT_Byte;
|
GDALDataType targetGDALType = GDT_Byte;
|
||||||
|
|
||||||
@ -327,14 +327,14 @@ class ReaderWriterGDAL : public osgDB::ReaderWriter
|
|||||||
targetGDALType = band->GetRasterDataType();
|
targetGDALType = band->GetRasterDataType();
|
||||||
switch(band->GetRasterDataType())
|
switch(band->GetRasterDataType())
|
||||||
{
|
{
|
||||||
case(GDT_Byte): dataType = GL_UNSIGNED_BYTE; numBytesPerPixel = 1; break;
|
case(GDT_Byte): dataType = GL_UNSIGNED_BYTE; numBytesPerComponent = 1; break;
|
||||||
case(GDT_UInt16): dataType = GL_UNSIGNED_SHORT; numBytesPerPixel = 2; break;
|
case(GDT_UInt16): dataType = GL_UNSIGNED_SHORT; numBytesPerComponent = 2; break;
|
||||||
case(GDT_Int16): dataType = GL_SHORT; numBytesPerPixel = 2; break;
|
case(GDT_Int16): dataType = GL_SHORT; numBytesPerComponent = 2; break;
|
||||||
case(GDT_UInt32): dataType = GL_UNSIGNED_INT; numBytesPerPixel = 4; break;
|
case(GDT_UInt32): dataType = GL_UNSIGNED_INT; numBytesPerComponent = 4; break;
|
||||||
case(GDT_Int32): dataType = GL_INT; numBytesPerPixel = 4; break;
|
case(GDT_Int32): dataType = GL_INT; numBytesPerComponent = 4; break;
|
||||||
case(GDT_Float32): dataType = GL_FLOAT; numBytesPerPixel = 4; break;
|
case(GDT_Float32): dataType = GL_FLOAT; numBytesPerComponent = 4; break;
|
||||||
case(GDT_Float64): dataType = GL_DOUBLE; numBytesPerPixel = 8; break; // not handled
|
case(GDT_Float64): dataType = GL_DOUBLE; numBytesPerComponent = 8; break; // not handled
|
||||||
default: dataType = 0; numBytesPerPixel = 0; break; // not handled
|
default: dataType = 0; numBytesPerComponent = 0; break; // not handled
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -348,7 +348,7 @@ class ReaderWriterGDAL : public osgDB::ReaderWriter
|
|||||||
if (dataType==0)
|
if (dataType==0)
|
||||||
{
|
{
|
||||||
dataType = GL_UNSIGNED_BYTE;
|
dataType = GL_UNSIGNED_BYTE;
|
||||||
numBytesPerPixel = 1;
|
numBytesPerComponent = 1;
|
||||||
targetGDALType = GDT_Byte;
|
targetGDALType = GDT_Byte;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -360,7 +360,7 @@ class ReaderWriterGDAL : public osgDB::ReaderWriter
|
|||||||
{
|
{
|
||||||
// RGBA
|
// RGBA
|
||||||
|
|
||||||
int pixelSpace=4*numBytesPerPixel;
|
int pixelSpace=4*numBytesPerComponent;
|
||||||
int lineSpace=destWidth * pixelSpace;
|
int lineSpace=destWidth * pixelSpace;
|
||||||
|
|
||||||
imageData = new unsigned char[destWidth * destHeight * pixelSpace];
|
imageData = new unsigned char[destWidth * destHeight * pixelSpace];
|
||||||
@ -370,16 +370,16 @@ class ReaderWriterGDAL : public osgDB::ReaderWriter
|
|||||||
OSG_INFO << "reading RGBA"<<std::endl;
|
OSG_INFO << "reading RGBA"<<std::endl;
|
||||||
|
|
||||||
bandRed->RasterIO(GF_Read,windowX,windowY,windowWidth,windowHeight,(void*)(imageData+0),destWidth,destHeight,targetGDALType,pixelSpace,lineSpace);
|
bandRed->RasterIO(GF_Read,windowX,windowY,windowWidth,windowHeight,(void*)(imageData+0),destWidth,destHeight,targetGDALType,pixelSpace,lineSpace);
|
||||||
bandGreen->RasterIO(GF_Read,windowX,windowY,windowWidth,windowHeight,(void*)(imageData+1),destWidth,destHeight,targetGDALType,pixelSpace,lineSpace);
|
bandGreen->RasterIO(GF_Read,windowX,windowY,windowWidth,windowHeight,(void*)(imageData+1*numBytesPerComponent),destWidth,destHeight,targetGDALType,pixelSpace,lineSpace);
|
||||||
bandBlue->RasterIO(GF_Read,windowX,windowY,windowWidth,windowHeight,(void*)(imageData+2),destWidth,destHeight,targetGDALType,pixelSpace,lineSpace);
|
bandBlue->RasterIO(GF_Read,windowX,windowY,windowWidth,windowHeight,(void*)(imageData+2*numBytesPerComponent),destWidth,destHeight,targetGDALType,pixelSpace,lineSpace);
|
||||||
bandAlpha->RasterIO(GF_Read,windowX,windowY,windowWidth,windowHeight,(void*)(imageData+3),destWidth,destHeight,targetGDALType,pixelSpace,lineSpace);
|
bandAlpha->RasterIO(GF_Read,windowX,windowY,windowWidth,windowHeight,(void*)(imageData+3*numBytesPerComponent),destWidth,destHeight,targetGDALType,pixelSpace,lineSpace);
|
||||||
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// RGB
|
// RGB
|
||||||
|
|
||||||
int pixelSpace=3*numBytesPerPixel;
|
int pixelSpace=3*numBytesPerComponent;
|
||||||
int lineSpace=destWidth * pixelSpace;
|
int lineSpace=destWidth * pixelSpace;
|
||||||
|
|
||||||
imageData = new unsigned char[destWidth * destHeight * pixelSpace];
|
imageData = new unsigned char[destWidth * destHeight * pixelSpace];
|
||||||
@ -389,8 +389,8 @@ class ReaderWriterGDAL : public osgDB::ReaderWriter
|
|||||||
OSG_INFO << "reading RGB"<<std::endl;
|
OSG_INFO << "reading RGB"<<std::endl;
|
||||||
|
|
||||||
bandRed->RasterIO(GF_Read,windowX,windowY,windowWidth,windowHeight,(void*)(imageData+0),destWidth,destHeight,targetGDALType,pixelSpace,lineSpace);
|
bandRed->RasterIO(GF_Read,windowX,windowY,windowWidth,windowHeight,(void*)(imageData+0),destWidth,destHeight,targetGDALType,pixelSpace,lineSpace);
|
||||||
bandGreen->RasterIO(GF_Read,windowX,windowY,windowWidth,windowHeight,(void*)(imageData+1),destWidth,destHeight,targetGDALType,pixelSpace,lineSpace);
|
bandGreen->RasterIO(GF_Read,windowX,windowY,windowWidth,windowHeight,(void*)(imageData+1*numBytesPerComponent),destWidth,destHeight,targetGDALType,pixelSpace,lineSpace);
|
||||||
bandBlue->RasterIO(GF_Read,windowX,windowY,windowWidth,windowHeight,(void*)(imageData+2),destWidth,destHeight,targetGDALType,pixelSpace,lineSpace);
|
bandBlue->RasterIO(GF_Read,windowX,windowY,windowWidth,windowHeight,(void*)(imageData+2*numBytesPerComponent),destWidth,destHeight,targetGDALType,pixelSpace,lineSpace);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -399,7 +399,7 @@ class ReaderWriterGDAL : public osgDB::ReaderWriter
|
|||||||
if (bandAlpha)
|
if (bandAlpha)
|
||||||
{
|
{
|
||||||
// Luminance alpha
|
// Luminance alpha
|
||||||
int pixelSpace=2*numBytesPerPixel;
|
int pixelSpace=2*numBytesPerComponent;
|
||||||
int lineSpace=destWidth * pixelSpace;
|
int lineSpace=destWidth * pixelSpace;
|
||||||
|
|
||||||
imageData = new unsigned char[destWidth * destHeight * pixelSpace];
|
imageData = new unsigned char[destWidth * destHeight * pixelSpace];
|
||||||
@ -414,7 +414,7 @@ class ReaderWriterGDAL : public osgDB::ReaderWriter
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
// Luminance map
|
// Luminance map
|
||||||
int pixelSpace=1*numBytesPerPixel;
|
int pixelSpace=1*numBytesPerComponent;
|
||||||
int lineSpace=destWidth * pixelSpace;
|
int lineSpace=destWidth * pixelSpace;
|
||||||
|
|
||||||
imageData = new unsigned char[destWidth * destHeight * pixelSpace];
|
imageData = new unsigned char[destWidth * destHeight * pixelSpace];
|
||||||
@ -429,7 +429,7 @@ class ReaderWriterGDAL : public osgDB::ReaderWriter
|
|||||||
else if (bandAlpha)
|
else if (bandAlpha)
|
||||||
{
|
{
|
||||||
// alpha map
|
// alpha map
|
||||||
int pixelSpace=1*numBytesPerPixel;
|
int pixelSpace=1*numBytesPerComponent;
|
||||||
int lineSpace=destWidth * pixelSpace;
|
int lineSpace=destWidth * pixelSpace;
|
||||||
|
|
||||||
imageData = new unsigned char[destWidth * destHeight * pixelSpace];
|
imageData = new unsigned char[destWidth * destHeight * pixelSpace];
|
||||||
@ -444,7 +444,7 @@ class ReaderWriterGDAL : public osgDB::ReaderWriter
|
|||||||
else if (bandPalette)
|
else if (bandPalette)
|
||||||
{
|
{
|
||||||
// Paletted map
|
// Paletted map
|
||||||
int pixelSpace=1*numBytesPerPixel;
|
int pixelSpace=1*numBytesPerComponent;
|
||||||
int lineSpace=destWidth * pixelSpace;
|
int lineSpace=destWidth * pixelSpace;
|
||||||
|
|
||||||
unsigned char *rawImageData;
|
unsigned char *rawImageData;
|
||||||
@ -454,7 +454,7 @@ class ReaderWriterGDAL : public osgDB::ReaderWriter
|
|||||||
internalFormat = GL_RGBA;
|
internalFormat = GL_RGBA;
|
||||||
|
|
||||||
OSG_INFO << "reading palette"<<std::endl;
|
OSG_INFO << "reading palette"<<std::endl;
|
||||||
OSG_INFO << "numBytesPerPixel: " << numBytesPerPixel << std::endl;
|
OSG_INFO << "numBytesPerComponent: " << numBytesPerComponent << std::endl;
|
||||||
|
|
||||||
bandPalette->RasterIO(GF_Read,windowX,windowY,windowWidth,windowHeight,(void*)(rawImageData),destWidth,destHeight,targetGDALType,pixelSpace,lineSpace);
|
bandPalette->RasterIO(GF_Read,windowX,windowY,windowWidth,windowHeight,(void*)(rawImageData),destWidth,destHeight,targetGDALType,pixelSpace,lineSpace);
|
||||||
|
|
||||||
|
@ -18,12 +18,16 @@ class ReaderWriterGLSL : public osgDB::ReaderWriter
|
|||||||
{
|
{
|
||||||
supportsExtension("gl","OpenGL Shader Language format");
|
supportsExtension("gl","OpenGL Shader Language format");
|
||||||
supportsExtension("frag","OpenGL Shader Language format");
|
supportsExtension("frag","OpenGL Shader Language format");
|
||||||
|
supportsExtension("fs","OpenGL Shader Language format");
|
||||||
supportsExtension("vert","OpenGL Shader Language format");
|
supportsExtension("vert","OpenGL Shader Language format");
|
||||||
|
supportsExtension("vs","OpenGL Shader Language format");
|
||||||
supportsExtension("geom","OpenGL Shader Language format");
|
supportsExtension("geom","OpenGL Shader Language format");
|
||||||
|
supportsExtension("gs","OpenGL Shader Language format");
|
||||||
supportsExtension("glsl","OpenGL Shader Language format");
|
supportsExtension("glsl","OpenGL Shader Language format");
|
||||||
supportsExtension("tctrl","OpenGL Shader Language format");
|
supportsExtension("tctrl","OpenGL Shader Language format");
|
||||||
supportsExtension("teval","OpenGL Shader Language format");
|
supportsExtension("teval","OpenGL Shader Language format");
|
||||||
supportsExtension("compute","OpenGL Shader Language format");
|
supportsExtension("compute","OpenGL Shader Language format");
|
||||||
|
supportsExtension("cs","OpenGL Shader Language format");
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual const char* className() const { return "GLSL Shader Reader"; }
|
virtual const char* className() const { return "GLSL Shader Reader"; }
|
||||||
@ -126,12 +130,12 @@ class ReaderWriterGLSL : public osgDB::ReaderWriter
|
|||||||
if (shader->getType() == osg::Shader::UNDEFINED)
|
if (shader->getType() == osg::Shader::UNDEFINED)
|
||||||
{
|
{
|
||||||
// set type based on filename extension, where possible
|
// set type based on filename extension, where possible
|
||||||
if (ext == "frag") shader->setType(osg::Shader::FRAGMENT);
|
if (ext == "frag" || ext == "fs") shader->setType(osg::Shader::FRAGMENT);
|
||||||
if (ext == "vert") shader->setType(osg::Shader::VERTEX);
|
if (ext == "vert" || ext == "vs" ) shader->setType(osg::Shader::VERTEX);
|
||||||
if (ext == "geom") shader->setType(osg::Shader::GEOMETRY);
|
if (ext == "geom" || ext == "geom") shader->setType(osg::Shader::GEOMETRY);
|
||||||
if (ext == "tctrl") shader->setType(osg::Shader::TESSCONTROL);
|
if (ext == "tctrl") shader->setType(osg::Shader::TESSCONTROL);
|
||||||
if (ext == "teval") shader->setType(osg::Shader::TESSEVALUATION);
|
if (ext == "teval") shader->setType(osg::Shader::TESSEVALUATION);
|
||||||
if (ext == "compute") shader->setType(osg::Shader::COMPUTE);
|
if (ext == "compute" || ext == "cs") shader->setType(osg::Shader::COMPUTE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return rr;
|
return rr;
|
||||||
|
@ -321,7 +321,7 @@ class LOGOReaderWriter : public osgDB::ReaderWriter
|
|||||||
if( ld->hasLogos() )
|
if( ld->hasLogos() )
|
||||||
geode->addDrawable( ld );
|
geode->addDrawable( ld );
|
||||||
|
|
||||||
geode->setCullingActive(false);
|
ld->setCullingActive(false);
|
||||||
return geode;
|
return geode;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -5,7 +5,7 @@ SET(TARGET_SRC
|
|||||||
NVTTImageProcessor.cpp
|
NVTTImageProcessor.cpp
|
||||||
)
|
)
|
||||||
|
|
||||||
SET(TARGET_LIBRARIES_VARS NVTT_LIBRARY)
|
SET(TARGET_EXTERNAL_LIBRARIES ${TARGET_EXTERNAL_LIBRARIES} ${NVTT_LIBRARIES})
|
||||||
|
|
||||||
#### end var setup ###
|
#### end var setup ###
|
||||||
SETUP_PLUGIN(nvtt)
|
SETUP_PLUGIN(nvtt)
|
||||||
|
@ -491,16 +491,17 @@ class ReaderWriterTGA : public osgDB::ReaderWriter
|
|||||||
int t = height_ret;
|
int t = height_ret;
|
||||||
int r = 1;
|
int r = 1;
|
||||||
|
|
||||||
int internalFormat = numComponents_ret;
|
|
||||||
|
|
||||||
unsigned int pixelFormat =
|
unsigned int pixelFormat =
|
||||||
numComponents_ret == 1 ? GL_LUMINANCE :
|
numComponents_ret == 1 ? GL_LUMINANCE :
|
||||||
numComponents_ret == 2 ? GL_LUMINANCE_ALPHA :
|
numComponents_ret == 2 ? GL_LUMINANCE_ALPHA :
|
||||||
numComponents_ret == 3 ? GL_RGB :
|
numComponents_ret == 3 ? GL_RGB :
|
||||||
numComponents_ret == 4 ? GL_RGBA : (GLenum)-1;
|
numComponents_ret == 4 ? GL_RGBA : (GLenum)-1;
|
||||||
|
|
||||||
|
int internalFormat = pixelFormat;
|
||||||
|
|
||||||
unsigned int dataType = GL_UNSIGNED_BYTE;
|
unsigned int dataType = GL_UNSIGNED_BYTE;
|
||||||
|
|
||||||
|
|
||||||
osg::Image* pOsgImage = new osg::Image;
|
osg::Image* pOsgImage = new osg::Image;
|
||||||
pOsgImage->setImage(s,t,r,
|
pOsgImage->setImage(s,t,r,
|
||||||
internalFormat,
|
internalFormat,
|
||||||
|
@ -121,11 +121,11 @@ bool ZipArchive::open(const std::string& file, ArchiveStatus status, const osgDB
|
|||||||
if ( !_zipLoaded ) // double-check avoids race condition
|
if ( !_zipLoaded ) // double-check avoids race condition
|
||||||
{
|
{
|
||||||
std::string ext = osgDB::getLowerCaseFileExtension(file);
|
std::string ext = osgDB::getLowerCaseFileExtension(file);
|
||||||
if (!acceptsExtension(ext)) return osgDB::ReaderWriter::ReadResult::FILE_NOT_HANDLED;
|
if (!acceptsExtension(ext)) return false;
|
||||||
|
|
||||||
// save the filename + password so other threads can open the file
|
// save the filename + password so other threads can open the file
|
||||||
_filename = osgDB::findDataFile( file, options );
|
_filename = osgDB::findDataFile( file, options );
|
||||||
if (_filename.empty()) return osgDB::ReaderWriter::ReadResult::FILE_NOT_FOUND;
|
if (_filename.empty()) return false;
|
||||||
|
|
||||||
_password = ReadPassword(options);
|
_password = ReadPassword(options);
|
||||||
|
|
||||||
|
@ -135,11 +135,13 @@ int ShapeAttribute::compare(const osgSim::ShapeAttribute& sa) const
|
|||||||
{
|
{
|
||||||
if (_string<sa._string) return -1;
|
if (_string<sa._string) return -1;
|
||||||
if (sa._string<_string) return 1;
|
if (sa._string<_string) return 1;
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
case DOUBLE:
|
case DOUBLE:
|
||||||
{
|
{
|
||||||
if (_double<sa._double) return -1;
|
if (_double<sa._double) return -1;
|
||||||
if (sa._double<_double) return 1;
|
if (sa._double<_double) return 1;
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
case INTEGER:
|
case INTEGER:
|
||||||
case UNKNOWN:
|
case UNKNOWN:
|
||||||
@ -147,6 +149,7 @@ int ShapeAttribute::compare(const osgSim::ShapeAttribute& sa) const
|
|||||||
{
|
{
|
||||||
if (_integer<sa._integer) return -1;
|
if (_integer<sa._integer) return -1;
|
||||||
if (sa._integer<_integer) return 1;
|
if (sa._integer<_integer) return 1;
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -12,8 +12,8 @@ TangentSpaceGenerator::TangentSpaceGenerator()
|
|||||||
N_(new osg::Vec4Array)
|
N_(new osg::Vec4Array)
|
||||||
{
|
{
|
||||||
T_->setBinding(osg::Array::BIND_PER_VERTEX); T_->setNormalize(false);
|
T_->setBinding(osg::Array::BIND_PER_VERTEX); T_->setNormalize(false);
|
||||||
B_->setBinding(osg::Array::BIND_PER_VERTEX); T_->setNormalize(false);
|
B_->setBinding(osg::Array::BIND_PER_VERTEX); B_->setNormalize(false);
|
||||||
N_->setBinding(osg::Array::BIND_PER_VERTEX); T_->setNormalize(false);
|
N_->setBinding(osg::Array::BIND_PER_VERTEX); N_->setNormalize(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
TangentSpaceGenerator::TangentSpaceGenerator(const TangentSpaceGenerator ©, const osg::CopyOp ©op)
|
TangentSpaceGenerator::TangentSpaceGenerator(const TangentSpaceGenerator ©, const osg::CopyOp ©op)
|
||||||
@ -281,9 +281,15 @@ void TangentSpaceGenerator::compute(osg::PrimitiveSet *pset,
|
|||||||
OSG_WARN << "Warning: TangentSpaceGenerator: texture coord array must be Vec2Array, Vec3Array or Vec4Array" << std::endl;
|
OSG_WARN << "Warning: TangentSpaceGenerator: texture coord array must be Vec2Array, Vec3Array or Vec4Array" << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(nx){
|
|
||||||
osg::Vec3 V, T1, T2, T3, B1, B2, B3;
|
osg::Vec3 V, T1, T2, T3, B1, B2, B3;
|
||||||
|
|
||||||
|
// no normal per vertex use the one by face
|
||||||
|
if (!nx) {
|
||||||
|
N1 = (P2 - P1) ^ (P3 - P1);
|
||||||
|
N2 = N1;
|
||||||
|
N3 = N1;
|
||||||
|
}
|
||||||
|
|
||||||
V = osg::Vec3(P2.x() - P1.x(), uv2.x() - uv1.x(), uv2.y() - uv1.y()) ^
|
V = osg::Vec3(P2.x() - P1.x(), uv2.x() - uv1.x(), uv2.y() - uv1.y()) ^
|
||||||
osg::Vec3(P3.x() - P1.x(), uv3.x() - uv1.x(), uv3.y() - uv1.y());
|
osg::Vec3(P3.x() - P1.x(), uv3.x() - uv1.x(), uv3.y() - uv1.y());
|
||||||
if (V.x() != 0) {
|
if (V.x() != 0) {
|
||||||
@ -321,67 +327,28 @@ void TangentSpaceGenerator::compute(osg::PrimitiveSet *pset,
|
|||||||
}
|
}
|
||||||
|
|
||||||
osg::Vec3 tempvec;
|
osg::Vec3 tempvec;
|
||||||
|
|
||||||
tempvec = N1 ^ T1;
|
tempvec = N1 ^ T1;
|
||||||
(*T_)[iA] = osg::Vec4(tempvec ^ N1, 0);
|
(*T_)[iA] += osg::Vec4(tempvec ^ N1, 0);
|
||||||
|
|
||||||
tempvec = B1 ^ N1;
|
tempvec = B1 ^ N1;
|
||||||
(*B_)[iA] = osg::Vec4(N1 ^ tempvec, 0);
|
(*B_)[iA] += osg::Vec4(N1 ^ tempvec, 0);
|
||||||
|
|
||||||
tempvec = N2 ^ T2;
|
tempvec = N2 ^ T2;
|
||||||
(*T_)[iB] = osg::Vec4(tempvec ^ N2, 0);
|
(*T_)[iB] += osg::Vec4(tempvec ^ N2, 0);
|
||||||
|
|
||||||
tempvec = B2 ^ N2;
|
tempvec = B2 ^ N2;
|
||||||
(*B_)[iB] = osg::Vec4(N2 ^ tempvec, 0);
|
(*B_)[iB] += osg::Vec4(N2 ^ tempvec, 0);
|
||||||
|
|
||||||
tempvec = N3 ^ T3;
|
tempvec = N3 ^ T3;
|
||||||
(*T_)[iC] = osg::Vec4(tempvec ^ N3, 0);
|
(*T_)[iC] += osg::Vec4(tempvec ^ N3, 0);
|
||||||
|
|
||||||
tempvec = B3 ^ N3;
|
tempvec = B3 ^ N3;
|
||||||
(*B_)[iC] = osg::Vec4(N3 ^ tempvec, 0);
|
(*B_)[iC] += osg::Vec4(N3 ^ tempvec, 0);
|
||||||
|
|
||||||
(*N_)[iA] += osg::Vec4(N1, 0);
|
(*N_)[iA] += osg::Vec4(N1, 0);
|
||||||
(*N_)[iB] += osg::Vec4(N2, 0);
|
(*N_)[iB] += osg::Vec4(N2, 0);
|
||||||
(*N_)[iC] += osg::Vec4(N3, 0);
|
(*N_)[iC] += osg::Vec4(N3, 0);
|
||||||
}
|
|
||||||
else{
|
|
||||||
osg::Vec3 face_normal = (P2 - P1) ^ (P3 - P1);
|
|
||||||
|
|
||||||
osg::Vec3 V;
|
|
||||||
|
|
||||||
V = osg::Vec3(P2.x() - P1.x(), uv2.x() - uv1.x(), uv2.y() - uv1.y()) ^
|
|
||||||
osg::Vec3(P3.x() - P1.x(), uv3.x() - uv1.x(), uv3.y() - uv1.y());
|
|
||||||
if (V.x() != 0) {
|
|
||||||
V.normalize();
|
|
||||||
(*T_)[iA].x() += -V.y() / V.x();
|
|
||||||
(*B_)[iA].x() += -V.z() / V.x();
|
|
||||||
(*T_)[iB].x() += -V.y() / V.x();
|
|
||||||
(*B_)[iB].x() += -V.z() / V.x();
|
|
||||||
(*T_)[iC].x() += -V.y() / V.x();
|
|
||||||
(*B_)[iC].x() += -V.z() / V.x();
|
|
||||||
}
|
|
||||||
|
|
||||||
V = osg::Vec3(P2.y() - P1.y(), uv2.x() - uv1.x(), uv2.y() - uv1.y()) ^
|
|
||||||
osg::Vec3(P3.y() - P1.y(), uv3.x() - uv1.x(), uv3.y() - uv1.y());
|
|
||||||
if (V.x() != 0) {
|
|
||||||
V.normalize();
|
|
||||||
(*T_)[iA].y() += -V.y() / V.x();
|
|
||||||
(*B_)[iA].y() += -V.z() / V.x();
|
|
||||||
(*T_)[iB].y() += -V.y() / V.x();
|
|
||||||
(*B_)[iB].y() += -V.z() / V.x();
|
|
||||||
(*T_)[iC].y() += -V.y() / V.x();
|
|
||||||
(*B_)[iC].y() += -V.z() / V.x();
|
|
||||||
}
|
|
||||||
|
|
||||||
V = osg::Vec3(P2.z() - P1.z(), uv2.x() - uv1.x(), uv2.y() - uv1.y()) ^
|
|
||||||
osg::Vec3(P3.z() - P1.z(), uv3.x() - uv1.x(), uv3.y() - uv1.y());
|
|
||||||
if (V.x() != 0) {
|
|
||||||
V.normalize();
|
|
||||||
(*T_)[iA].z() += -V.y() / V.x();
|
|
||||||
(*B_)[iA].z() += -V.z() / V.x();
|
|
||||||
(*T_)[iB].z() += -V.y() / V.x();
|
|
||||||
(*B_)[iB].z() += -V.z() / V.x();
|
|
||||||
(*T_)[iC].z() += -V.y() / V.x();
|
|
||||||
(*B_)[iC].z() += -V.z() / V.x();
|
|
||||||
}
|
|
||||||
|
|
||||||
(*N_)[iA] += osg::Vec4(face_normal, 0);
|
|
||||||
(*N_)[iB] += osg::Vec4(face_normal, 0);
|
|
||||||
(*N_)[iC] += osg::Vec4(face_normal, 0);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user