关于在Unity3D中使用C++ DLL库的记录 啊,long time no see...大概又是很久没有更新博客了。好消息是我今天正式收到了转正邮件了。最近get到了一个新技能,就是在U3D中调我们自己写的C++的库。之前也有用到过,但都是导师来接好了,没有自己研究过。现将内容记录如下。1. 关于Unity中导入外部库,在PC端和安卓端pc端使用的是C++ test.dll, 安卓端使用的是 libtest.so. 其中安...
git的使用方法记录(一)新建分支 版本控制真的是个很头疼的问题,萌新入职四个月了,用了svn,也用了git,除了会pull,就只会push了。要改什么工程的时候,总怕改错,就复制一份,在另一个工程改,导致现在我自己的某个工程,有好几个版本,每个版本都有需要的功能,头疼。。如果会版本管理,会切分支,合并分支会不会好一点呢。刚刚PM突然说需要出个文件,但我本地的工程被改的面目全非,需要回退到之前的版本,但我现在改的版本也是需要...
GLM 踩坑记录 谨以此贴记录一下GLM踩过的坑,说到底还是菜了。。。1. 关于四元数的构造顺序是w,x,y,z....某次要导入动画文件,一直卡着,找不到问题,才发现原来通过glm::quat()构造四元数的时候的顺序是glm::quat(w,x,y,z),最惨烈的是调试的时候显示的顺序是x,y,z,w,之前用unity构造四元数的时候也是x,y,z,w。2.有一些glm的方式接受的参数是弧度,有一些接收...
【译】BVH,Biovision hierarchy 关于BVH 文件类型 这是一篇翻译,因为要了解一些BVH,看到一篇文章还不错,也不长,就边翻译边记录一下吧。原文链接: http://www.mindfiresolutions.com/BVH-biovision-hierarchy.htm原文作者:Manjunath背景:原文作者要将动画数据导出到 .bvh文件中,没有相关的SDK来写bvh文件,所以他就写了一个C++来导出animation data到bvh的代码。...
骨骼动画驱动的一般方法,以及使用FBX SDK的一些实现 我终于要更新博客了,进公司之后每天学的做的很多,但真正有时间去总结的时候很少。之后的话尽量每周都要做一个知识的总结和积累吧,一方面自己真的是做过就忘,另一方面也能够将自己踩到的坑,遇到的问题与大家分享一下。入职三个月吧第一个月最主要的事情就是在骨骼动画的驱动,一开始是研究的Assimp这个库,也实现了相应的功能,但后来发现坑实在是太多,对之后的扩展也不好,最后还是开始啃超级不友好的FBX SDK。...
C++ 学习笔记(五) 各种变量 && extern、static关键字 1、局部变量:只在局部作用的变量,比如在函数体中、在for循环中、在if语句中声明定义的变量,如果不加特定的关键字,他就是局部变量。2、全局变量:作用于整个程序的变量,可以被多个源代码文件共享。它被定义在函数的外部。在不同的源程序中使用已定义的全局变量需使用extern关键字声明,告诉编译器,这个是已经在其他源代码中定义过的全局变量。全局变量只能被定义一次,但可以被声明多次。//file_1.cp...
TUIO学习笔记1-TUIO 1.1 Protocol Specification协议规范/标准 写在前面:(吐槽)基本上是翻译了TUIO协议标准,为什么没有大神来翻译这个。看的很辛苦。翻译的肯定很多不准确的。好奇能不能不看这个标准,直接使用呢。为什么我总是要学习这些很难的不会的东西呢。—————————————————————————————————————————————————————————————————————————————http://www.tuio.org/?specifi...
C++ 学习笔记(四) 关于sizeof的用法 1、在32位机器上,指针的大小为4,64位系统上,指针的大小为8int *p;cout << "size of pointer: " << sizeof(p) << endl;输出结果为 42、数组的大小,和数组作为形参,退化成指针的情况(1)数组大小int a[10];cout << "size of int array[10]: " <
数据结构(一) 交换排序 最近只看了冒泡和快排这两个算法,今天面试就让写排序,用电脑写,一去就让写代码,贼慌,然后面试官小姐姐真的贼好看,就是和面试官小哥谈论我的简历,坐在我对面,看着我写代码真的贼慌。。一开始本来想写快排,因为紧张,大脑短路,满脑子都在冒泡泡。。最后还是写了冒泡,,这里再回顾一下冒泡和快排吧,巩固一下,免得一紧张就慌的写不出来。(一)冒泡泡排序法总的思想就是从待排序表的底部,通过两两交换的将较小的元素交换...
面经(三)首次现场面试—U3D客户端开发工程师 自己人生的第一次的现场面试就来了个陡的,面试机会是因为在某app上点开了某公司的C++服务器端岗位,该app就自己给我发了一条,我对这个岗位很感兴趣,然后对方大佬就找我要了简历,我点击同意,大佬回复收到,我甚至都不敢去搭话,对这样的大厂也是心怀敬畏,结果第二天,有一个未接来电,现在我是不会放过任何未接来电的,回过去之后,那边就说看到了我的简历,大概问了下我的情况,问为什么没有找工作,我就说啊之前申...
C++学习笔记(三)字符串 一、C风格字符串1、字符串常量 “Hello World”:C++中所有字符串常量都由编译器自动在末尾添加一个null字符。2、末尾添加了'\0'的字符数组eg.char s1[] = "Hello";char s2[] = {'H','e','l','l','o'};char s3[] = {'H','e','l','l','o','\0'};s1编译器会自动添加一个空字符在末尾,所以是C风...
C++ 学习笔记(二) 多态的实现 前几天面试的时候被问到了多态的实现,平时确实没有用到过。今天特意去看了相关的知识,并实现了一下,来看一看输出结果,并分析一下导致这样的结果的原因。#include "stdafx.h"#include<iostream>using namespace std;class Father{public: virtual void TestV() { cout <&...
面经(二)第一次电话面试——3D编辑器开发工程师 年前的时候就看到该公司的招聘,很喜欢该公司的产品,于是就马上跟HR联系,发了简历,并且聊了几句。在聊的过程中,以及之后给面试通知,真的很nice。很喜欢这样的创业团队。面试官也很nice。这次面试,事先有准备一下,但还是有些东西忘记说。但整体来说比第一次的QQ面试要好太多。人总要进步。并且可能第一次确实是遇到了不太常见的难的面试。整个流程是先让我介绍一下我在学校做的项目,面试官真的有在仔细的听,并...
HTC Vive 开发笔记(七)启用和关闭VRTK_Pointer 指针 查看API文档,看到的是使用VRTK_Pointer下的Toggle()方法来进行指针的开关,实际代码中使用如下语句gameObject.GetComponent<VRTK_Pointer>().Toggle(true);并没有达到想要的效果,然后google之后看论坛找到了另一种方法。通过获取VRTK_Pointer的enable,来设置开启true和关闭false。需要同时设置VR...
面经(一)人生第一次面试—一首凉凉送给自己 因为错过秋招,现在才开始找工作,对自身的定位也不足,不知道到底可以做什么。瞎投了一通简历,下载了一堆求职app。某app上,某游戏公司hr小姐姐找上了我,问我要了简历,一开始我是想找C++开发岗的,后来据说有U3D的岗位就想去试试看。真正接触U3D的时间大概就两个月吧。聊的还不错,然后就安排了笔试。然后就开启了我的被虐旅程。整整三个小时的开卷笔试。全程靠百度,看Unity官方文档,还有师弟,同
HTC VIVE开发笔记(六)VRTK中实现基本抓取物体的配置 一、配置要交互的游戏物体Step1: 选中需要交互的物体,点击菜单栏Window->VRTK->Setup Interactable Object这里就可以选择配置相应的属性,包括Touch Options,Touch Highlight Color手柄触摸到物体时物体的高亮颜色Grab Options,Is Grabbable是否可以被抓取,Hold Button To Grab
HTC VIVE开发笔记(四)Interaction System插件手柄交互基础 (1)交互的基础——Interactable组件给一个物体,或者UI添加Interactbale组件后,标记这个物体是可以和手柄进行交互的。给Cube添加Interactable组件后,cube即被标记为可以进行交互。当手柄接触到可交互物体时,手柄会高亮,并震动一下。手柄高亮:这一部分是在Player组件下的StreamVRObjects-Hand-ControllerHove
HTC VIVE 开发笔记(三)利用SteamVR中的InteractionSystem实现场景中的瞬移及场景跳转 Interaction System from the Lab. 是SteamVR更新后版本中提供的一些VR中基本交互的SDK。其中就有为业界所采纳的VR场景中的移动方法,瞬移:Teleport.1)设置Teleport瞬移机制要让场景能够有瞬移的交互,非常简单,将SteamVR/InteractionSystem/Teleport/Teleporting组件拖进场景即可。接着就可
HTC VIVE开发笔记(一)使用SteamVR插件进行基本的交互 1、获取手柄的引用:目前没有区分左右手柄 private SteamVR_TrackedObject trackedobj; private SteamVR_Controller.Device device; trackedobj = GetComponent(); device = SteamVR_Controller.Input((int)trackedobj.index);
使用Unity3D进行HTC Vive开发过程中遇到问题记录 1.Assertion failed on expression: 'IsMatrixValid(matrix)' && Unity SteamVR: Failed to loadIVRRenderModels interface version IVRRenderModels_005。并且SteamVR插件中的demo不能渲染出手柄。解决方法:应该是版本不合适,重新下载steamVR 1
Leapmotion开发笔记2——System Architecture系统架构 系统架构Leapmotion软件在Windows系统下是作为服务器(Service)或者在Mac,Linux系统下作为daemon。该软件通过USB总线连接到Leap Motion控制器上。基于Leapmotion开发的应用程序通过连接Leap Motion服务器来接收运动捕捉数据。应用程序接口Leap Motion SDK提供两种API来获取Leap Motion的数据:一种是原
Leapmotion开发笔记1- API Overview 综述(翻译) 哈哈哈劳资触摸屏的做完了,终于可以做下一个内容。。仿佛又是挖了一个坑。自己挖的坑哭着也要填完,否则毕业堪忧啊。。看了下leapmotion官网提供两种API,一种是Orion,一种是V2。 看了一下介绍,查了些资料,Orion主要是为虚拟现实开发的,并且对手势的追踪更加的准确。也是比较新推出来。可以看看A站的一个视频,对比这两种软件的效果。硬件都是采用的一样的。http://www.acf
OSG学习笔记26——创建HUD,并调用事件修改显示内容 好久没有更新博客啦~最近有点停滞不前的感觉,今天终于实现了几个功能,可以更两篇博客啦~目标:想通过点击菜单来修改HUD的提示信息。其实很简单啊,但我就是自己想不出来。主要参考的是这篇博客里面的实现。http://blog.csdn.net/tmljs1988/article/details/7563016关于HUD还参考了这篇博客http://www.cnblogs.com/chaoswo
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
OSG学习笔记24——根据鼠标平移的位置正确设置物体平移量 一直以来都没有将这个平移量设置正确,也没有考虑清楚这个视景体的问题。今天终于弄明白啦。先看图,其实归根结底都是透视投影的原理。之前计算平移量的时候总是得不到正确的平移,也没有理解到为什么,经过实践检验真理,才真正理解到了原理。在屏幕上的鼠标移动只是计算了在屏幕上移动的像素,要想正确的映射到物体的移动量上,就需要将这个量投影到真正的操作平面,就是这里的D平面。讲一下实现流程,假设鼠标
OSG学习笔记23——设置隐藏和显示节点(使用setNodeMask()) 首先一开始设置场景中的某个节点为隐藏状态mtCenter->setNodeMask(0);一开始尝试在eventHandler里面使用节点名字来遍历这个节点,发现根本找不到,因为设置为隐藏节点,大概在遍历的过程中跳过了这个节点。(虽然这个节点明明还存在在内存中)If wrong, fix me please~之后就只有通过viewer获取场景数据,获取到根节点,并且指定子节点来设置该节
OSG学习笔记22——设置物体透明,再恢复 设置物体透明,trans是透明度的设置,这里如果没有setRenderingHint()虽然看起来是透明的,但模型还是会遮挡其他模型。然后就是BLEND要打开,光照和深度测试要关掉。模型的材质也要事先设置。并将材质保存起来以便恢复的时候调用。 osg::Material *material = new osg::Material; material->setDiffuse(osg::Mate
OSG学习笔记21——有关getProjectionMatrixAs...的trick 这是一个关于投影变换的问题,经过model-view变换后,场景中的物体放置了希望的位置上,就需要投影变换来将三维物体投影到二维屏幕上。投影变换的目的就是定义一个视景体,使视景体之外的部分被裁剪掉,最终进入图像的只是视景体内的有关部分。关于投影变换的其他内容就不介绍了。这里来讲讲为什么getProjectionMatrixAsPerspective(fovy,aspectRatio,z
OSG学习笔记20——光照和材质的设置(正确绘制出想要的颜色) 本来一开始学习OSG和Opengl的时候,因为用不太到关于颜色渲染之类的内容,关注的比较多的都是如何与场景进行交互。现在突然想给场景添加一个地面,发现不能得到正确的结果,并且加载进来的模型也会随着地面颜色的改变而呈现不同的颜色。
OSG学习笔记19——再看pick点选物体 之前一直使用的pick方法就是将第一个点选到的节点保存下来,如果场景中只有一个物体,当然是没有问题的。当场景中出现多个物体,并且每个物体设置了标签,是可以被修改还是不能被修改,当两个物体重合的时候就不能得到正确的结果。正确的做法是:用迭代器遍历所有获取到的节点并再遍历nodePath,找到需要的节点,并根据标签判断其是否可以被选中来执行操作。这里我对物体标签设置的方法应该是不够科学的,我用
OSG学习笔记18 - 关于物体绕指定点旋转的问题(非坐标轴原点) 两种解决方案:1、使用PAT节点,即PositionAttitudeTransform节点类中的,setPivotPoint(const Vec3d&)来设置旋转轴心或缩放轴心。这个是查到的方法,但实践没有成功,在调用这个setPivotPoint()方法时,模型总会发生位移,没有找出原因。这里贴出一下osg forum里的相关内容,希望能有所帮助。http://forum.opens
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()) {
Trackball rotate的OSG实现(一)(不是manipulator那种~是动物体那种!) 先写一下我的大致实现流程 鼠标单击模型,调用pick函数,来判断是否pick到了物体,并且获取模型的包围球中心和半径来作为我们这个virtual trackball的方程,哦,还要获取当前模型的位置。 然后将屏幕上的点映射到世界坐标下的球面上。Created with Raphaël 2.1.0开始获取屏幕上的点 (x,y)得出球面上映射出来的z坐标求出rotateParameter结束详细叙述
OpenGL Object Mouse Trackball 三维物体的trackball旋转实现原理 https://www.khronos.org/opengl/wiki/Object_Mouse_Trackball这是一篇翻译+碎碎念~~~翻译的不好,见谅引言trackball(又称 arcball)是为了复杂三维物体的旋转操作提供一个直观的用户界面(User Interface,UI 这里译成用户界面感觉怪怪的),使得旋转操作通过一个简单的虚拟的球体来实现。球体是虚拟轨迹球的很好的选择,因为球
OSG学习笔记17——正确设置物体的缩放矩阵 问题:做了一个触摸屏上的三维模型的缩放功能,发现在对模型进行缩放的时候模型的位置会有偏差。解决方法:问了王大大之后,再查了一下资料,记录于此。参考资料《在OSG中的实现三维物体的标准变换》 许昌学院学报 2008年 一篇久远的文章。在OSG中进行变换容易出现问题的原因1、基本变换是默认以世界坐标为变换中心的2、我们所期望的变换是以物体为变换中心因此,每次变换时,需要将变
函数指针和typedef 昨天在读一个SDK的sample,看到一句特别奇怪的用了typedef(C++ Primer P60)的语句。看了很久,查了资料才知道是做什么的。 typedef void (*PFuncOnTouchGesture)(const TouchGesture & tg,void * call_object);问了大神之后,给我发了wikipedia的链接,看了一下属于 Using typed
COVER王锐大大——最长的一帧(第四日) 当前位置:osgViewer/Viewer.cpp 第514行 osgViewer::Viewer::realize()setUpViewOnSingleScreen();setUpViewAcrossAllScreens()和之前的setUpViewInWindow是一样的流程。基本一致。都是通过apply()方法来执行了相应config的类型所对应的configure()方法。这里
Cover王锐大大——最长的一帧(第三日) 当前位置 osgViewer/View.cpp 第466行 osgViewer::View::setUpViewInWindow()void View::setUpViewInWindow(int x, int y, int width, int height, unsigned int screenNum){ apply(new osgViewer::SingleWindow
Leap Motion开发环境配置LeapmotionDevelopmentKit3.2.0+VS2013 1、在官网下载SDK https://developer-archive.leapmotion.com/downloads/external/v3-developer-beta/windows2、添加系统环境变量变量名:LEAP_SDK变量值:E:\leapmotion\LeapDeveloperKit_3.2.0+45899_win\LeapSDK 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
OSG学习笔记16 - 对点选物体平移(鼠标点选物体)(物体随鼠标移动)(屏幕坐标转世界坐标) 之前的一篇博文是有一篇对点选物体进行平移、缩放旋转。那一篇是很简单的调用了OSG中定义的一些dragger,但这些dragger都有坐标轴或者tapbox等在模型上,与我最近要做的事情的需求不同。网上也找了好久,最终还是自己一点一点,参考老师之前写的代码,然后在亲爱的童童师兄的帮助下,实现了这么一个小小的功能。虽然代码写的乱糟糟的。这里就简单记录一下整个思路吧。1、构造一个事件处理器,也就
OSG学习笔记15-OSG中对事件的处理 看了王锐大大的书,我感觉OSG中对事件的处理主要是由以下几块组成的:1、事件适配器 GUIEventAdapter这个类是作为系统交互事件和OSG交互事件的适配接口。这一句话还不是很理解。源码文档里对于这个类的定义是:事件类,存储键盘、鼠标和窗口事件。公有类型包括:(这些类型都是枚举类型,每个类型中有若干整形常量)MouseButtonMaskEventType :
C++零碎知识点记录 索引:1、Forward Declaration前置声明2、list容器3、关于*号和&号1、Forward Declaration前置声明今天看源码,看到了这个forward declaration 的注释,namespace TUIO { class OscReceiver; // Forward declaration就不太明白什么
OSG学习笔记14-快速构建视图的窗口设备(OSG程序在窗口中显示) 讲道理,像我这么蠢的人真的不多了。想同时运行一个模拟触摸板的模拟器程序,还有自己的OSG程序,脑子都纠结破了,又是想用Qt,又是想照着书上的代码,创建窗口,拿着书,跑去问实验室C++小王子,到底应该把绘制模型语句加上。小王子答:为什么要这么复杂,在窗口中显示OSG程序,不是一句话的事情吗。OMG!我表示不相信。后来一想,我为什么从来没有考虑过,OSG程序,是怎么将所绘制的图形显示出来的,还不是
TuioDemo程序二刷 终于明白,程序还是要调试才能看懂,加了几句输出语句,就能大概清楚什么时候调用什么函数。上一次看出来了,run()这个函数是每一帧都会刷新调用一下,并且再run()中的drawObjects(); processEvents();这两个函数也是一直在被调用。drawObject()函数,应该就是在simulator中获取了事件之后,这边demo的窗口上也绘制出来。所以可以从中找到读取TUIO
如何调用TUIO中的源码 写在前面:这是历史性的一个时刻,在陈大神的引领下,我终于自己搞定了一个小问题。今天都觉得要被C++搞出抑郁症了。所以嘛,我们要先定一个小目标!比方说先配好一个小项目。之前没有接触过什么开源库啊,API啊,在配了无数次OSG之后稍微有点心得,但一看,妈呀,这TUIO和OSG有点不一样啊,直接给的源码啊,好像不能像OSG那样cmake啊,然后编译啊,再把lib什么的放在一个路径里面。不过,源码也比
TUIO之TuioDemo 用VS生成的依赖项关系图,和想象的一样,libTUIO这个项目是TUIO提供的库一样的存在,剩下的三个项目TuioDemo、SimpleSimulator、TuioDump都调用到了libTUIO里的方法。TuioDemo的函数关系图:可以看到是由run()这个函数开始进行调用其他函数的,所以先看看run()这个函数吧。1、void run();
C++学习笔记1-namespace是什么东西? 写在前面:其实一开始不太懂什么是namespace,刚开始学习的时候,照着敲using namespace std;老师也没告诉是什么意思,自己也没有仔细看。到现在都还是很清楚。今天就查点资料,尽量弄清楚吧。namespace就是命名空间,为了防止程序员对不同的库使用了相同的名字,出现名字冲突,就有了namespace。命名空间可以帮助我们避免不经意的名字定义冲
Cover王锐大大——最长的一帧(第一日) 解读ListosgViewer::Viewer::viewerInit(调用了View::init函数)osgViewer::View::init(初始化视景器)osgGA::EventQueue::createEvent(在View::init调用,并创建了一个FRAME类型的事件)osgGA::MatrixManipulator::init(在View::init调用,将新创建的FRAME事件和Viewer对象本身为视景器实例进行相应的初始化,通过重写并使用此方法,就能灵活的初始化自定义漫游器的
OSG学习笔记12-期末大作业(包含交互、纹理、光照) 这是一个期末大作业,很low的大作业。按老师的要求要实现纹理,光照,交互等,还好可以用OSG,用OpenGL的话不知道要写多少代码。这个代码主要就是实现了球体的贴图,添加了一个光照,还有通过键盘来操控球体的功能。
OSG学习笔记11 物体控制—对点选物体进行平移、缩放、旋转 使用鼠标点选当前场景中的物体,然后旋转、平移、缩放。使用了两个自带的Dragger,TrackballDragger实现旋转,选中哪一个环就使物体沿哪个环渲染TabBoxDragger:盒式拖曳器,可在六个平面上实现缩放,平移物体操作类osgManipulator的工作方式:操作Dragger,改变Module
OSG学习笔记10-简单的操作器设置(漫游小区基础) 终于看到《OpenSceneGraph三维渲染引擎设计与实践》第八章啦,结合另一本书《OpenSceneGraph3.0三维视景仿真技术开发详解》上的例子,还有有的一个小区的.ive二进制模型。做了一个简单的漫游器。三维场景中的漫游器改变的是观察者(也就是相机)的位置和观察方向,以实时修正场景相机(Camera类)的观察矩阵的方式实现平滑的导航浏览。相机在世界中的位置姿态矩阵,等于相机观察
OSG学习笔记9-处理键盘事件 //处理键盘事件#include"stdafx.h"#include#include#include#includeclass KeyboardHandler :public osgGA::GUIEventHandler//人机交互事件处理器{public: //重构父类GUIEventHandler.handle,事件处理函数,自定义交互操作, //参数1:当前传入此处
OSG学习笔记8-多视景器系统 //多视景器系统,打开了3个窗口,每个窗口对应一个视图对象viewer,并使用多视景器系统来管理这3个视图。#include "stdafx.h"#include#include#includeint main(int argc, char**argv){ osg::ref_ptr view1 = new osgViewer::View; view1->setUpViewIn
OSG学习笔记7—投影墙显示 // OSG_5_6.cpp : 定义控制台应用程序的入口点。//投影墙显示:4个视景器辅助相机拼接在一起,同时显示一个场景的效果。#include "stdafx.h"#include#include#include/*用于创建一个与相机对应的图形设备,也是窗口设备,其属性参数使用特性类Traits定义,并返回这个相机对象。*/osg::Camera* creatCamera
关于OSG中各种变换的理解 最近学习OSG到第7章观察我们的世界,与之前学习的OpenGL有一些区别,当然学OpenGL时就一直不太懂各种坐标系以及变换。看了很久,现将内容整理如下。内容来自《OpenGL编程指南》+《OpenSceneGraph三维渲染引擎设计与实践》一、OpenGL中视图计算机图形学的要点就是创建三维物体的二维图像,因为要在屏幕上显示,所以必须是二维的。我理解就是要让屏幕里的东西看起来是三维的。
OSG学习笔记6—鸟瞰图相机 // osg4_25.cpp : 定义控制台应用程序的入口点。//鸟瞰图相机//新建一个相机对象,并且设置它的投影矩阵为正交投影,设置观察位置在整个模型数据的正上方(Z+方向),构成一种鸟瞰图的效果//产生目标场景视图的变化过程类似于用相机拍照://步骤如下://1.设置相机位置:视点变换//2.调整物体位置:模型变换(OSG中通过某一对象子节点树中多个Transform节
OSG学习笔记5—使用开关节点 // osg_4_23.cpp : 定义控制台应用程序的入口点。//使用开关节点//开关节点的用法,以及使用开关节点的更新回调完成了动态的子节点切换过程。 //一共切换两次,一次在120帧时,一次在240帧时//关于节点的实现:判断某个子节点对于的开关值,当开关值为false时,不执行其accept()函数,因此该子节点及其子树也不会被访问器遍历到。//否则执行正常的访问器推进
OSG学习笔记4—使用空间变换节点 世界坐标系是系统的绝对坐标系,在没有建立用户坐标系之前,所有的坐标都是以该坐标的原点来确定各自的位置的。OSG中的坐标系是X正向向右,Y轴正向向里,Z轴正向向上OpenGL的坐标系是X正向向右,Y轴正向向上,Z轴正向向外// osgStudy4_21(1).cpp : 定义控制台应用程序的入口点。//使用空间变换节点//1、根据用户视点自动进行变换的AutoTransf
OSG学习笔记3-使用回调实现旋转动画 这是有关节点的更新与事件回调,OSG中的节点主要是使用回调Callback来完成用户临时定义的,需要每帧执行的工作。回调时一种用户编写的功能模块,它可以作为一个参数传递给其他功能模块,从而实现一些底层系统事件的响应和处理。C++使用函数指针将回调函数的地址作为其他系统或用户函数的传入参数。OSG节点回调分类:1、更新回调 Update Callback:每一帧系统遍历到当前节点时都会被
OSG学习笔记2—节点属性访问器 看了好久,先捡了一些C++基础知识,还是看不懂代码,理解不了流程,算了,明天再来,回寝室洗洗睡了。// osgStudy4_20.cpp : 定义控制台应用程序的入口点。//节点属性访问器//——C++构造函数初始值列表————//InfoVisitor():osg::NodeVisitor(TRAVERSE_ALL_CHILDREN), _indent(0){}//构造函数初
OSG学习笔记1——智能指针 // osgStudy4_19.cpp : 定义控制台应用程序的入口点。//智能指针对场景的引用计数,看到这里的时候几乎就想放弃了,智能指针什么鬼,在大神的鼓励下,要搞科研的人怎么能不学会钻研呢!其实还是不是特别懂,但好像稍微理解一点点了,又参考了一下C++Primer。//——————C++的动态内存和智能指针————————————//动态分配的对象的生存期与它们在哪里创建时无关的
OSG学习笔记0——解决OSG读obj模型问题 最近刚刚开始学习osg,拿到的任务是读取一个obj模型,然后对该模型进行一些移动,旋转等操作。第一步就卡住了。不知道如何读取obj模型,百度不到,估计问题太幼稚了。同学说需要自己写一个OpenGL的程序,来读。后来问了我们老王boss,告诉我OSG有读obj的插件。看书上也有。就开始操作。遇到的第一个问题是路径设置不正确,自己太菜了,
3D Slicer+Qt-easy-build+VS2013 废话:科研菜鸟终于要走出敲代码这一步了,只是离心水的机器学习越来越远,不过走进可视化这个领域还是蛮令人激动的。需要用到3D Slicer这个开源库,需要自己写一个程序来读取医学数据模型等来做可视化。网上可供参考的资料太少,唯一的一个还是13年基于xp下的,但还是有一定的参考性,决定苦读官方资料,做一个靠自己的程序媛,并且拒绝了师兄的帮助。查询了官网针对开发者的资料。对一个大学四年都在计算机
机器学习笔记1—泰勒展开式和牛顿法 机器学习笔记1—泰勒展开式和牛顿法写在前面:自学机器学习的菜鸟一枚,希望通过记录博客的形式来记录自己一点点的进步~ 下面都是学习过程中自己的一些思考和学习,希望大神们批评指正。1.1 泰勒展开式1.1.1泰勒展开式入门首先,百度了一波,搜到了一个泰勒展开式入门的短短6分钟的视频,好像突然感受到了一点点数学的美。还有发现其实真的没有必要死记公式啊。泰勒展开式的入门浓浓的台湾腔调啊。泰勒公式的表达式: