osg::Vec2 Vec3 Vec4

本文介绍了OSG(OpenSceneGraph)中几种常用的矢量类型,包括osg::Vec2用于2D纹理坐标、osg::Vec3作为三维浮点数数组以及osg::Vec4用于保存颜色数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

osg::Vec2可以用于保存2D纹理坐标。
osg::Vec3是一个三维浮点数数组。
osg::Vec4用于保存颜色数据。

转载于:https://www.cnblogs.com/huahai/p/7270934.html

static osg::Geometry* createCircleBottlePart(const std::vector<double>& radiuses, const std::vector<osg::Vec3d>& centers) { double deltaAngle = osg::PI * 2.0 / CIRCLE_SEGMENT_NUM; osg::Quat rot; rot.makeRotate(deltaAngle, osg::Vec3d(0, 0, 1)); osg::ref_ptr<osg::Vec3Array> va = new osg::Vec3Array; osg::ref_ptr<osg::Vec3Array> na = new osg::Vec3Array; osg::ref_ptr<osg::Vec2Array> ta = new osg::Vec2Array; osg::ref_ptr<osg::Geometry> geom = new osg::Geometry; geom->setVertexArray(va); geom->setNormalArray(na, osg::Array::BIND_PER_VERTEX); geom->setTexCoordArray(0, ta); osg::Vec3d bottomC = centers.back(); for (size_t i = 1; i < centers.size(); ++i) { double r1 = radiuses[i - 1]; double r2 = radiuses[i]; const osg::Vec3d& c1 = centers[i - 1]; const osg::Vec3d& c2 = centers[i]; float tcy1 = (centers[i - 1].z() - bottomC.z()) * 0.6; float tcy2 = (centers[i].z() - bottomC.z()) * 0.6; osg::ref_ptr<osg::DrawElementsUInt> de = new osg::DrawElementsUInt(osg::PrimitiveSet::TRIANGLE_STRIP); osg::Vec3d cdir(1, 0, 0); for (size_t si = 0; si < CIRCLE_POINT_NUM; ++si) { osg::Vec3d dir = rot * cdir; cdir = dir; osg::Vec3d v1 = c1 + dir * r1; osg::Vec3d v2 = c2 + dir * r2; osg::Vec3d n1 = v1 - c1; n1.normalize(); osg::Vec3d n2 = v2 - c2; n2.normalize(); float tcx = (2.0 * osg::PI * radiuses.back()) * 0.6 * (float)si / (float)CIRCLE_SEGMENT_NUM; osg::Vec2 tc1(tcx, tcy1); osg::Vec2 tc2(tcx, tcy2); de->push_back(va->size() + 0); de->push_back(va->size() + 1); va->push_back(v1); va->push_back(v2); na->push_back(n1); na->push_back(n2); ta->push_back(tc1); ta->push_back(tc2); } geom->addPrimitiveSet(de); } return geom.release(); } 重新给你一份代码,还是上述需求,要增加一个顶面,扣除一个小圆,增加一个参数r
最新发布
03-11
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值