osg
祝太勇
一蓑烟雨任平生
展开
-
osgearth加载3dtiles(亲测可行) 及源码分析
(它的_content是空的);然后根据根json 上的children的个数, 再创建 N个 ThreeDTileNode(它的_content挂的是ThreeDTilesetContentNode);这个N个ThreeDTileNode 可以理解为 就是子文件夹的个数;他的_content可以理解为 子文件夹上的主json。在下一次遍历中会判断是否有返回值;把根json在主线程加载完毕后;下一帧的时候,会调用。并没有一直遍历的接口;它创建的对象,是放在。代表每个文件夹下的主json;原创 2024-03-04 17:23:15 · 669 阅读 · 0 评论 -
osgearth加载glb模型(亲测可行)
我们想在osgearth加载glb模型,但是一直找不到一种好的方法;其实有一种非常简单的方法。Registry 类;在类的构造函数中添加如下函数。但是如果只是简单的添加,是无法加载到场景中的。编译,然后运用到osgearth中,就可以了。下一步我们要打开我们的osg源码,然后找到。现在我就将该方法仔细说明一下。原创 2024-03-04 15:44:14 · 287 阅读 · 0 评论 -
osgearth 加载天地图(亲测可行)
【代码】osgearth 加载天地图(亲测可行)原创 2023-03-28 08:29:23 · 725 阅读 · 1 评论 -
cesium osgearth 屏幕空间误差理解
maxGeometricError是地球赤道的周长/像素数(表示:一个像素代表多少米)该角度是 瓦片二分之一高度下世界高度 除以 相机距离瓦片的距离的。sseDenominator是相机fovy角度的tan值的2倍。height 表示屏幕高 多少像素。原创 2023-03-24 14:28:12 · 445 阅读 · 0 评论 -
osg 判断多边形凹凸
bool hasHollowPoint(std::vector<osg::Vec3d> allPoints){std::vector<osg::Vec3d> pHollowPoints;auto num = allPoints.size();osg::Vec3d pHollowNor = (allPoints[num - 1] - allPoints[0]) ^ (allPoints[1] - allPoints[0]);osg::Vec3d Nor;fo原创 2022-01-26 16:13:19 · 529 阅读 · 0 评论 -
四元数、欧拉角互相转换
void QuatToHPR(osg::Quat q, double& heading, double& pitch, double& roll){double test = q.y() * q.z() + q.x() * q.w();if (test > 0.4999){ // singularity at north poleheading = 2.0 * atan2(q.y(), q.w());pitch = osg::PI_2;roll ...原创 2021-12-31 11:19:55 · 276 阅读 · 0 评论 -
osgearth经纬度坐标系转换
假设您在经纬度(wgs84)中有一个点,您需要在UTM区域15N中表示它:(从wgs84坐标系转换到其他经纬度坐标系)const SpatialReference* wgs84 = SpatialReference::get("wgs84");const SpatialReference* utm15 = SpatialReference::get("+proj=utm +zone=15 +ellps=GRS80 +units=m");GeoPoint wgsPoint( wgs84, -原创 2021-12-31 10:02:45 · 2657 阅读 · 0 评论 -
osg frame
osg的顶点坐标和索引信息是由osg::Geometry类负责保存的,那么负责将Geometry对象的数据传递给State对象的,就是渲染树的叶节点RenderLeaft了。在Geometry类的绘制过程中,则将自己记录的数据信息传递给State对象,由它负责完成顶点的载入和处理工作。而渲染树在其中的作用,就是抽取每个渲染树节点RenderBin中的渲染叶RenderLeaf对象,交由osg::State整合它在状态树中继承的全部渲染状态,并将几何体数据传递给OpenGL管线,完成绘制的工作。原创 2021-12-21 09:47:59 · 140 阅读 · 0 评论 -
一个非常好用的矩阵旋转
从temp 法向量 旋转到 Up法向量osg::Vec3d Up;osg::Vec3d temp(0,0,1); osg::Matrix::rotate(temp, Up) ;原创 2021-12-08 17:05:53 · 211 阅读 · 0 评论 -
osg 和 OpenGL坐标系朝向
原创 2021-12-03 15:18:28 · 3409 阅读 · 0 评论 -
osg生成不缩放球体
osg::Node* BuildNoScaleSphere(float x, float y, float z){ osg::Sphere* phere = new osg::Sphere(osg::Vec3f(x, y, z), 1.0f); osg::ShapeDrawable * drawable = new osg::ShapeDrawable(phere); drawable->setColor(osg::Vec4f(1.0, 0.0, 0.0, 1.0));...原创 2021-12-03 13:49:13 · 302 阅读 · 0 评论 -
osgEarth::VirtualProgram简单使用方法
const char* strVert = R"( #version 330 void earthTransparencyV(inout vec4 vertex) { })";const char* strFrag = R"( #version 330 uniform float TransparencyValue; void earthTransparencyF(inout vec4 col...原创 2021-11-28 16:02:33 · 416 阅读 · 0 评论 -
osg 设置半透明
osg::Geometry* geom = new osg::Geometry();//颜色为半透明颜色osg::ref_ptr<osg::Vec4Array> colors = new osg::Vec4Array;colors->push_back(osg::Vec4(1.0f ,0.0f,0.0f,0.5f));geom->setColorArray(colors.get());//开启融合操作geom ->getOrCreateStateSet()->原创 2021-11-19 10:11:39 · 648 阅读 · 0 评论 -
四元数与矩阵转换
将四元数变换到矩阵osg::Matrix mat;osg::Quat qat; qat.get(mat);矩阵变换到相机osg::Vec3d eye, center, up; mat.getLookAt(eye, center, up);地球操作器平移原理double len = _eye.length();_eye += v3Direction * _speed;_eye.normalize();_eye *= len;...原创 2021-10-09 17:53:33 · 393 阅读 · 0 评论 -
osgearth获取3DTile节点包围盒,矩阵
osgEarth::Contrib::ThreeDTiles::ThreeDTilesetNode* _node;osg::BoundingSphere bss = _node->computeBound(); osgEarth::Contrib::ThreeDTiles::Tile* oe_tile = _bimModel->getTileset()->root(); optional< osg::Matrixd > osg_Matrix = oe.原创 2021-09-16 17:38:01 · 943 阅读 · 2 评论 -
osg 节点设置背面剔除功能
osg::ref_ptr <osg::Group> root;osg::ref_ptr<osg::CullFace> cullface=new osg::CullFace(osg::CullFace::BACK); root->getOrCreateStateSet()->setAttribute(cullface.get()); root->getOrCreateStateSet()->setMode(GL_CULL_FACE,osg:.原创 2021-08-31 16:54:32 · 370 阅读 · 0 评论 -
多视图隐藏节点
使用 setCullMask 在每个 osg::Camera 上设置不同的剔除掩码。在您的节点上调用 setNodeMask()。如果这两个掩码的按位与非零,则将遍历该节点。原创 2021-07-22 15:44:53 · 110 阅读 · 0 评论