2012-2-6:

今天把面分割和折叠写了。

数据结构见:http://www.everet.org/2012/02/clover-data-structure.html

2012-2-1:

刚刚把我测试的分支里的main.py拆分开来了。

2012-1-31:

发现动手写代码还是需要看很多遍Tutorial,记下地址:http://wiki.python-ogre.org/index.php/Basic_Tutorial_1

屠文翔同学的日志:http://www.cnblogs.com/kidshusang/archive/2012/01/31/2333970.html 转载过来存档。

果然验证了简单的问题不简单,想要弄个导航立方体,遇到了各种各样的难题

首先是Ogre貌似并不能直接导入3ds模型,Ogre仅支持自己的.mesh格式的模型

所以我要通过一个叫做3ds2mesh的工具把我的立方体3ds转换成mesh

第二个难题是为立方体贴图

因为6个面标识着六个方向,所以要为六个不同的面贴不同的图

这就意味着我第一步的工作白费了!无法为一个现成的,空白的六面体贴图

这就意味着,要不我就用3dsMax把贴好图的立方体导出来,要不我就用代码生成一个立方体,并同时为每一个面定义贴图

我选择后者。(参考资料的传送门:http://0flyingpig0.blog.163.com/blog/static/9937055620101209433665/

第三个难题是,Ogre管理Material(材质)的方法和Irrlicht真的是完全不一样

在Ogre里面,如果想要控制光照,反面裁剪,纹理贴图,就要自己新建一个Material,并给Entity赋予这个Material

而Irrlicht里面只用设个标志位就好了

我不能说哪种方法更好,不过看起来Irrlicht的方法更简单,而Ogre的方法更专业

另外,材质也是可以使用脚本的,脚本后缀名为.material

(脚本使用方法传送门:http://www.ogre3d.org/docs/manual/manual_14.html#SEC23

(脚本教程传送门:http://www.ogre3d.org/tikiwiki/MadMarx+Tutorial+7&structure=Tutorials

第四个难题揭示了我是多么的天真。

现在我已经弄好了六面体,并且把它摆在场景中央

一切看起来正常,六面体的正面正对着我。

貌似此时需要做的只是写玩导航逻辑就大功告成,也就是说我拖动六面体,场景镜头就会转动

可是我觉得把一个导航块放在场景中间有些不合适,所以我决定把它放在旁边

尼玛啊……

它在逻辑上是朝向这正面,但是由于视角问题,变得好像不是朝向正面

解决方法我先在想到的有两种

第一种是让它倾斜一个角度朝向我,并把这个方向当做是初始方向,以后的旋转镜头都加上这个偏移量

第二种是将这个六面体渲染成一张texture(RTT)并贴出来

我先试试看第一种方法……

另外,Ogre管理资源的方法真的是非常的诡异,有空我要好好看看这篇东西http://www.ogre3d.org/tikiwiki/Resources+and+ResourceManagers&structure=Tutorials

屠文翔同学的日志:http://www.cnblogs.com/kidshusang/archive/2012/01/31/2332526.html 转载过来存档。

啊,这一晃眼十多天就过去了

今天天气转暖了,是个开始工作的好日子

前两天亮哥提议我们使用Python加速开发,也就是使用PythonOgre,是个不错的建议

于是前两天装了PythonOgre,看了看教程和例子,发现PythonOgre里面已经集成了CEGUI,好吧真方便

(顺便吐槽一下,这几天习惯了使用VIM,突然有点不习惯普通的文本编辑方式)

今天开了小组会议,会议中我们把Clover逻辑层面的数据结构给讨论了一下

会议记录传送门:http://www.everet.org/2012/01/clover-architecture-design-meeting.html

(密码什么的我会随便乱说么)

回顾一下今天我做的事

因为vim,python和pythonOgre我一个都不熟,所以花费在熟悉他们上面的时间比干正事的时间多得多

不过总算我理清了python是如何处理类,模块和集成的了

之前帮骨架系统装上界面后,CEGUI把所有键盘和鼠标消息都截断了

于是亮哥抱怨无法“围观”他的作品,只好自己开个无界面版的分支

我自己也开了个分支,尝试解决这个问题

不过在经过研究Ogre.Renderer.Ogre.sf_ois模块中的代码和一些尝试以后,我发现这个问题还真不太好解决(也可能是我没太明白它的消息处理机制),而且也没什么必要去解决(因为我们的软件必然不是用WASD来移动照相机……)

我决定明天开始研究如何完全使用鼠标来移动视角

计划下明天要做的事

首先,纯用鼠标移动视角是件很简单的事情

可是按照一般事情的尿性来看,简单的事情都没有想象中那么简单

一个矛盾点就是,如果通过在屏幕上拖动鼠标来移动视角,那么界面就废了……

所以我的想法是参考3dsMax的做法,在屏幕上放一个指示方向的六面体骰子,通过拖动这个骰子来改变视角

这个骰子不可能是CEGUI,只能是3D场景中的一部分

所以我的工作可以归纳为一下几个:

1.找一个六面体模型,并弄好标有上下左右前后的纹理,导入PythonOgre

2.研究下鼠标如何和这个六面体交互,需要用到拾取吗?

3.研究下鼠标的事件机制

4.研究下摄像机,因为摄像机有两种移动方式,一种是自己动,一种是跟着节点动

亮哥工作日志的传送门:http://www.everet.org/2012/01/clover-progress.html

2012-1-30:

架构设计会议记录:http://www.everet.org/2012/01/clover-architecture-design-meeting.html

选用Triangle List来画三角形,虽然比strip更耗空间,不过方便建模。一个三角形就是三个点,初步是按顺时针和逆时针把两个面画了。日后再改了,反面裁剪的开关我也没去找在哪里。

TODO:

  1. 点的拾取和边的拾取。可能要自己写算法拾取,也可能有现成的解决方案。关键得有人去解决这个问题。
  2. 动态添加点。这个怎么弄?首先得定位在哪里添加,是打散三角形还是怎样。还是说本来就很多点,这样方便使用物理引擎模拟纸张的弯曲。
  3. 光照材质这些外观的东西先忽略…

2012-1-29:

师兄把Python-Ogre装了。

2012-1-28:

屠文翔把界面框架写了。

自定义几何体 http://www.ogre3d.org/tikiwiki/ManualObject

2012-1-27:

开工,预期使用Python编码,Git管理。

进度记录:http://www.everet.org/2012/01/clover-progress.html

网页浏览版本库: http://git.everet.org/

屠文翔的通知:

各位新年好啊
春节期间走亲访友外加同学聚会唱k陪女朋友很辛苦吧?
现在有个好消息,你们解脱了,因为要开始工作了!
首先回顾一下我们要做什么
在2月29日之前提交文档(见附件)
然后回顾一下之前我们做了些什么
定下来了大方向和技术框架
图像引擎使用OGRE
界面UI使用CEGUI
物理引擎使用Newton
骨架系统的一些需求见需求文档(附件2)
另外还有就是,华亮和我都已经弄好了OGRE环境,华亮还弄好了PythonOgre的环境,我这边还弄好了CEGUI的环境

接下来一周内要做的工作
首先徐小孟同学要开始配置和熟悉OGRE环境,以及
这里是OgreSDK的下载地址,下载1.7.4  http://www.ogre3d.org/download/sdk
这里是Ogre基础教程 http://www.ogre3d.org/tikiwiki/Tutorials
华亮强烈建议我们使用PythonOgre进行开发,PythonOgre是使用Python语言重新封装的Ogre的一个库,使用PythonOgre最大的好处就是不需要编译
这里是PythonOgre安装及使用的一些简单教程 http://www.everet.org/2012/01/python-ogre-start.html
华亮还强烈建议这次我们要做到文档完善,结构清晰,注释充分,架构健壮……
所以华亮这一周的工作是弄个架构设计文档出来,最好把骨架系统也搭起来。如果遇到需要和大家商量的地方可以在qq上商量。
对于我,杨旭瑜和徐小孟,这一周的共同工作则是,安装PythonOgre(对于徐小孟同学,你还要安装原版的OgreSDK),研究Ogre的例子和源码,学习Ogre的设计架构(听说徐小孟同学在写自己的渲染引擎,这点可能对你比较有帮助);学习Ogre的功能,并留意其中对我们以后的开发用的上的功能。
另外,虽然是华亮负责架构,但并不意味这我们可以不用去了解。因为我们是基于Ogre开发,所以可以预见到我们的软件架构和Ogre自身的架构是有许多相似之处的。我建议大家多去关注一下Ogre里面用到的设计模式,如单例模式,工厂模式,这对我们自己以后的发展也很有帮助。

以上!
屠文翔

本文链接: http://everet.org/2012/01/clover-progress.html