ogre3d.cn 2.x bug多吗

fix&Ogre&1.7.2&text&overlay&not&showing&up&bug(Ogre文字不显示bug)
Ogre 1.7.2 text rendering有个bug,在 这个例子里,
如果不resize窗口大小,文字是不会显示的。
bug别人查下来是没有load font的关系。
================================================================
下面是一些帖子摘要:
& Fri Sep 10,
I've traced the bug:
previously in TextAreaOverlayElement:
void TextAreaOverlayElement::setFontName( const String& font )
mpFont = FontManager::getSingleton().getByName( font );
& & & if (mpFont.isNull())
& & & & & &
OGRE_EXCEPT( Exception::ERR_ITEM_NOT_FOUND, "Could not find font " + font,
& & & & & & & & "TextAreaOverlayElement::setFontName" );
mpFont-&load();
mpMaterial = mpFont-&getMaterial();
mpMaterial-&setDepthCheckEnabled(false);
mpMaterial-&setLightingEnabled(false);
mGeomPositionsOutOfDate = true;
mGeomUVsOutOfDate = true;
But now the font load code has been moved to getMaterial():
& &const MaterialPtr& TextAreaOverlayElement::getMaterial(void) const
& & & & // On-demand load
// Moved from setFontName to avoid issues with background parsing of scripts
&& & & & if (mpMaterial.isNull() && !mpFont.isNull())
&& & & & {
& & & & & &
& mpFont-&load();
& & & & & & // Ugly hack, but we need to override for lazy-load
& & & & & & *const_cast&MaterialPtr*&(&mpMaterial) = mpFont-&getMaterial();
& & & & & & mpMaterial-&setDepthCheckEnabled(false);
& & & & &&
&mpMaterial-&setLightingEnabled(false);
return mpM
This causes the font not to be rendered the first time its used.
Reverting back to the original code fixes the issue but I gather
that causes issues with parsing, I haven't worked out where is the
best place to insert this code yet, so I thought I'd throw it open
to one of the devs who have a better understanding how the system
=====================================================================
比较简单的解决办法是在创建overlay element之前先读取一下字体
这样就不用修改Ogre源代码了
void TextRenderer::addTextBox(const std::string&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
const std::string& text,
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
Ogre::Real x, Ogre::Real y,
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
Ogre::Real width, Ogre::Real height,
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
const Ogre::ColourValue& color)
// Solution:
&&& // Load font before creating
OverlayElement
Ogre::FontManager *pFontManager =
Ogre::FontManager::getSingletonPtr();
Ogre::ResourceManager::ResourceCreateOrRetrieveResult res =
pFontManager-&createOrRetrieve("arial",
Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME);
res.first-&load();
Ogre::OverlayElement* textBox =
_overlayMgr-&createOverlayElement("TextArea",
textBox-&setDimensions(width, height);
textBox-&setMetricsMode(Ogre::GMM_PIXELS);
textBox-&setPosition(x, y);
textBox-&setWidth(width);
textBox-&setHeight(height);
textBox-&setParameter("font_name", "arial");
textBox-&setParameter("char_height", "16");
textBox-&setColour(color);
textBox-&setCaption(text);
_panel-&addChild(textBox);
//=============================================
后记:这个方法其实隐含了这么一个条件:textBox会用font的material。
所以一但更改了font的material,所有的textBox的material都会相应改变。
比如把font的material改成了别的颜色,或者用了其他的shading,所有用这个font的textBox都变了。
如果想把textBox的字体和渲染方法分离,那就需要附给textBox新的material,并把其中的一层texture换成font的字体texture。
并且在font reload的时候再次设定textBox material的texture。
(font添加新code
point的时候会绘制新的字体texture,但textBox的material不知道这件事情,所以要重新设定)
(resource reload有callback可以设制,可以想想怎么弄,这里不展开了)
这样一来不同的textbox就可以用不同的效果渲染了,比如字体阴影之类的效果(用shader绘制2次,平移texture坐标)。
但是要实现更复杂的效果,比如字体泛光,构边之类的还是不是很方便。
需要重写或者改写overlay textBox,构造新的vertex buffer用于绘制,暂时还没深入研究。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。随笔分类 - ogre3d
摘要: 以上一节为基础,废话不多说。 首先新增一个节点,用于比较显示//新增一个节点 ent = mSceneMgr-&createEntity(&Quad&); ent-&setMaterialName(&MyMaterial9&); node = mSceneMgr-&getRootSceneNode()-&createChildSceneNode(&Node2&,Ogre::Vector3(15,0,0)); node-&attachObject(ent); 我们改变下纹理坐标显示的比例为 0.2 manu
slq0378 阅读(550) |
摘要: 这一节以基础16为基础,练习材质的使用。 第一,看看框架 1 //material 2 3 #include &ExampleApplication.h& 4 5 class TutorialApplication : public ExampleApplication 6 { 7 protected: 8 public: 9 TutorialApplication()10 {11 }12 13 ~TutorialApplication() 14 {15 }16 protected:17 void createScene(void)...
slq0378 阅读(407) |
摘要: 这个问题很奇怪啊,不明白什么原因? 打开VS2010,打开项目,运行,就提示”无法启动此程序,因为计算机中丢失OgreMain_d.dll。尝试重新安装该程序以解决此问题。“ 然后就去配置环境变量,包含库文件,再运行,还是不行。 然后去Google ,发现大神们厉害,找到问题所在了,是打开方式不对。可又不明白什么原因。 正确的打开方式是: 直接打开项目文件夹,双击*.sln文件就没有问题了。 向大牛们致敬。
slq0378 阅读(528) |
摘要: 建立自己的Ogre程序一直以来都是使用ExampleApplication.h来写程序,现在来看看它到底有什么神奇的地方。 首先,我们新建一个win32空项目 然后配置环境 最后新建define.cpp、define.h、main.cpp具体过程如下第一,在define.h中包含头文件,这里需要Orge.h文件,然后添加如下代码#include &Ogre.h&class MyApplication{public:MyApplication();~MyApplication();void go();protected:bool setup();//设置环境void setu
slq0378 阅读(618) |
摘要: 这一节练习一下手动创建实体,用到了对象(ManualObject) 第一,依然是模板#include &ExampleApplication.h&class Example1 : public ExampleApplication{public: void createScene() { }protected:private:};#include INT WINAPI WinMain( HINSTANCE hInst, HINSTANCE, LPSTR strCmdLine, INT ){ Example1 app.go(); ret...
slq0378 阅读(620) |
摘要: BSP(binary-space partitioning) Scene Manager(二叉空间分割)场景管理器比较适合用于室内场景。第一,添加框架代码如下 1 #include &ExampleApplication.h& 2 class Example1 : public ExampleApplication 3 { 4 public: 5 void createScene() 6 { 7 } 8 protected: 9 private:10 };11 12 #include 13 INT WINAPI WinMain( HINSTANCE hInst...
slq0378 阅读(570) |
摘要: 今天按照网上的教程配置CEGUI, 一直运行不了,不明白原因,而后又出现了错误LNK1104: 无法打开文件“OgreGUIRenderer_d.lib”,经过反复检查,排除包含目录问题。 不过可能是教程有点老,我在CEGUI的lib文件夹下发现根本没有这个文件,倒是有个类似的文件CEGUIOgreRenderer_d.lib。原来不同的版本,生成的文件也不同,真是害苦了我们初学者啊总结如下: 首先添加包含目录 .......\include\CEGUI 然后添加 .......\Samples\Common\CEGUIRenderer\include 最后添加.......\S...
slq0378 阅读(140) |
摘要: 前几天设置天空盒时一直出问题,现在问题终于解决了,问题来的莫名其妙,走的也莫名其妙。 第一,还是框架,我们依然使用ExampleApplication文件,框架如下 1 #include &ExampleApplication.h& 2 3 class TutorialApplication : public ExampleApplication 4 { 5 protected: 6 public: 7 TutorialApplication() 8 { 9 }10 11 ~TutorialApplication() 12 {13 }14 p...
slq0378 阅读(847) |
摘要: 以上一节为蓝本,这里增加一点难度,添加了四个节点,增加键盘控制移动速度,使用bool变量控制是否移动。 第一,要增加键盘控制,那就使用OIS::KeyListener,在监听器里添加一个父类KeyListener,添加成员变量并初始化 其中构造函数的ExampleFrameListener(win,cam,true,false);第三个参数改为true,表示使用带缓冲的键盘输入。 1 MoveDemoListener(RenderWindow *win,Camera *cam,SceneNode *sn,Entity *ent,std::deque &walk) 2 ...
slq0378 阅读(467) |
摘要: 学了那么长时间,才学会跑起来。My Ogre,动起来。 第一,还是要把框架搭起来,这里我们用到双端队列deque,前面已经简单介绍过,头文件如下:#include &ExampleApplication.h&#include &deque& 第二,是我们的监听器,继承至ExampleFrameListener,构造函数我们使用五个参数,分别为渲染窗口,摄像机,场景节点,实体,行走路线上的位置坐标。1 MoveDemoListener(RenderWindow *win,Camera *cam,SceneNode *
slq0378 阅读(625) |
摘要: 这一节,练习一下前几次学习的内容,功能很简单,就是建立两个不同的场景管理器,当按下键盘上某个键时切换镜头。 基本框架不变,这个监听器继承了两个父类,一个是我们的老朋友ExampleFrameListener,另一个我们也刚学过KeyListener。 好吧,开始。 首先我们声明一个宏,#define CAMERA_NAME &SceneCamera& ,这是我们要使用的摄像机常量,下面要多次使用。 然后我们定义两个全局函数,void setupViewport(RenderWindow *win, SceneManager *curr){ win-&removeAll
slq0378 阅读(414) |
摘要: 用文件来记录 Ogre 系统初始化、运行、结束以及调试信息。使用日志便于我们调试程序。Ogre 日志系统由两个类组成:Log 类与 LogManager。 1、Log类 Log 类的一个对象对应于一个日志文件,log类中含有成员函数logMessage()负责向文件中填入信息。1 void logMessage(const String& message, LogMessageLevel lml = LML_NORMAL); // 第一个参数就是要写入的信息,第二个参数代表这条信息的重要程度,分三种参数值重要程度LML_TIVIAL最低LML_NORMAL一般LML_CRITI...
slq0378 阅读(455) |
摘要: 带缓冲的鼠标、键盘操作,这里的鼠标、按键事件会被各自的监听器捕获。其中OIS中定义的两个类MouseListener,KeyListener负责对事件的处理。我们需要使用这两个类的接口。 当一个键被按下时,会触发一个 KeyListener::keyPressed 事件,而当这个键被释放(不再按下)时,KeyListener::keyReleased 事件被触发给所有已注册的KeyListener 类。 鼠标键被按下/释放的函数: MouseListener::mousePressed 和MouseListener::mouseReleased. 它还包含一个 mouseMoved ...
slq0378 阅读(566) |
摘要: 要实现键盘,鼠标对场景的控制,首先要帧监听,就是在每一帧的渲染前后对它进行操作。这里的操作没有用到缓冲区,只是简单的直接获取。 1、这些步骤和前面的一样,直接上代码,操作还是在createScene函数里。代码如下: 1 void createScene() 2 { 3 //载入实体 4 mSceneMgr-&setAmbientLight(ColourValue(0.25,0.25,0.25));//设置环境色 5 Entity *ent1 = mSceneMgr-&createEntity(&ninja&,&ninja.me...
slq0378 阅读(624) |
摘要: 这一章练习一下光源的使用,光源分为三种:点光源,聚光源,有向光。具体内容前面说过,这里就不解释了。 继续在上一章的程序的基础上实现。 1、创建摄像机(Camera) createCamera()函数是继承自ExampleApplication的虚函数,把它实现了。 1 class Example1:public ExampleApplication 2 { 3 public: 4 //..........其他代码 5 virtual void createCamera() 6 { 7 mCamera = mSceneMgr-&createCam...
slq0378 阅读(491) |
摘要: 资源管理 可管理的资源有: 材质资源:在.material文件中包含的材质脚本定义(技术、通路、纹理单元等数据的定义)。 模型资源:经过优化的二进制网格模型文件,扩展名为.mesh。包含几何信息和一些动画数据。 骨骼资源:经过优化的二进制骨骼文件,扩展名为.skeleton。包含骨骼动的数据以及相应帧动画的信息。 字体资源:字体的配置信息,扩展名为.fontdef的文件,其中包括TrueType字体的引用以及其他字体配置数据。 GPU程序资源:在.program中对GPU程序的声明信息,与材质脚本.material文件有类似的结构,但Ogre保证所有.program文件都会在处理材...
slq0378 阅读(560) |
摘要: 接着上篇写/songliquan/p/3294902.html 旋转这里有必要看一下关于旋转的源代码: virtual void pitch(const Radian& angle, TransformSpace relativeTo = TS_LOCAL); virtual void yaw(const Radian& angle, TransformSpace relativeTo = TS_LOCAL); virtual void roll(const Radian& angle, TransformSpace rela
slq0378 阅读(1443) |
摘要: SDK安装以及编译1、下载SDK,地址如下 http://www.ogre3d.org/download/sdk2、安装SDK,直接解压到相应目录,如D:/ogreSDK3、我用的是1.8版本,打开SDK安装目录,如图: D:\Program Files\OgreSDK_vc10_v1-8-1 用VS2010打开ogre.sln对其进行生成解决方案,过程有点慢,如果没有出问题,那就可以进行下一步了。 4、打开D:\Program Files\OgreSDK_vc10_v1-8-1\bin\debug下面的SampleBrowser_d.exe,就可以进入Sample 创建项目并...
slq0378 阅读(908) |
摘要: 物体着色的基础 --- 四种不同光照作用 1、环境反射 近似的模拟了场景中的全局辐射,也就是用来近似模拟所有光在场景中不断散射的结果。材质中有相应的属性来代表这种环境反射颜色。 2、漫反射 这种颜色是接收到直接从光源发射的光之后产生的,“漫反射”和现实中的意思一样,就是描述光被物体反射到多个方向的效果。 3、放射 指的是自发光物体所拥有的颜色。具体意思就是放射光只能照亮自己却不能对周围任何物体产生影响。这种光很奇怪的,现实中没有的。 4、镜面反射 描述了物体对被光照后的“高光”效果。这个也比较抽象。纹理贴图(Texture Mapping) 可以用程序把纹理通过一个独立的坐标...
slq0378 阅读(594) |
摘要: 场景管理器的使用 最常使用的坐标系统空间(同时也是Ogre程序所能提供的)即是世界空间(World)、父节点空间(Parent)以及本地空间(Local)。1、世界空间 就是物体所存在的地方,当我们把一个模型放进世界模型里面去,那么它就有了一个世界坐标,这个世界坐标是用来标记世界中不同的模型所处的位置的。在世界空间里,世界的中心就是远点(0,0,0)。而在ogre中,这个也相当于场景根节点的位置,所以世界空间在ogre中也可以理解为“相对于场景根节点”。世界空间也意味着用全局的X,Y,Z坐标。 父节点空间变换是相对于一个节点的父节点,也就是把父节点的坐标作为变换空间的矩阵原点。本地空间变...
slq0378 阅读(696) |
摘要: ogre的使用方法1---自动设置1、ogre初始化:首先实例化一个Root对象1 Root * root = new Root();2 Root * root = new Root(&plugins.cfg&); 3 Root * root = new Root(&plugins.cfg&, &ogre.cfg&);4 Root * root = new Root(&plugins.cfg&, &ogre.cfg&, &ogre.log&);//系统默认这样,当你没有填写参
slq0378 阅读(729) |
摘要: 五、阴影 阴影是渲染一个真实场景的重要组成部分,它可以给场景中的物体提供更加真实的感觉,同时还可以帮助用户更好的了解对象间的空间关系。 启用阴影: 缺省情况下,阴影是关闭的,开启方式如下: 1、建立场景时就设置阴影技术有效 --mSceneMgr-&setShadowTechnique(SHADOWTYPE_STENCIL_ADDITIVE); 2、创建一个或者多个光源 3、关闭那些不需要投射阴影的物体,可以用物体的aetCastShadows(false)来实现。 4、设置投影的最远距离,通过SceneManager::setShadowFarDistance来限制投影的最远距...
slq0378 阅读(204) |
摘要: 三、网格工具(Mesh) 1、导出器(Exporters)---用于从模型生成器中得到数据并且导入到OGRE中去。 导出器是指通过3D模型工具的插件写成网格数据和骨骼动画的文件格式可以在OGRE中被实时渲染(这句话读着太吃力了)。这些文件被导出器以.mesh和.skeleton形式生成。 2、XML转换器(XmlConverter)---用于从XML转换网格数据和骨骼数据 。 格式:OgreXMLConverter sourcefile [destfile] 3、网格数据更新器(MeshUpgrader)---用于从OGRE其中之一的版本更新二进制网格数据到其他的版本中。 格式:O...
slq0378 阅读(647) |
摘要: 9、粒子脚本 粒子脚本允许你实例化地在你的脚本代码中定义粒子系统,而不必在源代码中进行设置,使得你做任何修改都能得到快速回应。脚本里定义的粒子系统被用作模板,并且多个实际的系统可以在运行时从这里被创建。 粒子系统属性: quota ---设置这个系统在某一时刻所允许包含的最多粒子数。 格式: quota material ----设置这个系统中的全体粒子将要使用的材质的名字。 格式: material particle_width ---在世界坐标中,设置粒子的宽度。 格式: particle_width particle_height ---在世界坐标中...
slq0378 阅读(353) |
摘要: 三、顶点程序与片断程序 顶点或者片断程序定义可以被多个材质使用,唯一的前提条件是必须在引用它之前在材质的渲染通路部分中定义。 一个低级顶点程序示例如下:1 vertex_program myVertexProgram asm2 {3 source myVertexProgram.asm //资源4 syntax vs_1_1 //语法规则5 } 定义一个片断程序,与此相同,只是将vertex_program换成fragment_program。 默认的程序参数 ---定义默认参数可以避免重复绑定公用的参数vertex_program Og...
slq0378 阅读(274) |
摘要: 一、核心对象介绍1、命名空间 Ogre3d使用了C++的特性--命名空间,可以防止命名混淆。使用方法也简单,using namespace O或者直接在使用时加上“Ogre::”的前缀,如Ogre::Vector3等。2、Root对象 ---根对象 根(Root)对象是OGRE系统的入口,该对象在程序一开始时创建,最后结束时销毁。可用来配置系统,还可以获得系统中其他对象的指针,比如场景管理器(SceneManager),绘制系统(RenderSystem),资源管理器(Resource Managers)等。3、RenderSystem 对象----渲染系统对象 渲染系统对象实际...
slq0378 阅读(684) | 上传我的文档
 下载
 收藏
该文档贡献者很忙,什么也没留下。
 下载此文档
正在努力加载中...
【精品】基于多核平台优化的OGRE3D渲染引擎
下载积分:760
内容提示:【精品】基于多核平台优化的OGRE3D渲染引擎
文档格式:PDF|
浏览次数:1|
上传日期: 09:36:15|
文档星级:
该用户还上传了这些文档
【精品】基于多核平台优化的OGRE3D渲染引擎
官方公共微信随笔分类 - Ogre3D/Axiom3D
摘要: 在我前面三篇说明Ogre2.x的文章里,第一篇大致说了下Hlms,第二篇说了下和OpenGL结合比较紧的渲染,本文用来说下Hlms如何影响渲染流程中,因为有些概念已经在前面二文里说过了,本文就不再提,最后这篇也算是对Ogre2.1一个渲染流程的详细讲解。每桢场景流程 一 所有场景更新,场景更新...
天天不在 阅读(796) |
摘要: Ogre2.1大量光源渲染 Ogre2.1不是采用现在大部分引擎所用的延迟渲染,而是采用一种前向渲染的改进技术,理论基本来自于Forward+,见如下。 http://www.klayge.org/?p=1895 http://www.ogre3d.org//ogre-pr...
天天不在 阅读(1849) |
摘要: 在DX10与OpenGL3+之前,二者都是固定管线与可编程管线的混合,其中对应Ogre1.x的版本,也是结合固定与可编程管线设计.转眼到了OpenGL3+与DX10后,固定管线都被移除了,相对应着色器的功能进一步完善与扩充,对应Ogre2.x包装DX11与OpenGL3+,完全抛弃固定管线的内容,专
天天不在 阅读(2651) |
摘要: 不知当初是在那看到,说是Ogre2.0浪费了一个版本号,当时也没多想,以为没多大更新,一直到现在想做一个编辑器时,忽然想到要看下最新版本的更新,不看不知道,一看吓一跳,所以说,网络上的话少信,你不认识别人,别人张嘴就来,对别人也没损失,还可以装B下,靠. 从现在Ogre2.1的代码来看,大约总...
天天不在 阅读(2076) |
摘要: 最开始设计这个编辑器时,其中一个要求就是能在运行过程中,通过UI来更新各对象,这样我们就能明确每个Ogre对象更新其属性影响的渲染效果.比如点光源,方向光源,聚光灯各属性与效果,深度测试开启与关闭,深度比较方式影响的效果等等.如下先看效果图: 这个位置没有用上一篇天龙的场景,主要是图片大小限制...
天天不在 阅读(1130) |
摘要: 主界面如上文设计完成后,场景刚开始添加了是Ogre例子里的,发现场景里实物太少,于是想到直接把天龙的场景拿下来,天龙网上有源码,参考了下,把天龙的地形用Ogre的地形组件完成了下,如下是效果图: 因为主要是加载地形,然后只是简单加载了静态模型,因此场景看着比较简陋,再者因为上传的图片限制,...
天天不在 阅读(1107) |
摘要: 如下是初步效果图,后面会用在前面的Ogre编辑器中. 开始旋转控制写的比较简单,直接根据鼠标x,y调用yaw与pitch,虽然可用,但是不好用,有时要调到自己想要的方向搞一会,一点都不专业,记的以前好像看过那个软件使用的就是如上这种,分别给出三个方向的圆环,根据鼠标最开始点击的圆环,分别单独调...
天天不在 阅读(795) |
摘要: 在查看Ogre例子时,想看材质要里的纹理,着色器代码都需要每个去查找,非常麻烦.也想看更新每个Ogre里的对象后有什么效果.然后看到Compositor组件与粒子组件时,想到能实时编辑着色器代码实时更新渲染. 开始想着C++做界面麻烦,用C#的winForm做,后面发现首先结合层比较麻烦,然后...
天天不在 阅读(1546) |
摘要: Ogre中有许多监听类,我们可以简单理解成C#中的事件,这些类作用都不小,说大点可能改变流程,说小点修改参数等,下面列举一些常用的监听类. FrameListener:由Ogre中的Root负责维护,主要针对所有RenderTarget监听frameStarted:在一桢开始的时候,所有Rend...
天天不在 阅读(595) |
摘要: 我们为什么要用RTSS. Ogre如计算物体位置,纹理,光照都有固定API如(glMatrixFrustumEXT, glLoadmatrix, glTexture, glLight ),使用这些API渲染称之为固定渲染管线,而最新的如D3D11,OpenGL3.0+都在淘汰固定渲染管线功能了,对...
天天不在 阅读(718) |
摘要: 实现目标 因为需求,想找一个在Ogre中好用的文本显示,经过查找和一些比对.有三种方案 一利用Overlay的2D显示来达到效果.http://www.ogre3d.org/tikiwiki/tiki-index.php?page=MovableTextOverlay 二重写Renderabl...
天天不在 阅读(890) |
摘要: 和前面讲解的Compositor一样,GpuProgram也对应一种资源文件,意思我们可以直接写一个文件来完成,不需要了解相关的类. 但是就和winform一样,直接拖控件能完成大部分工作,假如如果需要我们自己手工来定制相应控件,相应的类与属性还是需要了解的,不然我们看下Ogre里讲解延迟渲染的...
天天不在 阅读(858) |
摘要: Compositor脚本与类型 我们先看下面一张基本的Compositor的脚本图: 上面就是一个Composition资源.在解析时,主要是使用CompositionPass, CompositionTargetPass, CompositionTechnique, Compositor,而在...
天天不在 阅读(1187) |
摘要: 我们首先需要下载.1.cmakehttp://www.cmake.org/download/(选择window安装包最方便)2.Ogre1.9源代码https://bitbucket.org/sinbad/ogre/src/b00fdf023b87ecb92...
天天不在 阅读(2399) |
摘要: 在第一篇网络分解成点,线,面.第二篇分别点以球形,线以圆柱,面分别以MergerBatch整合批次显示.因为整合批次显示后,相应的点,线,面不能以Ogre本身的射线来选取,因为整合后,以点举例,多个点显示虽然不在一起,但是是一个Mesh.Ogre本身的检测只能检测到这里,在我们这不满足要求,相应...
天天不在 阅读(1213) |
摘要: 在上文中,我们把Ogre里的网格分解成点线面后,我们要完成一个新的功能,在点上突出显示. 得到顶点位置后,这个功能也就是一个很简单的事,最开始是每个顶点添加一个子节点,节点上添加一个圆点.foreach (var vect in this.Points){ var cEntity = ...
天天不在 阅读(806) |
摘要: 这个需求可能比较古怪,一般Mesh我们组装好顶点,索引数据后,直接放入索引缓冲渲染就好了.但是如果有些特殊需要,如需要标注出Mesh的顶点,线,面这些信息,以及特殊显示这些信息。 最开始我想的是自己分析Mesh里的VertexData与IndexData,分析顶点时查找源码发现Ogre里本身有...
天天不在 阅读(502) |
摘要: 在开始正文前,先说下Axiom3D里遇到的二个BUG. 1.在启动axiom生成的程序中,我发现输出里总是有一些如&billboard_type&,&billboard_origin&这些不能解析,我开始还在想是不是文件格式版本过期或是啥的,反正后面我查了下,发现这些是有对应解析类的,在对比对...
天天不在 阅读(1013) |
摘要: 从网上找了些资源,大多搜Ogre,Mesh资源,然后为了方便查看各个Mesh,以及对应骨骼动画.为了实用性,考虑放在原游戏窗口里实现.最开始打算窗口新建viewport来实现,后发现这种方式的局限性,不新键窗口与场景管理,所有的viewport都是对应的同一场景,不同的viewport能改变的是...
天天不在 阅读(666) |
摘要: Axiom主要的代码大致翻看了下,就想到了自己来模拟一下游戏开发. 这章主要包括创建窗口及3D渲染的一些基本元素,并添加一个第三人称的骨骼动画作主角,加上前文中修改过后的地形组件,能用鼠标和键盘进行漫游.如下图所示. 在Axiom上给出的例子中,可以选择是用OpenGL或是DirectX...
天天不在 阅读(1319) |
摘要: 大致流程. 这里简单介绍下,Axiom中采用的Ogre的地形组件的一些概念与如何生成地形. 先说下大致流程,然后大家再往下看.(只说如何生成地形与LOD,除高度纹理图外别的纹理暂时不管.) 1.生成TerrainGroup,增加Request与Response处理,设置大小,高度图. 比...
天天不在 阅读(857) |
摘要: Archive:对应文件夹位置,包含文件夹,压缩文件,网络位置,包含Load,Unload,Open,Create,Remove,FineFile等主要虚方法,用于对应各具体Archive来实现. ResourceLocation:主要包含Archive,Watcher(文件位置变动),Rec...
天天不在 阅读(292) |
摘要: 在前面数据绑定基本流程,简单说了下,在Axiom中,数据从我们C#的托管环境到下面的OpenGL或是D3D的非托管环境,有个转化过程,相关实现我们可以从BufferBase看起.BufferBase与他的子类集合了相关数据块在托管环境与非托管环境的相关操作. 在BufferBase中,包装了一...
天天不在 阅读(846) |
摘要: 在Axiom中,Animation类用于管理动画,在此对象中主要管理着AnimationTrack对象,此对象用于管理动画的各种类型的每一桢.在Axiom中,动画类型主要有变形动画,姿态动画,骨骼动画以及他们之间的混合.而此对象的各子类如NodeAnimationTrack常用于骨骼动画.而Ve...
天天不在 阅读(1629) |
摘要: 在Axiom3D,或者说是Ogre的mesh的文件格式我们可能通过代码反推出相关格式,相关过程本来我是直接写的,后面发现相关流程写完后,我自己都看晕了,然后我就把一些过程用Execl整理出来,发现过程清晰多了,如下这张图: 这图是导入一个简单的mesh文件(没有包含动画)根据代码反推出的相关结...
天天不在 阅读(3144) |
摘要: 在前面我们学习OpenGL时,不管绘制如球,立方体,平面,地面,动画模型中最常用的几个操作有创建缓冲区,写入缓冲区.在Axiom中,相关的操作被整合与组织到VertexData,IndexData中,所以在后面,我们会看到Axiom里元素如果要绘画在屏幕上的元素,几乎都会包含这二个类的实体. ...
天天不在 阅读(1043) |
摘要: 经过前面针对OpenGL的一些特性的学习,越发觉得要学的更多,相关如LOD,各种阴影实现,场景管理如BSP与Octree等以及还没听过的各种的实现.有感自学的进度太慢,并且在做一些小DEMO时,心中不由的想到各种想要的大场景的实现.,故想到直接从3D引擎根据代码学习,然后就开始在各大网站上翻看各...
天天不在 阅读(2165) |

我要回帖

更多关于 os x 编译 ogre2.1 的文章

 

随机推荐