Ogre的skeleton数据的压缩
[ 2010-04-08 17:26:22 | 作者: Admin ]
今天写了个小程序,将Ogre的skeleton数据压缩了一下,发现原来导出的skeleton有很多的冗余数据,由于之前动画数据时按频率采样,并没有读MAX的关键帧,导致两个关键帧内出现了很多重复的差值数据,只要删除这些冗余的插值数据,即可以实现skeleton的数据压缩。
找到冗余的插值数据的算法简述为,遍历时间轴上的连续的3个关键帧,如果按每个关键帧对于时间的比例,计算第2号关键帧是否正好是1,3关键帧的差值数据,如果是的话就删除此关键帧,然后从头再遍历,再执行上述过程,直到最后找不到可删除的关键帧,或者关键帧数小于3,就停止。
最后将skeleton数据导出,则数据量会小了很多,实验证明原来139KB的死亡动作,最后压缩有只有13KB了。效果基本一模一样。
www.azure.com.cn
找到冗余的插值数据的算法简述为,遍历时间轴上的连续的3个关键帧,如果按每个关键帧对于时间的比例,计算第2号关键帧是否正好是1,3关键帧的差值数据,如果是的话就删除此关键帧,然后从头再遍历,再执行上述过程,直到最后找不到可删除的关键帧,或者关键帧数小于3,就停止。
最后将skeleton数据导出,则数据量会小了很多,实验证明原来139KB的死亡动作,最后压缩有只有13KB了。效果基本一模一样。
www.azure.com.cn
OpenMP 简单示例
[ 2010-01-22 22:32:37 | 作者: Admin ]
OpenMP是一个支持共享存储并行设计的库,特别适宜多核CPU上的并行程序设计。今天在双核CPU机器上试了一下OpenMP并行程序设计,发现效率方面超出想象,因此写出来分享给大家。
在VC8.0中项目的属性对话框中,左边框里的“配置属性”下的“C/C++”下的“语言”页里,将OpenMP支持改为“是/(OpenMP)”就可以支持OpenMP了。
先看一个简单的使用了OpenMP程序
int main(int argc, char* argv[])
{
#pragma omp parallel for
for (int i = 0; i < 10; i++ )
{
printf("i = %d\n", i);
}
return 0;
}
这个程序执行后打印出以下结果:
i = 0
i = 5
...
阅读全文...
在VC8.0中项目的属性对话框中,左边框里的“配置属性”下的“C/C++”下的“语言”页里,将OpenMP支持改为“是/(OpenMP)”就可以支持OpenMP了。
先看一个简单的使用了OpenMP程序
int main(int argc, char* argv[])
{
#pragma omp parallel for
for (int i = 0; i < 10; i++ )
{
printf("i = %d\n", i);
}
return 0;
}
这个程序执行后打印出以下结果:
i = 0
i = 5
...
阅读全文...
自己封装了一个NedAllocator,底层使用nedmalloc
[ 2010-01-20 14:36:40 | 作者: Admin ]
这里是对nedmalloc的简介,来自http://www.nedprod.com/programs/portable/nedmalloc/
nedmalloc is a VERY fast, VERY scalable, multithreaded memory allocator with little memory fragmentation. It is faster in real world code than Hoard, faster than tcmalloc, faster than ptmalloc2 and it scales with extra processing cores better than Hoard, better than tcmalloc and better than ptmalloc2 or ptmalloc3. ...
阅读全文...
nedmalloc is a VERY fast, VERY scalable, multithreaded memory allocator with little memory fragmentation. It is faster in real world code than Hoard, faster than tcmalloc, faster than ptmalloc2 and it scales with extra processing cores better than Hoard, better than tcmalloc and better than ptmalloc2 or ptmalloc3. ...
阅读全文...
实现一个通用的调试控制台
[ 2010-01-15 17:14:47 | 作者: Admin ]
游戏是种实时渲染的程序,有时候需要LOG一些重要的信息供程序员调试判断,有时候也需要从键盘接收指令,比如“lighting on” 打开光照,"showbox true"显示包围盒。这时我们就需要一种叫控制台的组件,你也许会说我们可以利用游戏的聊天窗口来兼职控制台的功能,但是在我看来这样很不好,何况在聊天窗口还没有做之前我们该怎么办呢?在这里我更倾向另开一个调试控制台进程来处理LOG信息,我的目的是在不同游戏中尽可能的复用调试控制台。
由于控制台是独立于游戏的另外进程,所以这里涉及到进程间的通信问题,在这里我选择了利用WM_COPYDATA消息来实现。要实现一个进程发送消息,另外的进程接受消息。首先两点要定义相同的数据结构体,关于结构体我定义在LogStruct.h中,定义如下: ...
阅读全文...
由于控制台是独立于游戏的另外进程,所以这里涉及到进程间的通信问题,在这里我选择了利用WM_COPYDATA消息来实现。要实现一个进程发送消息,另外的进程接受消息。首先两点要定义相同的数据结构体,关于结构体我定义在LogStruct.h中,定义如下:
enum LogType
{
LT_INFO = 0, //一般信息
LT_DEBUG = 1, //调试信息
{
LT_INFO = 0, //一般信息
LT_DEBUG = 1, //调试信息
阅读全文...
CEGUI修改支持图文混排,现留图纪念
[ 2009-09-04 10:56:26 | 作者: Admin ]
Bullfrog 世界编辑器开始支持物体阴影与AO的烘焙
[ 2009-07-09 10:44:04 | 作者: Admin ]
美术人员在制作模型的时候,预留一层展开的UV,无需再通过3D软件,而直接在世界编辑器中即可烘焙物体的阴影和AO贴图,从而大大加快了美术的工作效率和整个场景的真实程度。
烘焙面板如下:
烘焙效果(无贴图效果)如下:
直射光 + Ambient Occlusion
烘焙效果(有地图效果)如下:
直射光 + Ambient Occlusion
可见,阴影渲染应用了新技术,alpha通道与alpha测试可以比较精确的穿透。
www.azure.com.cn
烘焙面板如下:
烘焙效果(无贴图效果)如下:
直射光 + Ambient Occlusion
烘焙效果(有地图效果)如下:
直射光 + Ambient Occlusion
可见,阴影渲染应用了新技术,alpha通道与alpha测试可以比较精确的穿透。
www.azure.com.cn
Bullfrog 特效编辑器基本介绍
[ 2009-07-03 15:15:25 | 作者: Admin ]
特效展示1
特效展示2
特效展示3
特效展示4
特效展示5
Bullfrog 特效编辑器支持特性:
阅读全文...
特效展示2
特效展示3
特效展示4
特效展示5
Bullfrog 特效编辑器支持特性:
- 支持粒子系统、广告版、模型等基本特效元素
- 带子系统、地面贴花等特殊特效元素
- 所有特效元素都支持位移、缩放、颜色、旋转、透明度等关键帧,为特效的灵活性做出了保证
- 所有特效元素可以在可视化的环境下在时间和空间上随意堆砌搭配,界面友好,方便易用
阅读全文...
CEGUI支持图片动画改造完成
[ 2009-03-24 16:50:11 | 作者: Admin ]
为了以后聊天框中的表情动画做准备,这几天将CEGUI进行了改造,使它支持了图片动画。
主要是添加了两个类: AnimationImageManager 和 AnimationImage,
并修改了System对象。
相关DEMO效果如下(其实是动画表情,但是看不出来):
www.azure.com.cn
主要是添加了两个类: AnimationImageManager 和 AnimationImage,
并修改了System对象。
相关DEMO效果如下(其实是动画表情,但是看不出来):
www.azure.com.cn
CEGUI中实现超链接(Hyperlink)演示
[ 2009-03-20 14:18:55 | 作者: Admin ]
通过3个星期对CEGUI的研究和改写,现使CEGUI支持了文本协议的解析和超链接的响应。
主要是要修改String类,使其中每个CHAR都拥有格式属性,然后当String传递到Font中drawLine的时候,解读出String中每个Char的显示属性,而采用不同的绘制策略。
同时还需要修改MultiLineEditBox来,添加一个开关在超文本和一般文本中进行切换。
添加的比较核心的代码就是一个HyperText Parser了。
暂时支持的文本协议请见DEMO。
效果图如下:
...
阅读全文...
主要是要修改String类,使其中每个CHAR都拥有格式属性,然后当String传递到Font中drawLine的时候,解读出String中每个Char的显示属性,而采用不同的绘制策略。
同时还需要修改MultiLineEditBox来,添加一个开关在超文本和一般文本中进行切换。
添加的比较核心的代码就是一个HyperText Parser了。
暂时支持的文本协议请见DEMO。
效果图如下:
...
阅读全文...
CEGUI中文输入的完美解决
[ 2009-03-18 16:25:18 | 作者: Admin ]
CEGUI中实现中文输入是一个老话题了,网上的资料也很多,但是实现的都不是那么完美,其中最重要的问题就是输入法界面的跟随和输入状态时对按键的屏蔽。
先来说下如何把中文输入进入。
先添加一个中文注入的函数: 函数的实现如下: ...
阅读全文...
先来说下如何把中文输入进入。
先添加一个中文注入的函数:
/////// 中文输入注入字符 (Added by Azure)
static bool ChnInjectChar(CEGUI::utf32 code_point);
///////
static bool ChnInjectChar(CEGUI::utf32 code_point);
///////
bool Win32AppHelper::ChnInjectChar(CEGUI::utf32 code_point)
{
#ifndef UNICODE
static char s_tempChar[3] = "";
static wchar_t s_tempWchar[2] = L"";
{
#ifndef UNICODE
static char s_tempChar[3] = "";
static wchar_t s_tempWchar[2] = L"";
阅读全文...





















