osg 在场景中绘制坐标轴(xyz)
//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)的更多相关文章
- 原生WebGL场景中绘制多个圆锥圆柱
前几天解决了原生WebGL开发中的一个问题,就是在一个场景中绘制多个几何网格特征不同的模型,比如本文所做的绘制多个圆锥和圆柱在同一个场景中,今天抽空把解决的办法记录下来,同时也附上代码.首先声明,圆柱 ...
- OSG项目经验2<在场景中添加文字面版>
添加文字版需要用到osg的三个名字空间: osgText::Text,这个类用来添加文字和设置文字的一些属性: ...
- 如何在3D场景中在模型上面绘制摄取点
有些时候,我们在屏幕上面绘制一个摄取点,在单屏玩游戏的模式下,我们并不能觉得有什么不妥.但是最近VR的热火朝天,我们带上眼镜看双屏的时候,总觉得这个摄取点看着很不舒服. 这个问题该怎么解决?在这里我首 ...
- CSharpGL(6)在OpenGL中绘制UI元素
CSharpGL(6)在OpenGL中绘制UI元素 2016-08-13 由于CSharpGL一直在更新,现在这个教程已经不适用最新的代码了.CSharpGL源码中包含10多个独立的Demo,更适合入 ...
- Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第六章:在Direct3D中绘制
原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第六章:在Direct3D中绘制 代码工程地址: https://gi ...
- SharpGL学习笔记(十二) 光源例子:解决光源场景中的常见问题
笔者学到光源这一节,遇到的问题就比较多了,收集了一些如下所述: (1) 导入的3ds模型,如果没有材质光照效果很奇怪.如下图 (2) 导入的3ds模型,有材质,灯光效果发暗,材质偏色,效果也很奇怪. ...
- OSG实现场景漫游(转载)
OSG实现场景漫游 下面的代码将可以实现场景模型的导入,然后在里面任意行走,于此同时还实现了碰撞检测. 源代码下载地址: /* * File : Travel.cpp * Description : ...
- 在WebGL场景中建立游戏规则
在前三篇文章的基础上,为基于Babylon.js的WebGL场景添加了类似战棋游戏的基本操作流程,包括从手中选择单位放入棋盘.显示单位具有的技能.选择技能.不同单位通过技能进行交互.处理交互结果以及进 ...
- 在WebGL场景中进行棋盘操作的实验
这篇文章讨论如何在基于Babylon.js的WebGL场景中,建立棋盘状的地块和多个可选择的棋子对象,在点选棋子时显示棋子的移动范围,并且在点击移动范围内的空白地块时向目标地块移动棋子.在这一过程中要 ...
随机推荐
- 河南省acm第九届省赛--《表达式求值》--栈和后缀表达式的变形--手速题
表达式求值 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 假设表达式定义为:1. 一个十进制的正整数 X 是一个表达式.2. 如果 X 和 Y 是 表达式,则 X+Y, ...
- 网站入侵工具 SQL注入神器
0x 00 前言 SQLMAP 0x 01 注入原理 不说了 *****************************************结束分割线********** ...
- 文件读写(一)利用File静态类 System.IO.FileInfo、DirectoryInfo、DriveInfo
提供用于创建.复制.删除.移动和打开单一文件的静态方法,并协助创建 FileStream 对象. 一.读文件: 1.返回字符串:File.ReadAllText() string readText = ...
- super关键字小结(构造方法的执行是不是一定会创建对象?)
1.父类 public class Person { private String name = "李四"; private int age; public Person() { ...
- python - django (session)
# """ # Session # 是存在服务端的键值对 # Session 必须依赖Cookie 存储Session: · 在服务器生成随机字符串 · 生成一个和上面随 ...
- SpringMVC返回类型
7.SpringMVC的返回值类型和参数传递 1.SpringMVC的返回值类型 (1)ModelAndView返回值类型: 1.1当返回为null时,页面不跳转. 1.2当返回值没有指定视图名时,默 ...
- 使用druid连接池的超时回收机制排查连接泄露
起因:系统连接池满了 Exception wait millis 60012, active 2000, maxActive 2000, creating 0 加配置排查: <!-- 超过时间限 ...
- web+页面支持批量下载吗
一.此方法火狐有些版本是不支持的 window.location.href = 'https://*****.oss-cn-**.aliyuncs.com/*********';二.为了解决火狐有些版 ...
- PHP+下载文件夹
php下载文件我整理了这三种方法,和大家分享一下: 第一种:直接添加文件下载的绝对路径连接 //如:我有一个文件在demo.xx.cn/demo.zip<button> <a ...
- 在默认使用apache中央仓库时, 报错 protocol_version
https://cloud.tencent.com/developer/ask/136221/answer/241408 2018年6月,为了提高安全性和符合现代标准,不安全的TLS 1.0和1.1协 ...