PyOgre入门以及如何使用Blender制作Ogre的Mesh。

在进入正题之前,先扯点闲话。其实最开始接触游戏开发的时候,就是从Ogre开始的。不得不说Ogre是我目前看到过的代码质量最好的开源项目了,在如此庞大的架构下,功能全面而且简单易学。这应该是每个制作游戏引擎的同学应该学习的地方(虽然Ogre只能算是一个图形渲染引擎)。上面这句话也是因为前两天首页上出现的“为什么这么多人做引擎”联想到的。

Ogre是一个C++ 库,所以大多数时候我都要使用Visual Studio这样的庞然大物才能使用它。而且如果不使用预编译头,哪怕使用的是Ogre的PreBuild SDK,一个极小的程序都需要编译很长的时间(15-1分钟不等,看CPU)。这样的编译时间对于一个较大的程序来说是可以容忍的,不过当我们需要改变一个光源的位置时,这样的编译时间则变得很尴尬……

可能了解Ogre的同学会说使用.DotScene来描述场景。使用数据描述的确是解决问题的途径之一,不过对于C++程序来说,还是不能根治编译耗时。何况编写一个极小的Demo(比如摆一个平面,一个Model,一个光源)的情况,实在是不想用“牛刀”来杀小鸡。

前段时间看到了一篇文章,里面的观点都十分的有意思:
十条不错的编程观点: http://coolshell.cn/?p=2424

7)If you only know one language, no matter how well you know it, you’re not a great programmer.

虽然我涉猎过许多的语言,不过终归是涉猎。唯一深入的则只有C/C++,所以要想对得起Great这个形容词,还得多学习!选择Python,原因有几点。

1. Python很美,可以写出很短又极具表述力的代码。
2. Python是脚本语言,无需编译。
3. Python有大量的3rd party Lib,其中包括我想用的Ogre。

这两天花了些空闲时间在摆弄PyOgre和Blender上面。还是先说PyOgre吧。
教程式的文章写着实在是费劲,很多东西也只是换一种语言(Eng->Chn)而已。所以我觉得还是直接贴一下地址比较好。

首先,下载Python吧…… 不过GFW好像一不小心把Python网站给墙了,或者Python的Download部分
所以,你得想办法搞到一个Python For Win的安装包(我是在Win下做的这些事情,但是我提到的所有软件和代码都是可以多个平台下运行的,这也是Python很酷的地方!)

安装好Python了过后,设置一下环境变量吧。在环境变量里面有一个PATH,在里面加入Python的安装目录。然后确保运行 cmd 之后能够通过 python 进入python的解释器。

如果你们和我有一样的习惯,就是每次装好某种语言的编译器或者解释器都喜欢用Hello World来测试一下。那么可以新建一个Hello.py写下:
print 'Hello World'
然后进入命令行 python Hello.py 运行一下 ^ ^

然后就是PyOgre的安装,PyOgre可以在 http://www.ogre3d.org/wiki/index.php/Python-Ogre 得到相关信息
其中包括下载地址,项目是放在SF上的,在SF上可以下到所需的东西。

PyOgre和Ogre SDK不一样的是,它并没有把所有的东西all in one,而是分开下载。如果只需要Ogre部分并且想运行Ogre的Demo,那么要下载两个东西,一个是 OgreMain,一个是Media。

按照Install.txt中的描述,执行 python setup.py install 就会进行安装。

如果一切都是按照上面这个过程来的,那么demos下面的演示程序应该大部分都可以运行了。在Windows上直接双击Demo_****.py就可以了。

至于学习Python的资源,我是按照 Byte of python 这本700多kb的电子书入门的。后续准备看Dive into Python:http://www.tsnc.edu.cn/default/tsnc_wgrj/doc/pythonhtml/html/toc/index.html

---------------------------------------------------------------------------------------

PyOgre告一段落,更多的资源和内容就请Google了。接下来说说Blender。

