#include <osgViewer/Viewer>
#include <osg/Node>
#include <osg/Geometry>
#include <osg/Geode>
#include <osg/Group>
#include <osg/AutoTransform>
#include <osg/ProxyNode>
#include <osgDB/ReadFile>
#include <osgDB/WriteFile>
#include <osgText/Text>
#include <osgUtil/Optimizer>
#include<osg/Camera>
#include<osgViewer/Viewer>
#include <osgManipulator/Dragger>
#include <osgManipulator/Selection>
#include <osgManipulator/Constraint>
#include <osgManipulator/TranslateAxisDragger>
#include <osgManipulator/CommandManager>
#include<osgFX/Scribe>
#include<osg/MatrixTransform>
#include<osgAnimation/Animation>
#include<osgAnimation/Bone>
#include<osgAnimation/Skeleton>
#include<osgAnimation/UpdateMatrixTransform>
#include<osgAnimation/BasicAnimationManager>
#include<osgAnimation/MorphGeometry>
#include<osgUtil/SmoothingVisitor>
#include <iostream>
#include <thread>
#include <future>
#include <string>
#include<map>
#include<vector>
#include<list>
using std::vector;
using std::string;
using std::list;
using namespace std;
osg::Geometry* createSourceGeometry()
{
osg::ref_ptr<osg::Vec3Array> vertices = new osg::Vec3Array;
vertices->push_back(osg::Vec3(0.0, 5.0, -2.5));
vertices->push_back(osg::Vec3(0.0, 0.0, -2.5));
vertices->push_back(osg::Vec3(2.5, 5.0, 0.0));
vertices->push_back(osg::Vec3(2.5, 0.0, 0.0));
vertices->push_back(osg::Vec3(5.0, 5.0, -2.5));
vertices->push_back(osg::Vec3(5.0, 0.0, -2.5));
osg::ref_ptr<osg::Geometry> geom = new osg::Geometry;
geom->setVertexArray(vertices.get());
geom->addPrimitiveSet(new osg::DrawArrays(GL_QUAD_STRIP, 0, 6));
osgUtil::SmoothingVisitor smv;
smv.smooth(*geom);
return geom.release();
}
osg::Geometry* createTargetGeometry()
{
osg::ref_ptr<osg::Vec3Array> vertices = new osg::Vec3Array;
vertices->push_back(osg::Vec3(0.0, 5.0, 1.0));
vertices->push_back(osg::Vec3(0.0, 0.0, 1.0));
vertices->push_back(osg::Vec3(2.5, 5.0, -1.0));
vertices->push_back(osg::Vec3(2.5, 0.0, -1.0));
vertices->push_back(osg::Vec3(5.0, 5.0, 1.0));
vertices->push_back(osg::Vec3(5.0, 0.0, 1.0));
osg::ref_ptr<osg::Geometry> geom = new osg::Geometry;
geom->setVertexArray(vertices.get());
geom->addPrimitiveSet(new osg::DrawArrays(GL_QUAD_STRIP, 0, 6));
osgUtil::SmoothingVisitor smv;
smv.smooth(*geom);
return geom.release();
}
void createMorphKeyframes(osgAnimation::FloatKeyframeContainer* ks)
{
ks->push_back(osgAnimation::FloatKeyframe(0.0, 0.0));
ks->push_back(osgAnimation::FloatKeyframe(2.0, 1.0));
}
int main()
{
osg::ref_ptr<osgAnimation::FloatLinearChannel> channel = new osgAnimation::FloatLinearChannel;
channel->setName("0");
channel->setTargetName("MorphCallback");
createMorphKeyframes(channel->getOrCreateSampler()->getOrCreateKeyframeContainer());
osg::ref_ptr<osgAnimation::Animation> anim = new osgAnimation::Animation;
anim->setPlaymode(osgAnimation::Animation::PPONG)
anim->addChannel(channel.get());
osg::ref_ptr<osgAnimation::BasicAnimationManager> manager = new osgAnimation::BasicAnimationManager;
manager->registerAnimation(anim.get());
osg::ref_ptr<osgAnimation::MorphGeometry> morph = new osgAnimation::MorphGeometry(*createSourceGeometry());
morph->addMorphTarget(createTargetGeometry());
osg::ref_ptr<osg::Geode> geode = new osg::Geode;
geode->addDrawable(morph.get());
geode->setUpdateCallback(new osgAnimation::UpdateMorph("MorphCallback"));
osg::ref_ptr<osg::Group> root = new osg::Group;
root->addChild(geode.get());
root->setUpdateCallback(manager.get());
manager->playAnimation(anim.get());
osgViewer::Viewer viewer;
viewer.setSceneData(root.get());
return viewer.run();
}
相关推荐
OSG三维渲染引擎编程学习之二:“第一章:OSG介绍” 之 “1.2 OSG诞生”
第一章:OSG介绍;1.2 OSG诞生
osg示例解析之osganimationmorph(1)
简介 本课主要演示了osgAnimation中的变形动画,变形动画通常也称为逐顶点动画(Per-vertex Animation),是一种三维动画的表现形式。它对计算机的运算资源的消耗很大,通常以每帧计算和应用4000~9000个顶点的位置变化为宜,否则系统难以承受其他场景对象的更新和渲染工作。变形动画在osgAnimation中通过MorphGeometry以及UpdateMorph来实现
osg、osgearth简介及学习环境准备(一)
OSG是Open Scene Graphic 的缩写,OSG于1997年诞生于以为滑翔机爱好者之手,Don burns 为了对滑翔机的飞行进行模拟,对openGL的库进行了封装,osg的雏形就这样诞生了,1998年Don burns 遇到了同样喜欢滑翔机和计算机图形学的Robert Osfield ,从此Robert Osfield加入了osg小组的开发并一直担任开发小组的组长。OSG广泛应用于飞行仿真等领域,包括Flightgear,及美国军方投资的仿真项目Delta3d等。三维场景图渲染与调度引擎。
osganimationmorph例子
该例子演示了渐变动画。 应用osgAnimation::Animation库 这个库是专门的动画库,里面有几个关键的概念: KeyFrame关键帧,记录一个运动中指定时间的几个关键的值,根据这几个值其他的时间就可以进行插值运算。 由于关键帧值的类型不确定,可以是值、点、旋转等等等等,因此class TemplateKeyframe : public Keyframe实现一个模板类,用于不同
OSG三维渲染引擎编程学习之七十四:“第七章:OSG场景图形交互” 之 “7.5 单视图多相机”
OSG三维渲染引擎编程学习;第七章:OSG场景图形交互;7.5 单视图多相机
OSG三维渲染引擎编程学习之四十六:“第五章:OSG场景渲染” 之 “5.4 纹理映射概述”
OSG三维渲染引擎编程学习;第五章:OSG场景渲染;5.4 纹理映射概述
osg例子汇总--效果展示
osg例子
Morph和关节动画概述,骨骼蒙皮动画详解+代码
讲述骨骼动画的资料很多,但大部分都是针对DX8或DX9的SkinnedMesh进行讲解。我觉得对于骨骼动画初学者增加了不必要的负担,还没有理解骨骼动画的实质就已被DX复杂的架构搞得晕头转向了。这篇文章把注意力集中在骨骼动画的基本组成结构和原理上,并实现了一个最简单纯手工的自定义骨骼动画例子帮助理解(使用最简单的OpenGL指令,甚至没有使用矩阵)。这篇文章在我学习理解骨骼动画的过程中逐步完善,是对这个技术的理解总结,属于学习笔记。
osg解析系列-[osg::osgAnimation]-路径运动动画/变形动画/骨骼动画/纹理动画 4
【代码】M23.11.W4[osg::osgAnimation]-路径运动动画/变形动画/骨骼动画/纹理动画 4。
OSG 游戏_人物动画制作(一)
本人主要从事图形图象工作,空闲之余接触了一些游戏编程,特写一些编程心得,本文 适合没有接触过人物动画编程的初学者,希望游戏制作的大虾们指点,交流。 在以前还有没接触人物动画编程的时候,觉得通过编程让人物动起来一定是一件很麻烦 的事情,尤其是初学者,大都会摸不着头脑,碰到诸如骨骼动画之类,似乎无从下手。但是 当你了解了它们的格式,就会发现其实真正的人物动画的制作并不是在编程阶段,而是在模 型构建阶段,程序员主要做工作的是掌握模型文件的格式,将存储在人物模型中的各种信息, 如顶点,面片,材质,骨骼或顶点运动的关键帧序列等信息读入内存然后用你熟悉的 SDK 绘制出来,再根据时间采用线性或者球形插值对动作序列的关键帧进行插值,不断变换顶点 坐标,从而得到了一系列连续的人物动画,听起来确实不难吧!当然你也可以在程序里自己 控制人物每一帧每一个关节的运动,我想做游戏的很少有人这么做吧。下面我向大家介绍一 下自己是如何编写人物动画程序的。本人从事的图形图象开发主要是基于 OpenGL 和 OSG 因此范例程序将采用 OpenGL 或 OSG。先声明一下,本人的语言表达能力很差,请大家多 多谅解指正。 考虑到没有接触过人物模型的朋友,我首先从人物模型的结构讲起,游戏人物编程主要 采用的人物模型格式有 Quake 里的md2,md3,Half Life 里的 mdl,Doom里的 md5,还有 典型的骨骼动画模型 ms3d…,至于3dmax 的模型,本人觉得太麻烦!在此我说两个有代表 性的 Md3,和 ms3d,其它的模型都大同小异,只要你了解了它们的格式,程序实现都不难。
Palantir 产品架构深度解析:从本体到AI的决策智能平台
本文深度解析了Palantir决策智能平台的核心产品架构。其核心在于构建企业级的“本体”(Ontology),即业务世界的“数字孪生”,通过数据、逻辑、操作三层抽象统一语义。平台以此为基础,通过Foundry构建数字孪生,并通过AIP(人工智能平台)实现本体增强生成(OAG),将AI深度融入业务,形成从数据感知、智能分析到行动执行的完整决策闭环。
OSG 渲染引擎特性与架构
OSG 作为老牌的开源渲染引擎之一,有一定的用户群体,不少个人、企业、科研机构都在使用OSG进行开发。随着不少商业渲染引擎的开源与准门槛的降低(比如Unity3D 授权费用比较低,中小企业甚至个人都能负担的起授权费用,UE开源且准门槛也比降低了不少),OSG, OGRE这样的开源渲染引擎正在逐步走向没落。虽然OSG同样走向没落,但对于自研引擎或基于OSG的二次开发的商业应用,OSG还有很大的参考...
Hi3559AV100制作ext4文件系统和烧录emmc
1、首先生成所需文件系统,见本博客<Hi3559AV100文件系统制作cramfs>。 2、使用工具生成EXT4文件系统 ./make_ext4fs -s -l 96M rootfs_hi3559av100.ext4 ./rootfs 3、烧录文件系统 mw.b 0x82000000 ff 0x12C00000;tftp 0x82000000 STM_...
开源的地球引擎
osgearth的源代码是使用C++编写的,因此它可以在各种操作系统上运行,包括Windows、Linux和Mac OS X。osgearth还提供了多种语言的接口,如C++、Java、Python等,使得开发者可以使用自己熟悉的编程语言来开发地球引擎应用。osgearth基于OSG开发,因此它具有强大的3D渲染能力和高度灵活性,可以用于开发各种地球可视化应用,如虚拟地球、遥感应用、地质勘探等。总之,osgearth是一款功能强大、易于使用和扩展的地球引擎,适用于各种地球可视化应用开发。
利用ADS设计射频功率放大器
利用ADS设计射频功率放大器 任务: 用飞思卡尔公司的功率放大器芯片ATF27s006NT1设计射频功放,芯片频率范围可达450MHz-3.6GHz。 功放指标: (1) 工作频率:500MHz (2) 增益:G>20dB (3) 电源:+28V (4) 最大输出功率:2W(33dBm) 设计思路 (1)安装DesignKit模型; (2)直流DC扫描; (3)稳定性分析; (4)偏置电路设计及整...
python:numpy分享(保姆级教程)
创建数组:array和ndarray、rand()、randn()、arange()、randint()、uniform()astype()基础函数:ceil()、floor()、rint()、argmax()、argmin()、cumsum()、cumprod()numpy 是数据分析必不可少的第三方库,具有高性能的特点,多用于做数组分析。内置函数:ceil()、floor()、rint()主要用于数组计算,支持多维数组。array和ndarray。比较函数:all、any。去重函数:unique。
OSG三维渲染引擎之OSG简介
本篇内容主要介绍了场景图形的概念,主流三维渲染引擎,OSG的优缺点及其组成结构
OpenEuler内核编译及替换
一、内核源码下载 在gitee上下载OpenEuler内核源码 下载地址 选择需要的内核版本源码压缩包进行下载 二、内核编译 1.解压缩 将下载好的源码进行解压 tar xvf openeuler-kernel-4.19.90-2107.1.0.tar.gz 2.清理源代码树 解压后得到一个名为kernel的内核源码文件夹,进入后执行命令 make mrproper 清理过去内核编译产生的config,第一次编译时可不执行此命令 3.生成内核配置文件.config 先将将系统原配置文件拷贝过来,原
OSG引擎一般是指什么?
在国内,特别是政府单位,领导业务审批是非常霸道的,比如任意推进流程,任意驳回至任意节点,甚至是驳回至并行网关分支,这时,很多市面的流程引擎就束手无措了,因为,回退到并行网关分支后,后续审批将无法走出该并行网关分支。为了满足中国精细化的审批需求,基于Camunda开源项目最新版本,做了扩展功能,“桂花流程引擎”应运而生,桂花流程引擎功能包含Camunda原有功能外,同时扩展流程任意推进、任意回退、流程预警、流程超时自动提交、加签、减签、评审、审计、工作交接、审批数据按模板填充转PDF文件等功能。
Android Shadow插件化框架分析与集成(一)
到此为止,本篇文章先介绍到这里,本篇文章主要介绍了:从源码的角度去集成shadow框架,从下载源码开始,到集成到自己的项目中,其中插件项目我是新建的demo应用,宿主应用是之前搭的一个MVP框架。文章中一步一步详细的介绍了宿主该如何集成,并提供了源码;介绍了插件该如何集成,同时也提供了源码。文章中还介绍了gradle的版本与AGP版本使用不当造成的问题,以及shadow源码的gradle版本与APG版本的配置,及和宿主插件应用gradle版本与AGP版本的关系。
出现 Connection Failed [MySQL][ODBC Driver]Access denied for user ‘root‘@x(using password:YES)解决方法
Connection Failed [MySQL][ODBC 8.0(w) Driver]Access denied for user 'root'@xxxx (using password:YES)
OSG架构初识
本文参考<<osg最长一帧>>, <<OpenSceneGraph三维渲染引擎编程指南>>, <<OpenSceneGraph三维渲染引擎设计与实践>> 整理而来, 感谢大牛们的精彩著作. 相比Ogre来说, Ogre代码很规范, 只是入门资料较少,如果能在学习之前能总体上对架构有个印象就好了, 免得盲人摸象啊, 不过,还好有OSG. 场景相关: Node, Geode, Group, Transform, LOD,...
滴滴数据分析80道面试题及参考答案
常见的模型评价指标有准确率、召回率、F1 值、均方误差、均方根误差、R 方等。准确率是指模型预测正确的样本数占总样本数的比例,它反映了模型预测的准确性。召回率是指模型预测为正例的样本中实际为正例的比例,它衡量了模型对正例的捕捉能力。F1 值是准确率和召回率的调和平均数,综合考虑了两者的平衡。均方误差是预测值与真实值之差的平方的平均值,它衡量了模型预测值与真实值的平均偏离程度。均方根误差是均方误差的平方根,与均方误差类似,但更直观地反映了误差的大小。
【OSG系列】精通OSG的三维渲染
OSG作为一个功能强大的三维渲染引擎,其丰富的工具集和高效的数据结构,使开发者可以便捷地加载、组织、处理三维图形数据,并通过与OpenGL的结合,实现高质量、逼真的三维场景渲染效果。OSG为三维应用提供了坚实的基石。
Probability and Statistics - 4th edition
Probability and Statistics - 4th edition
VB摄像头监控
该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制
9.3.2 osg骨骼动画osgAnimation::Bone类
#include <osgViewer/Viewer> #include <osg/Node> #include <osg/Geometry> #include <osg/Geode> #include <osg/Group> #include <osg/AutoTransform> #include <osg/ProxyNode> #include <osgDB/ReadFile> #include <.
jdk-8u144-linux-x64.tar.gz.
该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包
1080



被折叠的 条评论
为什么被折叠?



