OSG学习
文章平均质量分 68
某吃货敲代码
敲代码,程序媛媛
展开
-
OSG学习笔记15-OSG中对事件的处理
看了王锐大大的书,我感觉OSG中对事件的处理主要是由以下几块组成的:1、事件适配器 GUIEventAdapter这个类是作为系统交互事件和OSG交互事件的适配接口。这一句话还不是很理解。源码文档里对于这个类的定义是:事件类,存储键盘、鼠标和窗口事件。公有类型包括:(这些类型都是枚举类型,每个类型中有若干整形常量)MouseButtonMaskEventType :原创 2016-10-10 20:05:28 · 3611 阅读 · 0 评论 -
OSG学习笔记18 - 关于物体绕指定点旋转的问题(非坐标轴原点)
两种解决方案:1、使用PAT节点,即PositionAttitudeTransform节点类中的,setPivotPoint(const Vec3d&)来设置旋转轴心或缩放轴心。这个是查到的方法,但实践没有成功,在调用这个setPivotPoint()方法时,模型总会发生位移,没有找出原因。这里贴出一下osg forum里的相关内容,希望能有所帮助。http://forum.opens原创 2017-03-14 21:15:38 · 6611 阅读 · 5 评论 -
OSG学习笔记24——根据鼠标平移的位置正确设置物体平移量
一直以来都没有将这个平移量设置正确,也没有考虑清楚这个视景体的问题。今天终于弄明白啦。先看图,其实归根结底都是透视投影的原理。之前计算平移量的时候总是得不到正确的平移,也没有理解到为什么,经过实践检验真理,才真正理解到了原理。在屏幕上的鼠标移动只是计算了在屏幕上移动的像素,要想正确的映射到物体的移动量上,就需要将这个量投影到真正的操作平面,就是这里的D平面。讲一下实现流程,假设鼠标原创 2017-03-31 15:32:25 · 2459 阅读 · 0 评论 -
OSG学习笔记20——光照和材质的设置(正确绘制出想要的颜色)
本来一开始学习OSG和Opengl的时候,因为用不太到关于颜色渲染之类的内容,关注的比较多的都是如何与场景进行交互。现在突然想给场景添加一个地面,发现不能得到正确的结果,并且加载进来的模型也会随着地面颜色的改变而呈现不同的颜色。原创 2017-03-25 16:43:31 · 9411 阅读 · 0 评论 -
OSG学习笔记21——有关getProjectionMatrixAs...的trick
这是一个关于投影变换的问题,经过model-view变换后,场景中的物体放置了希望的位置上,就需要投影变换来将三维物体投影到二维屏幕上。投影变换的目的就是定义一个视景体,使视景体之外的部分被裁剪掉,最终进入图像的只是视景体内的有关部分。关于投影变换的其他内容就不介绍了。这里来讲讲为什么getProjectionMatrixAsPerspective(fovy,aspectRatio,z原创 2017-03-25 17:29:43 · 2582 阅读 · 0 评论 -
Trackball rotate的OSG实现(一)(不是manipulator那种~是动物体那种!)
先写一下我的大致实现流程 鼠标单击模型,调用pick函数,来判断是否pick到了物体,并且获取模型的包围球中心和半径来作为我们这个virtual trackball的方程,哦,还要获取当前模型的位置。 然后将屏幕上的点映射到世界坐标下的球面上。Created with Raphaël 2.1.0开始获取屏幕上的点 (x,y)得出球面上映射出来的z坐标求出rotateParameter结束详细叙述原创 2017-03-09 19:38:22 · 2159 阅读 · 0 评论 -
OSG学习笔记25——屏幕坐标——相机坐标——世界坐标之间的转换
osg::Vec3d TrackballRotate::screen2World(osg::Vec3 screenPoint)//将屏幕坐标转换到世界坐标{ osg::Vec3d vec3; osg::ref_ptr camera = viewer->getCamera(); //osg::Vec3d vScreen(x,y, 0); osg::Matr原创 2017-04-13 16:28:54 · 8001 阅读 · 5 评论 -
OSG学习笔记26——创建HUD,并调用事件修改显示内容
好久没有更新博客啦~最近有点停滞不前的感觉,今天终于实现了几个功能,可以更两篇博客啦~目标:想通过点击菜单来修改HUD的提示信息。其实很简单啊,但我就是自己想不出来。主要参考的是这篇博客里面的实现。http://blog.csdn.net/tmljs1988/article/details/7563016关于HUD还参考了这篇博客http://www.cnblogs.com/chaoswo原创 2017-04-26 21:17:43 · 1759 阅读 · 5 评论 -
Trackball rotate的OSG实现(二)(不是manipulator那种~是动物体那种!)
接上篇,这是篇水数量的博客。bool TrackballRotate::handle(const osgGA::GUIEventAdapter& ea, osgGA::GUIActionAdapter& aa){ viewer = dynamic_cast(&aa); if (!viewer) return false; switch (ea.getEventType()) {原创 2017-03-09 19:41:08 · 832 阅读 · 0 评论 -
OSG学习笔记23——设置隐藏和显示节点(使用setNodeMask())
首先一开始设置场景中的某个节点为隐藏状态mtCenter->setNodeMask(0);一开始尝试在eventHandler里面使用节点名字来遍历这个节点,发现根本找不到,因为设置为隐藏节点,大概在遍历的过程中跳过了这个节点。(虽然这个节点明明还存在在内存中)If wrong, fix me please~之后就只有通过viewer获取场景数据,获取到根节点,并且指定子节点来设置该节原创 2017-03-29 14:47:45 · 4810 阅读 · 0 评论 -
OSG学习笔记22——设置物体透明,再恢复
设置物体透明,trans是透明度的设置,这里如果没有setRenderingHint()虽然看起来是透明的,但模型还是会遮挡其他模型。然后就是BLEND要打开,光照和深度测试要关掉。模型的材质也要事先设置。并将材质保存起来以便恢复的时候调用。 osg::Material *material = new osg::Material; material->setDiffuse(osg::Mate原创 2017-03-29 14:37:39 · 3921 阅读 · 2 评论 -
OSG+TUIO osgRecipes之osgtuio
在OSG中使用TUIO原创 2016-10-24 19:51:48 · 1046 阅读 · 0 评论 -
OSG学习笔记16 - 对点选物体平移(鼠标点选物体)(物体随鼠标移动)(屏幕坐标转世界坐标)
之前的一篇博文是有一篇对点选物体进行平移、缩放旋转。那一篇是很简单的调用了OSG中定义的一些dragger,但这些dragger都有坐标轴或者tapbox等在模型上,与我最近要做的事情的需求不同。网上也找了好久,最终还是自己一点一点,参考老师之前写的代码,然后在亲爱的童童师兄的帮助下,实现了这么一个小小的功能。虽然代码写的乱糟糟的。这里就简单记录一下整个思路吧。1、构造一个事件处理器,也就原创 2016-11-16 14:42:05 · 5680 阅读 · 3 评论 -
计算射线与平面的交点
#include "stdafx.h"#includeusing namespace std;struct Point3{ float x; float y; float z;};struct Vector{ float x; float y; float z;};struct Ray{ //一点,和一个方向向量(两点求差)确定一条射线, Point3 p原创 2016-12-05 20:15:55 · 6984 阅读 · 1 评论 -
正确的设置相机参数 setViewMatrixAsLookAt
正确的设置相机参数 setViewMatrixAsLookAt原创 2016-12-06 22:25:37 · 6116 阅读 · 6 评论 -
OSG学习笔记17——正确设置物体的缩放矩阵
问题:做了一个触摸屏上的三维模型的缩放功能,发现在对模型进行缩放的时候模型的位置会有偏差。解决方法:问了王大大之后,再查了一下资料,记录于此。参考资料《在OSG中的实现三维物体的标准变换》 许昌学院学报 2008年 一篇久远的文章。在OSG中进行变换容易出现问题的原因1、基本变换是默认以世界坐标为变换中心的2、我们所期望的变换是以物体为变换中心因此,每次变换时,需要将变原创 2017-03-04 12:15:22 · 2343 阅读 · 3 评论 -
OpenGL Object Mouse Trackball 三维物体的trackball旋转实现原理
https://www.khronos.org/opengl/wiki/Object_Mouse_Trackball这是一篇翻译+碎碎念~~~翻译的不好,见谅引言trackball(又称 arcball)是为了复杂三维物体的旋转操作提供一个直观的用户界面(User Interface,UI 这里译成用户界面感觉怪怪的),使得旋转操作通过一个简单的虚拟的球体来实现。球体是虚拟轨迹球的很好的选择,因为球原创 2017-03-08 21:12:39 · 6241 阅读 · 8 评论 -
OSG学习笔记19——再看pick点选物体
之前一直使用的pick方法就是将第一个点选到的节点保存下来,如果场景中只有一个物体,当然是没有问题的。当场景中出现多个物体,并且每个物体设置了标签,是可以被修改还是不能被修改,当两个物体重合的时候就不能得到正确的结果。正确的做法是:用迭代器遍历所有获取到的节点并再遍历nodePath,找到需要的节点,并根据标签判断其是否可以被选中来执行操作。这里我对物体标签设置的方法应该是不够科学的,我用原创 2017-03-22 09:53:08 · 1671 阅读 · 0 评论 -
OSG学习笔记17 创建和处理用户定义事件 UserEvent(防查重。图片版)
、原创 2018-03-14 10:17:13 · 1664 阅读 · 1 评论