virtual void apply(osg::Geode& node)
{
for (int i = ; i < node.getNumDrawables(); i++)
{
osg::Geometry* geometry = dynamic_cast<osg::Geometry*>(node.getDrawable(i));
if (geometry)
{
//apply(*g);
//***********************************************
//解析顶点
osg::Array* vertexArray = geometry->getVertexArray();
if (vertexArray == NULL)
return; //顶点数组
osg::Vec3Array* verts = dynamic_cast<osg::Vec3Array*>(vertexArray);
long lVertNum = verts->size();
std::vector<osg::Vec3 >::iterator iter_ver = verts->begin(); //遍历顶点值
for (; iter_ver != verts->end(); iter_ver++)
{
double x = iter_ver->x();
double y = iter_ver->y();
double z = iter_ver->z();
} //纹理
osg::Texture2D* tex2D = dynamic_cast<osg::Texture2D*>(geometry->getStateSet()->getTextureAttribute(, osg::StateAttribute::TEXTURE));
osg::Image* image = tex2D->getImage();
osgDB::writeImageFile(*image, "abc.jpg");
int width = image->s();
int height = image->t();
/*osg::Vec2 color;
osg::Vec4 c = image->getColor(color);*/ //UV
osg::Array* uvArry = geometry->getTexCoordArray();
osg::Vec2Array* vertsUV = dynamic_cast<osg::Vec2Array*>(uvArry);
std::vector<osg::Vec2 >::iterator iter_verUV = vertsUV->begin(); std::vector<int> greenPointIndices;
int i = ;
for (; iter_verUV != vertsUV->end(); iter_verUV++)
{
double u = iter_verUV->x();
double v = iter_verUV->y();
osg::Vec2 color(u, v);
osg::Vec4 c = image->getColor(color);
float r = c.r() * ;
float g = c.g() * ;
float b = c.b() * ;
if (r < && g < && b < )
greenPointIndices.push_back(i);
i++;
} //索引
int numP = geometry->getNumPrimitiveSets();
osg::ref_ptr<osg::DrawElementsUInt> drawElemUInt = new osg::DrawElementsUInt(GL_TRIANGLES);
for (unsigned int ipr = ; ipr < numP; ipr++)
{
osg::PrimitiveSet* prset = geometry->getPrimitiveSet(ipr);
unsigned int ncnt = prset->getNumIndices();
for (unsigned int ic = ; ic * < prset->getNumIndices(); ic++)
{
unsigned int iIndex0 = prset->index(ic * );
unsigned int iIndex1 = prset->index(ic * + );
unsigned int iIndex2 = prset->index(ic * + );
bool find = false;
for (int i = ; i < greenPointIndices.size(); i++)
{
if (greenPointIndices[i] == iIndex0 || greenPointIndices[i] == iIndex1 || greenPointIndices[i] == iIndex2)
{
find = true;
break;
}
}
if (find)
continue;
else
{
drawElemUInt->push_back(prset->index(ic * ));
drawElemUInt->push_back(prset->index(ic * + ));
drawElemUInt->push_back(prset->index(ic * + ));
}
}
} osg::ref_ptr<osg::Geometry> geometry_new = new osg::Geometry();
geometry_new->setVertexArray(verts);
geometry_new->getOrCreateStateSet()->setTextureAttributeAndModes(, tex2D, osg::StateAttribute::ON);
geometry_new->setTexCoordArray(, uvArry);
geometry_new->addPrimitiveSet(drawElemUInt); osg::Geode* pGeode_new = new osg::Geode;
pGeode_new->removeDrawables(, pGeode_new->getNumDrawables());
pGeode_new->addDrawable(geometry_new);
osgDB::writeNodeFile(*pGeode_new, "test.osgb", new osgDB::Options("WriteImageHint=IncludeData Compressor=zlib")); //***********************************************
}
}
}

geode中顶点对应UV色彩在阈值范围内的三角形删除,并生成新的geode保存成osgb文件输出

最新文章

  1. NYOJ 478
  2. jquery 给指定li添加制定的css样式
  3. GWT-Dev-Plugin(即google web toolkit developer plugin)for firefox的下载地址
  4. ASIHTTPRequest类库简介和使用说明
  5. 怎样避免 i f 判断过多,全复杂度较高,代码不美观的问题?
  6. 纯css径向渐变(CSS3--Gradient)
  7. xscript脚本
  8. 屯题50AC纪念
  9. sql2012 新增 OFFSET/FETCH
  10. 《APUE》读书笔记第十二章-线程控制
  11. Private Members in JavaScript
  12. android:minSdkVersion 之我见
  13. centos 7 切换运行模式
  14. java线程池的创建使用
  15. React-native搭建移动端ios开发环境实践笔记
  16. hbuilder vs2013api Access-Control-Allow-Origin
  17. Java编程思想——异常
  18. Java-Runoob-高级教程-实例-方法:13. Java 实例 – for 和 foreach循环使用
  19. 解决Java Web项目中Word、Excel等二进制文件编译后无法打开的问题
  20. InteliiJ IDEA的安装配置与简单使用

热门文章

  1. [Thiinking in Java]自闭学习之路(一)构造器
  2. 创业学习---《预判项目的长期壁垒》--B-3.预判模块---HHR计划---以太一堂
  3. SpringBoot与Mybatis整合(包含generate自动生成代码工具,数据库表一对一,一对多,关联关系中间表的查询)
  4. Spring学习(七)
  5. 从零搭建vue+express开发环境
  6. base64,base32bit加密解密
  7. 针对sklearn.svm中的&quot;dual_coef_&quot;理解
  8. updataxml报错注入
  9. CSS选择器整理
  10. selenium 参数设置-window.navigator.webdriver