effulgent

与梦齐飞翔
posts - 26, comments - 37, trackbacks - 0, articles - 14
  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理

2008年2月2日

     摘要: python学习备忘  阅读全文

posted @ 2008-08-04 14:56 易颖 阅读(529) | 评论 (0)编辑

    最近要选择开发工具来做我的一个游戏系统,最终在MFC + CPP、C# + 托管CPP + CPP、wxWidget + CPP、Python + wxPython + CPP四种解决方案中选择了最后一种,第一种是目前最常见的解决方案,因为很多现在的游戏开发者以前或多或少都用过MFC,第二种为我们目前项目所用,GB工具也使用了这个框架,非常的稳定自然,wxWidget + CPP框架则是Unreal的做法,呵呵,毫无疑问是为了跨平台,而我要另辟蹊径,使用Python + wxPython + CPP结构,目前我还没有看见任何游戏系统用这个框架,优点就是python的简洁灵活的语法,快速的BOA+wxPython界面开发,缺点就是不知道wxpython界面是否稳健,boost.python黏合CPP效率是否满足要求.不管它,做了再说.

    首先要建立开发环境,下载了win32版本的python2.5.2 binaries,我暂时不想编译Python Debug版,wxPython版本win32-unicode 2.8.8.0-py25,CSDN下的,BOA版本好像是0.6.1,依次安装以上三个版本,我为了怕麻烦都安装在默认目录.完毕后运行BOA,tools菜单下设置python解释器,新建个wx.App试试,运行OK,学习就看BOA帮助,绝对通俗易懂,半天就能学会,剩下在就是boost.python,下最新的boost_1_35_0,解压到c:\,弄个bjam,有现成的下bjam.exe,自己编译没那功夫,方便起见把bjam.exe放到c:\boost_1_35_0目录下,现在我们要编译boost.python,其他库就略过了,要不然要编译个把小时(大部分的类是不需要编译的,包含头文件就可以用了。判断某组类是否需要编译,只需要查看c:\boost_1_35_0\libs\目录下相应的子目录里是否有一个build子目录,如果有,就说明需要编译).记得机器上要有MSVS 2005,然后在c:\boost_1_35_0目录下建如下批处理文件:

    SET BOOST_ROOT=c:\boost_1_35_0
    @REM 这里改成你自己的PYTHON目录
    SET PYTHON_ROOT=c:\Python25
    @REM 改成你自己的PYTHON版本
    SET PYTHON_VERSION=2.5
    bjam -sBOOST_ROOT=. -sTOOLS=msvc-8.0 --with-python "-sBUILD=debug release multi/single
static/dynamic"
    (以上方法完全适用与默认安装所有程序的朋友,其他朋友可能要设置一些环境参数,具体我就不知道
了,bjam的用法请参考boost帮助文档,确实很难看,一点也不傻瓜化)

    保存双击运行,一堆warning,不用管,检查下只要没有error就行,大概1分钟左右boost.python编译完毕,到c:\boost_1_35_0\bin.v2\libs\python\build\msvc-8.0\下去找编译完毕的lib和dll,默认文件名应该是boost_python-vc80-mt-gd-1_35.dll和boost_python-vc80-mt-1_35.dll,前者是DEBUG版本,现在要写个python扩展测试下是否可以用.
#include <boost/python.hpp>
#include <iostream>

#pragma comment(lib, "boost_python-vc80-mt-1_35.lib")

void show()
{
 std::cout << "This is C++ Code" << std::endl;
}


BOOST_PYTHON_MODULE(PyExt)
{
 boost::python::def("show", show);
}
有三点需要注意.

1:BOOST_PYTHON_MODULE(PyExt)的字符与DLL文件名要相同.
2:DLL文件后缀改成PYD.
3:boost_python-vc80-mt-1_35.lib与DLL文件名不要修正,因为在BOOST.PYTHON里用宏已经固定了,可能在bjam配置文件里可以修改那个默认名.
 

>>import PyExt
>>PyExt.show()
This is C++ Code 

   显示结果如上你就成功了!最近同事老是跟我推荐Object C与COCOA一起开发原型,稍微看了下工作流程,确实冗余很少,程序简洁,但关键是程序只能运行在MAC OS上,而且C本身冗余比较多,不过苹果的势力确实很强,苹果的思想也非常的好,彻底体现了KISS原则.简单并且人性化,而当前很多软件好像并不追求这个,而是反复强调技巧,比如BOOST我就很不喜欢他的风格,它想把一些问题简单化,但做法却不很不优雅.最近一直在追求冗余最少最人性最简单的开发工具和开发方法,始终没有我特别满意感到惊艳的.

posted @ 2008-07-31 19:51 易颖 阅读(142) | 评论 (0)编辑

     摘要: 可编程图形硬件的迅猛发展,让高质量实时体渲染图形成为可能,火焰,烟雾,大气效果,云的渲染变得越来越快,这篇文章既包含科学领域应用,如医疗成像,也包含一些游戏中的特效应用。  阅读全文

posted @ 2008-06-18 11:23 易颖 阅读(129) | 评论 (1)编辑

     摘要: Crysis道路系统  阅读全文

posted @ 2008-06-05 18:40 易颖 阅读(143) | 评论 (1)编辑

     这几天碰到好几件烦闷的事,比如搬家,比如工作遇到的问题,加上上海天气潮热,更让我浮躁万分。投影器的编码,折腾了我两天,怎么弄都得不到正确的结果,最后一个不小心发现在SHADER中把一个float4写成了float3,好生让我郁闷,一个变量类型让我浪费了差不多一天时间。本来在网上允诺别人说这周完成魔兽争霸的角色动画,看来不得不延期了,因为本职工作有点忙,道路生成还是不能走捷径,必须老老实实实现贴花功能,投影器几何裁剪已经让我痛苦一次了,这次的几何体的裁剪会让我更痛苦,因为要考虑非矩形内的几何裁剪,细节很多,很烦细节,但细节决定一切,郁闷。唯一让我开心的事就是俺家咪宝的工作终于敲定了,而且都是西门子,伟创力等大公司找她,让她应付不暇,不知道答应哪个公司好,咪宝英语和专业知识都有了长足的进步,特此贺过。