现在大多数游戏公司做3D模型都是使用的3DS MAX,但是对于我这么一个无聊自学的人来说,那玩意太庞大……Blender是一个很好的选择,而且巧合的是,Blender是使用Python编写的一个3D建模工具。小巧免费而且跨平台。

学习Blender可能不是所有程序员都愿意的事情,不过最近我觉得,如果说要制作游戏,就应该尽可能多的了解制作过程中的方方面面。其中不乏美术资源制作的部分,哪怕我不能作出变形金刚,我也可以做几个小方块蹦蹦跳跳。

其实,之前在公司听到一句话叫“学科只是软弱和懒惰的人发明出来的东西,在知识的领域本来是没有边界的”。所以学学3D模型的制作,偶尔还能让自己左脑休息休息。最重要的是,如果你在一个项目组中,并且要和美术进行合作,那么懂得一些美术资源制作的知识是有必要的。尤其是你是为美术开发编辑器或者内部工具的程序员。

Blender的学习,我在youku上找到了一个不错的连续性的教程视屏。
名字叫 Blender Basic ... Part 1 2 ..

其实,最主要的应该是,如何让Blender导出Ogre使用的Mesh了吧,其中涉及到两个东西:

1. Blender Exporter
2. Ogre Command Line Tools

这两个东西都可以在Ogre官方网站和Google上找到~

Blender Exporter 是 Blender的一个插件,要放在系统的 App Data 里面。对于Win Xp的同学来说这个目录不怎么好找……(因为它是隐藏的)

C:\Documents and Settings\Charlie\Application Data\Blender Foundation\Blender\.blender\scripts

大概就是在形如上面的一个目录中,将Exporter解压到这里
在Blender里面还得设置 Command Line Tools 的目录

因为默认的Exporter导出的是一个xml文件,需要用OgreXMLConverter来将它转换为binary的mesh文件。

---------------------------------------------------------------------------------------

这是我写的一个载入模型的小东西

import sys
sys.path.insert(0, './import/')

import ogre.renderer.OGRE as Ogre
import SampleFramework as SF

class ShowMonkeyApplication(SF.Application):
    def _createScene(self):
        sceneMgr = self.sceneManager

        light = sceneMgr.createLight('MainLight')

        monkeyNode = sceneMgr.getRootSceneNode().createChildSceneNode()
        monkeyEntity = sceneMgr.createEntity('Monkey', 'Monkey.mesh')
        monkeyNode.attachObject(monkeyEntity)

        self.camera.setPosition(20, 0, 100)
        self.camera.lookAt(0, 0, 0)

    def _createFrameListener(self):
        self.frameListener = ShowMonkeyFrameListener(self.renderWindow, self.camera)
        self.root.addFrameListener(self.frameListener)
        

class ShowMonkeyFrameListener(SF.FrameListener):
    def __init__(self, renderWindow, camera):
        SF.FrameListener.__init__(self, renderWindow, camera)

    def frameStarted(self, frameEvent):
        return SF.FrameListener.frameStarted(self, frameEvent)

if __name__ == '__main__':
    try:
        app = ShowMonkeyApplication()
        app.go()
    except Ogre.OgreException, e:
        print e

Have fun with PyOgre and Blender ^ ^

