//x y z font_size
osg::Geode* makeCoordinate(float a_x,float a_y,float a_z,float font_size)
{
osg::ref_ptr<osg::Sphere> pSphereShape = new osg::Sphere(osg::Vec3(0, 0, 0), 1.0f);
osg::ref_ptr<osg::ShapeDrawable> pShapeDrawable = new osg::ShapeDrawable(pSphereShape.get());
pShapeDrawable->setColor(osg::Vec4(0.0, 0.0, 0.0, 1.0)); //创建保存几何信息的对象
osg::ref_ptr<osg::Geometry> geom = new osg::Geometry(); //创建四个顶点
osg::ref_ptr<osg::Vec3Array> v = new osg::Vec3Array();
v->push_back(osg::Vec3(0.0f, 0.0f, 0.0f));
v->push_back(osg::Vec3(a_x, 0.0f, 0.0f)); v->push_back(osg::Vec3(0.0f, 0.0f, 0.0f));
v->push_back(osg::Vec3(0.0f, a_y, 0.0f));
v->push_back(osg::Vec3(0.0f, 0.0f, 0.0f)); v->push_back(osg::Vec3(0.0f, 0.0f, a_z));
geom->setVertexArray(v.get()); osg::ref_ptr<osg::Vec4Array> c = new osg::Vec4Array();
c->push_back(osg::Vec4(1.0f, 0.0f, 0.0f, 1.0f));
c->push_back(osg::Vec4(1.0f, 0.0f, 0.0f, 1.0f)); c->push_back(osg::Vec4(0.0f, 1.0f, 0.0f, 1.0f));
c->push_back(osg::Vec4(0.0f, 1.0f, 0.0f, 1.0f));
c->push_back(osg::Vec4(0.0f, 0.0f, 1.0f, 1.0f)); c->push_back(osg::Vec4(0.0f, 0.0f, 1.0f, 1.0f));
geom->setColorArray(c.get());
geom->setColorBinding(osg::Geometry::BIND_PER_VERTEX); //xyz
geom->addPrimitiveSet(new osg::DrawArrays(osg::PrimitiveSet::LINES, 0, 2));
geom->addPrimitiveSet(new osg::DrawArrays(osg::PrimitiveSet::LINES, 2, 2));
geom->addPrimitiveSet(new osg::DrawArrays(osg::PrimitiveSet::LINES, 4, 2)); osg::ref_ptr<osgText::Text> pTextXAuxis1 = new osgText::Text;
pTextXAuxis1->setText(L"X");
pTextXAuxis1->setFont("Fonts/simhei.ttf"); pTextXAuxis1->setAxisAlignment(osgText::Text::SCREEN);
pTextXAuxis1->setCharacterSize(font_size);
pTextXAuxis1->setPosition(osg::Vec3(a_x, 0.0f, 0.0f)); osg::ref_ptr<osgText::Text> pTextYAuxis1 = new osgText::Text;
pTextYAuxis1->setText(L"Y");
pTextYAuxis1->setFont("Fonts/simhei.ttf"); pTextYAuxis1->setAxisAlignment(osgText::Text::SCREEN);
pTextYAuxis1->setCharacterSize(font_size);
pTextYAuxis1->setPosition(osg::Vec3(0.0f, a_y, 0.0f)); osg::ref_ptr<osgText::Text> pTextZAuxis1 = new osgText::Text;
pTextZAuxis1->setText(L"Z");
pTextZAuxis1->setFont("Fonts/simhei.ttf"); pTextZAuxis1->setAxisAlignment(osgText::Text::SCREEN);
pTextZAuxis1->setCharacterSize(font_size);
pTextZAuxis1->setPosition(osg::Vec3(0.0f, 0.0f, a_z)); osg::ref_ptr<osg::Geode> geode = new osg::Geode();
geode->getOrCreateStateSet()->setMode(GL_LIGHTING, osg::StateAttribute::OFF);
geode->getOrCreateStateSet()->setAttribute(new osg::LineWidth(3.0), osg::StateAttribute::ON); geode->addDrawable(pShapeDrawable.get());
geode->addDrawable(geom.get());
geode->addDrawable(pTextXAuxis1.get()); geode->addDrawable(pTextYAuxis1.get());
geode->addDrawable(pTextZAuxis1.get()); return geode.release();
}

效果图片:

参考:https://blog.csdn.net/sun222555888/article/details/52083413