posted @ 2008-05-29 16:46 易颖 阅读(56) | 评论 (0)编辑

     摘要: 利用球谐光照技术,能让我们实时重现面积光源下3D模型的全局光照效果,在SIG02的一篇论文中曾有介绍(Sloan,Kautz,Snyder)利用这种技术实现模型的超真实光照效果。从这个技术的发展来看,他其实是N多相关技术的合集,游戏开发者可以利用他们来获得VERY GOOD的画面效果。技术本身的代码和结果都是很简单明了的,但这篇文章的目的在于阐述其背后的原理,以飨广大初学者。告诉你WHY,给予你使用SH LIGHTING的所有力量。  阅读全文

posted @ 2008-04-15 09:32 易颖 阅读(346) | 评论 (2)编辑

     两个星期前在AMAZON定的书今天邮到,包装保护很好,没有任何破损,时间也并没有象网上说的要3个星期到1个月,可能是上海邮政比较负责吧,总之想买书的兄弟可以放心购买了.一本GPU GEMS 3 一本 SHADERX4, SHADERX4主要是项目中要用, 而GPU GEMS 3前瞻性的看看技术. 相信明年就会翻译过来,想买的人可以等等.

posted @ 2008-03-20 14:41 易颖 阅读(292) | 评论 (4)编辑

     摘要: 在做大面积场景中,大多数人都对庞大数量小物件的渲染感到头疼不已,比如大量的小草、石头、落叶等。以草的渲染作为说明实例,如果草以大量分开的PRIMITIVE来渲染,在图形API调用的消耗将是巨大的,所以大部分同行的做法是当一个PRIMITIVE提交任务,但这样又带来两个问题,第一,无法对草木进行剔除;第二,无法进行ALPHA排序。对于这两个问题,通常有如下的解决方案,对于剔除问题,一般是将众多的草分成若干簇,能够以簇为单位进行剔除,这样就可以在API调用消耗与渲染负荷得到一个折中;对于ALPHA排序问题,最常用的解决方案就是用ALPHA TEST替代ALPHA BLEND。  阅读全文

posted @ 2008-03-11 16:04 易颖 阅读(255) | 评论 (1)编辑

     摘要: 游戏编程,我们该读哪些书?  阅读全文

posted @ 2008-03-09 13:53 易颖 阅读(1255) | 评论 (17)编辑

     摘要: 本篇为3D基础的第3部分,主要讲述顶点切向量的计算原理,相信很多人都对Shader里的Tangent分量没有深入了解,希望我的这篇文章能对各位理解切空间有所帮助。我们以凹凸映射为例子来解释今天的原理。
  阅读全文

posted @ 2008-03-08 14:01 易颖 阅读(204) | 评论 (0)编辑

     虚幻2的核心代码基本都通看过了,除了它的场景管理我没有写成笔记外,其他的基本都总结出来了,熟悉虚幻源码的人少之又少,我也是在阅读中探索,不断的实现虚幻的各种功能,虚幻3比虚幻2最主要是多了特效材质模块,那也是个非常有吸引力的技术,手中有代码,而且对虚幻分析有兴趣的朋友可以与我交流。
      今天主要是讲下虚幻功能强大的投影器原理,而且我只讲最重要的静态模型上的projector,前因后果不作铺垫,本文章主要作为自身备忘,下面直接讲述数学原理。

1.虚幻2 静态模型上的Projector会切割静态模型并生成Primitive decals,最后的Primitive Decals以三角形List形式渲染,为什么不使用Strip?因为他切割的原理。
2.静态模型切割原理。详见ClipTriangle函数,基本算法是,生成一个切割顶点顺序序列,切割过程中,如果前序顶点与测试顶点都位于投影空间外,则丢弃本测试顶点。如果分别置于内外,则切割生成新顶点,按顺序保存下顶点,等所有顶点都生成完毕后,以其中一个顶点为原点,分割生成Triangle List。
3.其Projector投影矩阵的推导。
| Sx     0       0     0 |
| 0       Sy     0     0 |
| 0.5    0.5    1     0 |
| 0       0       0     1 |

Sx = Sy = 0.5 / tan(Θ)

Θ = Half Horizonal FOV Radius

X'/tan(Θ) = X''/0.5 ( Distance of Near Plane is 1, So Half Length of FOV is tan(Θ) )
上式主要是进行投影坐标钳制(-0.5 - +0.5),而| 0.5 0.5 1 0 |主要是将钳制范围平移为| 0 - 1.0 | 的纹理坐标范围。

posted @ 2008-03-05 10:04 易颖 阅读(98) | 评论 (0)编辑

     摘要: 终于开始着手写[3D基础]系列的第二篇文章了,这篇文章所将的内容相信对于很多人而言都是相当重要的,因为涉及到相机坐标系变换,BILLBOARD实现原理,凹凸映射切空间变换等课题。  阅读全文

posted @ 2008-02-18 16:39 易颖 阅读(363) | 评论 (0)编辑

     摘要: 延迟光照的关键部分  阅读全文

posted @ 2008-02-03 10:31 易颖 阅读(160) | 评论 (0)编辑

     摘要: 延迟着色的优势  阅读全文

posted @ 2008-02-02 10:13 易颖 阅读(182) | 评论 (0)编辑