随笔-2  评论-7  文章-2  trackbacks-0
  2009年9月2日
最近在用CEGUI做UI,不得不承认CEGUI确实很强大,
控件齐全而且外观的配置非常灵活,可以随意的修改控件所使用的图片以及控件各组成部分的尺寸和位置,
接口也比较简明,容易上手,
作为一个开源的、完全免费的第三方库,做到这样优秀实在值得我们感激涕零,
但我不得不抱怨一下,自己编译源码太过麻烦,而且工具太糟糕了!

之前一直是直接下载编译好的lib和头文件来用,
前几天为了做中文支持对CEGUI做了些改造,编译的时候提示要pcre的库和freetype的库,
又去sourceforge上找了下下来,解压后发现找不找VC8的sln或dsw,只有makefile,
搜了半天说VC8可以用命令行来通过makefile编译,折腾了半天又提示缺这个缺那个,
又百度了半天终于找到办法自己建项目和工程了编译,又是一大堆问题,这个要设置那个要改名,
还有那一大堆为了各平台而写的一大堆宏,甚至还有一些vc8不接受的奇怪语法,
一个指针数组的声明由中间使用了一个宏被VC8认成返回数组的函数而无法通过编译等等。
拜托同事帮忙才终于编译出了pcre,貌似他是去网上下了个什么高级玩意,命令行下配置了老半天才编译出来的。
折腾了N久之后终于编译出了我要的lib……

用CEGUI恐怕不得不用官方的CEGUILayoutEditor,这是我在网上唯一能找到的CEGUI编辑器,
虽然相比用记事本写xml文件来说,这种可视化的编辑工具方便了很多,
但是用过的人肯定知道它用起来多让人难受——
从启动开始就连续一串错误提示,控件属性列表里的属性比较有限,更让人吐血的是经常改了又自己变回去,
以至于很多属性在编辑器里根本改不了,只能保存了打开xml文件改。
作为一个UI编辑器,居然没有任何控件对齐功能,让人不得不自己计算各个坐标了跑到xml文件里去填,
今天实在忍受不了了,跑去下了CEGUILayoutEditor的源码打算改造一番,
一编译,又得去下wxWidgets,我真想吼一声,就不能给我个下下来就能编译的东西么?
又老老实实跑去下了wxWidgets,又没发现编译好的lib,只找到VC6的dsw和dsp,这么多文件,从VC6的项目转换到VC8将会是件极其痛苦的事情……难道要我再去装个VC6么。。。我绝望了……

CEGUIImagesetEditor,一个简单的切图工具,被一个蹩脚的自动边界识别功能搞得几乎没有办法正常使用,
总是会自聪明的替你调整切图尺寸,而且改不回来,
更要命的是拖动一个切图窗格时这个功能有90%的概率直接导致进程在没有任何提示的情况下忽然结束,
做了半天的工作付之东流……
我也想过去改造它,去掉它这个让人恶心的功能,可是下了源码下来发现又需要好几个第三方库……

感谢为开源免费的项目做出贡献的程序员们,
无偿的帮助我们大幅度的提高了效率,使我们不用再一切从头开始,
他们是伟大的,无私的,
但是也带来了无尽的烦恼……
posted @ 2009-09-02 18:28 Vertexer 阅读(364) | 评论 (4)编辑 收藏
  2009年8月31日

在尝试渲染镜面的时候遇到一个问题,将要贴到镜面上的纹理是渲染出来的,
已经是从摄像机的角度看到的镜面内容了,再使用常规的纹理坐标贴图必然会造成扭曲失真,
要做的是相对屏幕坐标将纹理贴到镜面上,
就仿佛是从摄像机的角度将纹理投射到物体表面上一样,这样做可以使用投影纹理来实现,
但是看了一下投影纹理坐标的计算过于繁琐,想了想还是决定从Vertex Shader输出的坐标信息下手。
折腾了半天之后终于搞定了~

在VS中将待输出的坐标的xy分量和w分量分别插值传递给PS
在PS中使用xy/w就得到当前渲染的像素在以屏幕中心为原点,
y=±1为上下边沿,x=±1为左右边沿的左手坐标系中的坐标。
当然z/w也就是固定管线中写入到z缓冲中的深度值~

有了这个坐标之后想要计算其他的东西就很方便了,
只需要对-xy使用加一除以二的操作后就可以得到镜面上当前像素对应的纹理坐标了~~
或者对xy加一除二,再乘上当前窗口的分辨率就可以得到像素坐标了~
不知道d3d光栅化是怎么做的,
如果不是这样做的,那这个办法就不一定精确了



posted @ 2009-08-31 17:48 Vertexer 阅读(816) | 评论 (0)编辑 收藏
仅列出标题