本文整理汇总了C++中X3DAttributes类的典型用法代码示例。如果您正苦于以下问题:C++ X3DAttributes类的具体用法?C++ X3DAttributes怎么用?C++ X3DAttributes使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了X3DAttributes类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1:
int X3DXIOTNodeHandler::startTransform(const X3DAttributes &attr)
{
#ifdef _DEBUG
std::cout << "Start Transform" << std::endl;
#endif
// Get all the X3D tranformation data
SFVec3f translation;
SFRotation rotation;
int index = attr.getAttributeIndex(ID::translation);
if (index != -1)
{
attr.getSFVec3f(index,translation);
}
index = attr.getAttributeIndex(ID::rotation);
if (index != -1)
{
attr.getSFRotation(index,rotation);
}
assert(m_currentLeaf);
if (m_currentLeaf)
{
ccGLMatrix mat;
mat.initFromParameters(rotation.angle,
CCVector3(rotation.x,rotation.y,rotation.z),
CCVector3(translation.x,translation.y,translation.z));
m_currentLeaf->setGLTransformation(mat);
}
return CONTINUE;
}
开发者ID:imight,项目名称:trunk,代码行数:33,代码来源:X3DXIOTNodeHandler.cpp
示例2: createUniqueName
std::string OgreNodeHandler::createUniqueName(const X3DAttributes &attr, const std::string& prefix)
{
if (attr.isDEF())
return attr.getDEF();
string result;
result.append(prefix);
result.append(StringConverter::toString(++_objCount));
return result;
}
开发者ID:151706061,项目名称:MEPP,代码行数:10,代码来源:OgreNodeHandler.cpp
示例3: startColor
int OgreNodeHandler::startColor(const X3DAttributes &attr)
{
if(!_currentGeometry)
throw std::runtime_error("Color currently only supported for IndexedFaceSets");
int index = attr.getAttributeIndex(ID::color);
if (index != -1)
_currentGeometry->setColors(attr.getMFColor(index));
else
throw std::runtime_error("No color given within Color node");
return 1;
}
开发者ID:151706061,项目名称:MEPP,代码行数:11,代码来源:OgreNodeHandler.cpp
示例4: startNormal
int OgreNodeHandler::startNormal(const X3DAttributes &attr)
{
if(!_currentGeometry)
throw std::runtime_error("Normal currently only supported for IndexedFaceSets");
int index = attr.getAttributeIndex(ID::vector);
if (index != -1)
_currentGeometry->setNormals(attr.getMFVec3f(index));
else
throw std::runtime_error("No points given within Coordinate node");
return 1;
}
开发者ID:151706061,项目名称:MEPP,代码行数:11,代码来源:OgreNodeHandler.cpp
示例5: startShape
int OgreNodeHandler::startShape(const X3DAttributes &attr) {
std::cout << "Start Shape" << std::endl;
if (attr.isUSE()) {
_currentEntity = _sceneManager->getEntity(attr.getUSE())->clone(createUniqueName(attr, "shapeUSE"));
} else {
// We can not create a entity yet, because Ogre does not
// allow an entity without a mesh. So we create the entity as
// soon as we have a mesh
_shapeName = attr.isDEF() ? attr.getDEF() : createUniqueName(attr, "shape");
}
return 1;
}
开发者ID:151706061,项目名称:MEPP,代码行数:13,代码来源:OgreNodeHandler.cpp
示例6: startIndexedLineSet
int OgreNodeHandler::startIndexedLineSet(const X3DAttributes &attr) {
_currentGeometry = new IndexedGeometry(createUniqueName(attr, "indexedLineSet"));
int index = attr.getAttributeIndex(ID::coordIndex);
if (index != -1)
_currentGeometry->setCoordIndex(attr.getMFInt32(index));
index = attr.getAttributeIndex(ID::colorPerVertex);
_currentGeometry->setColorPerVertex(index != -1 ? attr.getSFBool(index) : true);
return CONTINUE;
}
开发者ID:151706061,项目名称:MEPP,代码行数:13,代码来源:OgreNodeHandler.cpp
示例7: startSphere
int OgreNodeHandler::startSphere(const X3DAttributes &attr) {
std::cout << "Start Sphere\n";
int index = attr.getAttributeIndex(ID::radius);
float radius = index == -1 ? 1.0 : attr.getSFFloat(index);
const string name = createUniqueName(attr, "sphere");
GeomUtils::createSphere(name , radius, 20, 20, true, false);
_currentMesh = MeshManager::getSingleton().getByName(name);
_currentEntity = _sceneManager->createEntity(_shapeName, name);
return 1;
}
开发者ID:151706061,项目名称:MEPP,代码行数:13,代码来源:OgreNodeHandler.cpp
示例8: startBox
virtual int startBox(const X3DAttributes& attr)
{
testEvent(14, "start Box");
int index = attr.getAttributeIndex(ID::size);
assert(index != -1);
return CONTINUE;
}
开发者ID:RobH616,项目名称:trunk,代码行数:8,代码来源:dist_test.cpp
示例9: ccPointCloud
int X3DXIOTNodeHandler::startCoordinate(const X3DAttributes &attr)
{
int index = attr.getAttributeIndex(ID::point);
if (index == -1)
{
//TODO: warn user instead
//throw std::runtime_error("No points given within Coordinate node");
return SKIP_CHILDREN;
}
MFVec3f points;
attr.getMFVec3f(index,points);
unsigned count = points.size();
if (count == 0)
return SKIP_CHILDREN;
ccPointCloud* cloud = new ccPointCloud(attr.isDEF() ? attr.getDEF().c_str() : 0);
if (!cloud->reserve(count))
{
//not enough memory!
delete cloud;
return SKIP_CHILDREN;
}
for (MFVec3f::const_iterator it=points.begin(); it!=points.end(); ++it)
cloud->addPoint(CCVector3(it->x,it->y,it->z));
assert(m_currentLeaf);
m_currentLeaf->addChild(cloud);
//cloud = parent vertices?
if (m_currentLeaf->isKindOf(CC_MESH))
{
ccGenericMesh* mesh = ccHObjectCaster::ToGenericMesh(m_currentLeaf);
if (mesh->getAssociatedCloud()==0)
{
mesh->setAssociatedCloud(cloud);
cloud->setVisible(false);
}
}
m_currentLeaf = cloud;
return CONTINUE;
}
开发者ID:markgenemei,项目名称:trunk,代码行数:46,代码来源:X3DXIOTNodeHandler.cpp
示例10: startMaterial
virtual int startMaterial(const X3DAttributes& attr)
{
testEvent(11, "start Material");
int index = attr.getAttributeIndex(ID::diffuseColor);
assert(index != -1);
SFColor diffuseColor;
attr.getSFColor(index, diffuseColor);
assert(diffuseColor.r == 1.0);
assert(diffuseColor.g == 0.0);
assert(diffuseColor.b == 0.0);
cout << "Diffuse Color is: " << diffuseColor.r << " " << diffuseColor.g << " " << diffuseColor.b << endl;
index = attr.getAttributeIndex(ID::transparency);
assert(index != -1);
float transparency = attr.getSFFloat(index);
assert(transparency == 0.1f);
return CONTINUE;
}
开发者ID:RobH616,项目名称:trunk,代码行数:20,代码来源:dist_test.cpp
示例11: startTransform
int OgreNodeHandler::startTransform(const X3DAttributes &attr) {
std::cout << "Start Transform" << std::endl;
// Get all the X3D tranformation data
SFVec3f translation;
SFRotation rotation;
int index = attr.getAttributeIndex(ID::translation);
if (index != -1)
{
translation = attr.getSFVec3f(index);
}
index = attr.getAttributeIndex(ID::rotation);
if (index != -1)
{
rotation = attr.getSFRotation(index);
}
SceneNode* node = _nodeStack.top()->createChildSceneNode(createUniqueName(attr, "transform"));
node->resetToInitialState();
node->translate(translation.x, translation.y, translation.z);
node->rotate(Vector3(rotation.x, rotation.y, rotation.z), Radian(rotation.angle));
_nodeStack.push(node);
return 1;
}
开发者ID:151706061,项目名称:MEPP,代码行数:24,代码来源:OgreNodeHandler.cpp
示例12: startDirectionalLight
int OgreNodeHandler::startDirectionalLight(const X3DAttributes &attr) {
Light* light = _sceneManager->createLight(createUniqueName(attr, "directionalLight"));
light->setType(Ogre::Light::LT_DIRECTIONAL);
// Get the X3D values;
SFVec3f direction;
SFColor color;
int index = attr.getAttributeIndex(ID::direction);
if (index != -1)
{
direction = attr.getSFVec3f(index);
}
else
direction.z = -1;
index = attr.getAttributeIndex(ID::color);
if (index != -1)
{
color = attr.getSFColor(index);
}
else
color.r = color.g = color.b = 1;
index = attr.getAttributeIndex(ID::intensity);
float intensity = (index == -1) ? 1 : attr.getSFFloat(index);
index = attr.getAttributeIndex(ID::on);
bool on = (index == -1) ? true : attr.getSFBool(index);
// Set the Ogre values
light->setDirection(direction.x, direction.y, direction.z);
Ogre::ColourValue colourValue(color.r, color.g, color.b);
colourValue *= intensity;
light->setDiffuseColour(colourValue);
light->setSpecularColour(colourValue);
light->setVisible(on);
_nodeStack.top()->attachObject(light);
return 1;
}
开发者ID:151706061,项目名称:MEPP,代码行数:42,代码来源:OgreNodeHandler.cpp
示例13: startIndexedFaceSet
int OgreNodeHandler::startIndexedFaceSet(const X3DAttributes &attr) {
std::cout << "Start IndexedFaceSet" << std::endl;
_currentGeometry = new IndexedGeometry(createUniqueName(attr, "indexedFaceSet"));
int index = attr.getAttributeIndex(ID::coordIndex);
if (index != -1)
_currentGeometry->setCoordIndex(attr.getMFInt32(index));
index = attr.getAttributeIndex(ID::normalIndex);
if (index != -1)
_currentGeometry->setNormalIndex(attr.getMFInt32(index));
index = attr.getAttributeIndex(ID::normalPerVertex);
_currentGeometry->setNormalPerVertex(index != -1 ? attr.getSFBool(index) : true);
return 1;
}
开发者ID:151706061,项目名称:MEPP,代码行数:19,代码来源:OgreNodeHandler.cpp
示例14: ccMesh
int X3DXIOTNodeHandler::startIndexedFaceSet(const X3DAttributes &attr)
{
std::cout << "Start IndexedFaceSet" << std::endl;
ccMesh* mesh = new ccMesh(0);
unsigned realFaceNumber=0;
if (attr.isDEF())
mesh->setName(attr.getDEF().c_str());
//Vertices indexes
int vertIndex = attr.getAttributeIndex(ID::coordIndex);
if (vertIndex != -1)
{
MFInt32 streamIndexes;
attr.getMFInt32(vertIndex,streamIndexes);
int triIndexes[3];
int pos=0;
for (MFInt32::const_iterator it = streamIndexes.begin(); it != streamIndexes.end(); ++it)
{
if (*it == -1) //end of polygon
{
if (pos<3)
{
//incomplete dataset?
//TODO: warn user
}
pos = 0;
++realFaceNumber;
}
else //new vertex index
{
if (pos<3)
{
triIndexes[pos]=*it;
}
else
{
//FIXME: simplistic fan triangulation (hum, hum)
triIndexes[1]=triIndexes[2];
triIndexes[2]=*it;
}
++pos;
}
//new face
if (pos==3)
{
//we check that we are at the end of the polygon (we don't handle non triangular meshes yet!)
if (it+1 == streamIndexes.end() || *(it+1)==-1)
{
//we must reserve some more space for storage!
if (mesh->size() == mesh->maxSize())
{
if (!mesh->reserve(mesh->maxSize() + 100))
{
delete mesh;
return ABORT; //not enough memory!
}
}
mesh->addTriangle(triIndexes[0],triIndexes[1],triIndexes[2]);
}
else
{
//TODO: we don't handle non triangle faces yet!
}
}
}
if (mesh->size() < mesh->maxSize())
{
//unhandled type of mesh
if (mesh->size()==0)
{
delete mesh;
return SKIP_CHILDREN;
}
mesh->resize(mesh->size());
}
}
//Normals (per face)
int normIndex = attr.getAttributeIndex(ID::normalIndex);
if (normIndex != -1)
{
//per-triangle normals!
if (mesh->size() == realFaceNumber)
{
if (mesh->reservePerTriangleNormalIndexes())
{
MFInt32 perFaceNormIndexes;
attr.getMFInt32(normIndex,perFaceNormIndexes);
for (unsigned i=0;i<perFaceNormIndexes.size();++i)
mesh->addTriangleNormalIndexes(i,i,i);
mesh->showTriNorms(true);
}
else
{
//.........这里部分代码省略.........
开发者ID:imight,项目名称:trunk,代码行数:101,代码来源:X3DXIOTNodeHandler.cpp
示例15: startMaterial
int OgreNodeHandler::startMaterial(const X3DAttributes &attr) {
std::cout << "Start Material" << std::endl;
if (!_currentMaterial.isNull())
{
Pass* pass = _currentMaterial->getTechnique(0)->getPass(0);
int index = attr.getAttributeIndex(ID::ambientIntensity);
float ambientIntensity = (index == -1) ? 0.2f : attr.getSFFloat(index);
index = attr.getAttributeIndex(ID::transparency);
float transparency = (index == -1) ? 0.0f : attr.getSFFloat(index);
SFColor diffuseColor;
index = attr.getAttributeIndex(ID::diffuseColor);
if (index != -1)
{
diffuseColor = attr.getSFColor(index);
}
else
{
diffuseColor.r = diffuseColor.g = diffuseColor.b = 0.8;
}
SFColor specularColor;
index = attr.getAttributeIndex(ID::specularColor);
if (index != -1)
{
specularColor = attr.getSFColor(index);
}
SFColor emissiveColor;
index = attr.getAttributeIndex(ID::emissiveColor);
if (index != -1)
{
emissiveColor = attr.getSFColor(index);
}
index = attr.getAttributeIndex(ID::shininess);
float shininess = (index == -1) ? 0.2f : attr.getSFFloat(index);
shininess = Math::Clamp(shininess * 128.0f, 0.0f, 128.0f);
pass->setAmbient(ambientIntensity * diffuseColor.r,
ambientIntensity * diffuseColor.g,
ambientIntensity * diffuseColor.b);
pass->setDiffuse(diffuseColor.r,
diffuseColor.g,
diffuseColor.b,
1.0f - transparency);
pass->setSpecular(specularColor.r,
specularColor.g,
specularColor.b,
1.0f - transparency);
pass->setSelfIllumination(emissiveColor.r,
emissiveColor.g,
emissiveColor.b);
pass->setShininess( shininess );
pass->setLightingEnabled(true);
}
return 1;
}
开发者ID:151706061,项目名称:MEPP,代码行数:61,代码来源:OgreNodeHandler.cpp
注:本文中的X3DAttributes类示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论