osg 在场景中绘制坐标轴(xyz)的更多相关文章

  1. 原生WebGL场景中绘制多个圆锥圆柱

    前几天解决了原生WebGL开发中的一个问题,就是在一个场景中绘制多个几何网格特征不同的模型,比如本文所做的绘制多个圆锥和圆柱在同一个场景中,今天抽空把解决的办法记录下来,同时也附上代码.首先声明,圆柱 ...

  2. OSG项目经验2<在场景中添加文字面版>

    添加文字版需要用到osg的三个名字空间:                         osgText::Text,这个类用来添加文字和设置文字的一些属性:                     ...

  3. 如何在3D场景中在模型上面绘制摄取点

    有些时候,我们在屏幕上面绘制一个摄取点,在单屏玩游戏的模式下,我们并不能觉得有什么不妥.但是最近VR的热火朝天,我们带上眼镜看双屏的时候,总觉得这个摄取点看着很不舒服. 这个问题该怎么解决?在这里我首 ...

  4. CSharpGL(6)在OpenGL中绘制UI元素

    CSharpGL(6)在OpenGL中绘制UI元素 2016-08-13 由于CSharpGL一直在更新,现在这个教程已经不适用最新的代码了.CSharpGL源码中包含10多个独立的Demo,更适合入 ...

  5. Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第六章:在Direct3D中绘制

    原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第六章:在Direct3D中绘制 代码工程地址: https://gi ...

  6. SharpGL学习笔记(十二) 光源例子:解决光源场景中的常见问题

    笔者学到光源这一节,遇到的问题就比较多了,收集了一些如下所述: (1) 导入的3ds模型,如果没有材质光照效果很奇怪.如下图 (2) 导入的3ds模型,有材质,灯光效果发暗,材质偏色,效果也很奇怪. ...

  7. OSG实现场景漫游(转载)

    OSG实现场景漫游 下面的代码将可以实现场景模型的导入,然后在里面任意行走,于此同时还实现了碰撞检测. 源代码下载地址: /* * File : Travel.cpp * Description : ...

  8. 在WebGL场景中建立游戏规则

    在前三篇文章的基础上,为基于Babylon.js的WebGL场景添加了类似战棋游戏的基本操作流程,包括从手中选择单位放入棋盘.显示单位具有的技能.选择技能.不同单位通过技能进行交互.处理交互结果以及进 ...

  9. 在WebGL场景中进行棋盘操作的实验

    这篇文章讨论如何在基于Babylon.js的WebGL场景中,建立棋盘状的地块和多个可选择的棋子对象,在点选棋子时显示棋子的移动范围,并且在点击移动范围内的空白地块时向目标地块移动棋子.在这一过程中要 ...

随机推荐

  1. orm多表查询基于双下划线

    ###########基于双下划线的跨表查询(基于join实现的)############# key: 正向查询按字段,反向查询按表名小写 1.查询python这本书出版社的名字 ret = Book ...

  2. [转]BIO/NIO/AIO的几个思考

    原文:https://www.jianshu.com/p/ff29e028af07 ----------------------------------------------------- BIO/ ...

  3. P1091 合唱队形[单调性+DP]

    题目来源:洛谷 题目描述 N位同学站成一排,音乐老师要请其中的(N−K)位同学出列,使得剩下的K位同学排成合唱队形. 合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1,2,…,K,他们的身高 ...

  4. springboot的入门

    SpringBoot SpringBoot是SpringMVC的升级版,简化配置,很可能成为下一代的框架 1.新建项目 怎么创建springBoot项目呢? 创建步骤复杂一点点 New Project ...

  5. CSS float详解

    前言:在我们写CSS样式的时候,float,position,display,overflow这几个关键字用得比较多. 弄清楚他们之间的原理,我们可以更高效的写出我们想要的布局. 作者:Ry-yuan ...

  6. TDOA Delayed Tx 实现以及验证

    在博文:https://www.cnblogs.com/tuzhuke/p/11638221.html 中描述了delayed tx实现方法,这里贴出全部delayed tx 代码以及对应验证代码 1 ...

  7. Redis学习之一--基础知识

    一.定义 REmote DIctionary Server(Redis) 是一个以字典结构存储数据的key-value存储系统:使用ANSI C语言编写.遵守BSD协议.支持网络.可基于内存亦可持久化 ...

  8. Vuex框架原理与源码分析

    Vuex是一个专为Vue服务,用于管理页面数据状态.提供统一数据操作的生态系统.它集中于MVC模式中的Model层,规定所有的数据操作必须通过 action - mutation - state ch ...

  9. luogu P3709 大爷的字符串题

    二次联通门 : luogu P3709 大爷的字符串题 /* luogu P3709 大爷的字符串题 莫队 看了半天题目 + 题解 才弄懂了要求什么... 维护两个数组 一个记录数字i出现了几次 一个 ...

  10. Python基础之定义有默认参数的函数

    1. 构建有默认参数的函数 当我们在构建一个函数或者方法时,如果想使函数中的一个或者多个参数使可选的,并且有一个默认值,那么可以在函数定义中给参数指定一个默认值,并且放到参数列表的最后就行了.比如: ...