- 博客(19)
- 资源 (24)
- 收藏
- 关注
原创 Ogre粒子系统简介
1、简介 粒子系统被用来作为在3D程序中产生多种视觉特效的基础。粒子系统特效在游戏中运用广泛,比如射击类游戏中的爆炸特效,烟雾特效,开枪时喷出的火焰,撞击时击出的火花等等多半由粒子系统实现。 粒子系统的基本单元是粒子,每个粒子一般具有形状、大小、颜色、透明度、位置、速度、加速度、方向、生命周期等属性。每一帧,粒子系统一般都会执行如下步骤: (a)产生新的粒子,并赋予
2012-12-19 21:25:29 3069
原创 三维空间中的旋转变换
1、绕坐标轴旋转的公式: (1)绕Z轴旋转 (2)绕X轴旋转 (3)绕Y轴旋转 以上的矩阵变换公式为 : P' = P * mat; 2、绕任意轴旋转的公式: 给定具有单位长的,则物体绕OA轴旋转变换的矩阵表示可确定如下: 3、绕任意轴旋转在Ogre中实现Ogre::Matrix3 I
2012-12-17 13:48:18 23701 2
原创 AABB轴向包围盒
AABB,Axis-Aligned Bounding Box,即通过两个三维向量作为对角点产生的与空间轴平行的长方体空间。在Ogre中通过类AxisAlignedBox来实现,该类中两个成员变量Vector3 mMinimum和Vector3 mMaximum是两个三维向量,分别表示长方体空间的对角点。 主要成员函数如下:1、提取最小角点和最大角点const Vector3& g
2012-12-11 22:48:31 2863
原创 碰撞检测
AABB(轴对齐包围盒)这个东西是碰撞检测的基础,和它类似的还有OBB(有向包围盒),由于OBB创建复杂,所以Ogre采用了AABB。最简单的碰撞检测:通过Ogre::SceneNode::_getWorldAABB()可以取得这个叶子节点的AABB(Ogre::AxisAlignedBox),Ogre::AxisAlignedBox封装了对AABB的支持,该类的成员函数Ogre::A
2012-12-11 14:06:46 1013
原创 场景查询
场景管理的一个重要的功能就是场景查询,而ogre支持的场景查询方法包括:1、光线查询(Ray Queries);2、球体查询(Sphere Queries);3、边界盒查询(Bounding-Box Queries);4、边界平面查询(Bounding-Plane Queries);5、相交查询(Intersection Queries)。 光线查询: RaySc
2012-12-11 13:56:10 1051
原创 OpenGL多视口分割
OpenGL实现的多视口分割程序,同时也是OpenGL的一个简单的框架,可以根据自己的需要进行修改。 VS2008的环境配置,代码如下:// main.cpp#include #include "glFrame.h"int main(int argc, char** argv){ glutInit(&argc, argv); glutInitDisplayMo
2012-12-10 20:52:17 5324 2
原创 3D MAX 插件的基本知识和安装方法
MAX 插件的基本知识和安装方法首先,本文的内容不包括商业插件的破解或解密,只是就 MAX 插件的一般安装规律作一简单说明。同许多优秀的设计软件一样,MAX 在为用户提供了标准的用户开发接口,那些具有开发能力的用户和其他的软件开发商可以为 MAX 开发已扩展和增强功能为主要目的的组件,统称为外部插件。 3D MAX的插件非常丰富,几乎可以说到了庞大的地步。插件极大地丰富和强大了 3D MA
2012-12-18 13:06:18 9408
原创 IGES导入3DS MAX
3DS MAX有导入IGES或IGS格式文件的功能,但是最近遇到导入不成功,因此借用了AutoCAD2007来实现。具体过程如下: IGES ->AutoCAD2007 ->DWG2004 -> 3DS MAX2010。
2012-12-12 09:12:11 5152
原创 在场景中放置一个实体模型
一个3D模型是一个实体(Entity)并且它必须附属于一个场景结点(SceneNode)以被放置在场景中。场景结点能够由SceneManager中的rootScnenNode产生。创建一个实体和场景结点并把实体挂在场景结点上是这个样子:Entity* thisEntity = mSceneMgr->createEntity("nameInTheScene", "FileName.mesh");
2012-12-08 10:27:40 781
原创 从场景中移除一个实体
为了移除一个实体(Entity),你必须把实体从它的场景结点中分开,删除它如果需要的话还要销毁场景结点,这必须用SceneManager来完成。如果你有一个叫做myNode的SceneNode*,你可以用下面的代码完全地删除它的内容(MovableObjects和子场景结点)及结点本身:SceneNode* parent = entity->getParentSceneNode();parent
2012-12-08 10:26:14 1118
原创 操作场景节点
如果你有一个连接有多个可移动对象(MovableObject),像实体、灯光及相机的场景结点,你可以用多个函数移动它,查看这些的API。下面的函数分别是移动(move)、重置(reposition)、缩放(scale)及绕它的X-,Y-,Z-轴进行旋转:thisSceneNode->translate(10, 20, 30);thisSceneNode->setPosition(1.8, 20.
2012-12-08 10:25:07 549
原创 改变TextArea中的文本
你可以在运行时间改变GUI中Containers和Elements中所有的参数(parameter)。为此,首先你必须得到一个你想要的Element或Container的指针,如果是基于你想做的东西的需要就把它设计成那种类型。得到一个指向在.overlay脚本中定义为“myTextArea”的TextArea的指针并改变其caption类似这样:OverlayElement* thisText
2012-12-08 10:21:25 2160
原创 显示或隐藏Overlay
为了显示和隐藏一个Overlay,你首先必须用OverlayManager(这是一个singleton)得到一个指向它的指针。如果你定义了一个名字是“myOverlay”的.overlay脚本,你可以用下面的代码获取、显示并隐藏它:Overlay* thisOverlay = static_cast(OverlayManager::getSingleton().getByName("myOverl
2012-12-08 10:18:16 2975
原创 如何退出ogre程序
1、按ESCAPE键,直接停止程序;2、在FrameListener中frameStarted()或frameEnded()中返回false来退出程序;3、调用Root::getSingleton().queueEndRendering(),立刻结束程序。
2012-12-08 10:11:51 670
原创 如何向场景中添加布告板
布告板(Billboard)是一个总是面向相机的正方形,它被认为是一个精灵(sprite)。为产生一个布告板,你必须首先产生一个BillboardSet。然后billboard能被添加到上面一个给定的位置。BillboardSet是一个MovableObject,因此应该添加到SceneNode上。整个程序如下:SceneNode* myNode = static_cast(mSceneMgr
2012-12-08 10:06:03 1046
原创 Ogre材质脚本中定义参数变量
1、顶点着色程序中传递参数:GpuProgramParametersSharedPtr params = entity->getSubEntity(0)->getMaterial()->getTechnique(0)->getPass(0)->getVertexProgram().createParameters();params->setNamedConstant(“ambient”,
2012-12-05 19:33:54 1432
原创 单例模式——返回引用
reference-returning函数如下:class A{......};A& RefA(){ static A a; return a;} reference-returning函数是单例模式的一种常见实现手法。
2012-12-04 12:57:24 1891
Huffman编码
2012-04-25
C&C++优秀书籍
2012-03-18
精通Qt4编程
2012-03-18
ACIS系统简介
2011-10-08
查找算法的多种方法的源文件集合
2009-06-28
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人