Python Ogre Blender(转载)的更多相关文章

  1. Python正则表达式指南(转载)

    转载自:http://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html#3353540 1. 正则表达式基础 1.1. 简单介绍 正则表达式并不 ...

  2. Python3基础-Python作用域详述(转载)

    转载文章 转载文章 作者:骏马金龙 出处:http://www.cnblogs.com/f-ck-need-u/p/9925021.html Python作用域详述 作用域是指变量的生效范围,例如本地 ...

  3. python开发规范(转载)

    转载自http://www.cnblogs.com/wangcp-2014/p/4838952.html 目录 代码布局 1.1 缩进 1.2 表达式和语句中的空格 1.3 行的最大长度 1.4 空行 ...

  4. 聊聊Python ctypes 模块(转载)

    https://zhuanlan.zhihu.com/p/20152309?columnSlug=python-dev 作者:Jerry Jho链接:https://zhuanlan.zhihu.co ...

  5. Scikit-Learn:开源的机器学习Python模块(转载)

    摘要: scikit-learn是一个用于机器学习的Python模块,其具有操作简单.效率高.无访问限制.BSD开源协议等等特征,在机器学习这一块是比较受欢迎的. scikit-learn是一个用于机 ...

  6. Python 操作Redis 转载篇

    Python操作Redis数据库 连接数据库 StrictRedis from redis import StrictRedis # 使用默认方式连接到数据库 redis = StrictRedis( ...

  7. 代码这样写更优雅(Python 版)(转载)

    转载:https://mp.weixin.qq.com/s?timestamp=1498528588&src=3&ver=1&signature=DfFeOFPXy44ObCM ...

  8. 利用百度智能云结合Python体验图像识别(转载来自qylruirui)

    https://blog.csdn.net/qylruirui/article/details/94992917 利用百度智能云结合Python体验图像识别只要注册了百度账号就可以轻松体验百度智能云中 ...

  9. python随机数(转载)

    随机生成 0 到 1 之间的浮点数 random.random() 方法会返回 [0.0, 1.0) 之间的浮点数,注意,这是一个左闭右开的区间,随机数可能会是 0 但不可能为 1 . 随机生成 a ...

随机推荐

  1. 【Robot Framework】robot framework 学习以及selenium、appnium、requests实践(三)

    看了上一章的内容,想必较为简单的case也都会编写了吧,但是是不是觉得,如果能够实现用例参数化,是不是会节省很多劳动力,这节就来学下RF中的user keywords,会让你发现写用例原来可以这么简单 ...

  2. tomcat下部署可以访问的文件夹

    项目名#文件夹名#文件夹名.xml <Context docBase="D:\文件夹名\r文件夹名"/> 例如: test#zhang#test1.xml <Co ...

  3. ASP.NET5 中静态文件的各种使用方式

    所谓静态文件,包含HTML文件,css文件.图片文件和js文件等,他们是服务器直接读取到客户端的一些资源,在这篇文章中,我们将解释关于ASP.NET5和静态文件的一些内容. 服务端的静态文件 默认情况 ...

  4. Android开发-API指南-Intent和Intent过滤器

    Intents and Intent Filters 英文原文:http://developer.android.com/guide/components/intents-filters.html 采 ...

  5. Laxcus大数据管理系统2.0(9)- 第七章 分布任务组件

    第七章 分布任务组件 Laxcus 2.0版本的分布任务组件,是在1.x版本的基础上,重新整合中间件和分布计算技术,按照新增加的功能,设计的一套新的.分布状态下运行的数据计算组件和数据构建组件,以及依 ...

  6. panguan(判官):一个自研的任务执行引擎的工程实践

    来某厂接近半年了,几乎没写过C++代码,说实话还真的有点手生.最近刚好有一个需求,然而我感觉我也没有办法用C++以外的语言去实现它.于是还是花了几天时间用C++完成编码,这是一个简单的任务执行引擎,它 ...

  7. Linux使用常见错误集锦

    1. scp拷贝文件失败问题 当在 shell startup script (比如 profile , bashrc)自动执行过程中产生了任何内容输出时, scp / sftp会把这些 echo 回 ...

  8. phonegap ios默认启动页

    phonegap创建的项目默认的启动界面是phonegap的图标,想去掉这个图标,有两个方法,第一就是将resourece下面的splash文件下面的图片改成自己想要的启动页面,名字要相同,替换掉它默 ...

  9. 【HTML/XML 7】CSS层叠样式表

    导读:上篇博客说到用XSL去实现XML文档的表现形式的美化,那么另外一种方式就是CSS的使用.本篇博客系统的介绍CSS,下篇博客,将系统的介绍XSL. 一.CSS的发展历史 1996年,层叠样式表(C ...

  10. oracle权限

    Oracle 权限 权限允许用户访问属于其它用户的对象或执行程序,ORACLE系统提供三种权限:Object 对象级.System 系统级.Role 角色级.这些权限可以授予给用户.特殊用户publi ...