//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. PAT基础级-钻石段位样卷2-7-6 帅到没朋友 (20 分)

    当芸芸众生忙着在朋友圈中发照片的时候,总有一些人因为太帅而没有朋友.本题就要求你找出那些帅到没有朋友的人. 输入格式: 输入第一行给出一个正整数N(≤),是已知朋友圈的个数:随后N行,每行首先给出一个 ...

  2. Nginx access_log日志添加返回字段

    主要为方便单用户请求日志回溯分析   记录用户标记. 将用户信息打印在access_log 日志里. 步骤: 1.重写nginx 的log格式 一般是地址是  /etc/nginx/conf.d/ng ...

  3. 运输层5——TCP报文段的首部格式

    写在前面:本文章是针对<计算机网络第七版>的学习笔记 运输层1--运输层协议概述 运输层2--用户数据报协议UDP 运输层3--传输控制协议TCP概述 运输层4--TCP可靠运输的工作原理 ...

  4. Mybatis接口中传递多个参数

    1.接口 public interface MemberMapper { public boolean insertMember(Members member); public Members sel ...

  5. seastar笔记

    1.seastar::A.then([]{B});C:的核心思想是说我们开始了A之后就开始B,开始B之后就开始C,而不需要等A做完了再做B,B做完再做C 2.通常的return是一个需要执行的函数,例 ...

  6. pycharm鼠标更改字体大小

    Pycharm快捷键设置(鼠标滚动控制字体大小) 一.pycharm字体放大的设置 File -> setting -> Keymap ->在搜寻框中输入:increase -> ...

  7. pycharm连接不上mysql数据库的解决办法

    问题描述 环境:ubuntu18.04,mysql5.7 今天在ubuntu下使用pycharm连接mysql,发现连接不上 这不是缺少驱动吗?下载之! 下好之后点进去 连接 点击test conne ...

  8. [Angular] Show a Loading Indicator for Lazy Routes in Angular

    We can easily code split and lazy load a route in Angular. However when the user then clicks that la ...

  9. Java中实例方法和类方法的区别举例

    QAQQAQAQQQAQQAQQAQAQ import java.util.ArrayList; import java.util.Iterator; class myclass{ ; ; publi ...

  10. 013——C# chart控件时间作为X轴(附教程)

    (一)参考文献:C#之Chart控件系列教程——一 (二)下载地址:https://download.csdn.net/download/xiaoguoge11/11838944 (三)视频教程:ht ...