
2009年9月2日
最近在用CEGUI做UI,不得不承認(rèn)CEGUI確實(shí)很強(qiáng)大,
控件齊全而且外觀(guān)的配置非常靈活,可以隨意的修改控件所使用的圖片以及控件各組成部分的尺寸和位置,
接口也比較簡(jiǎn)明,容易上手,
作為一個(gè)開(kāi)源的、完全免費(fèi)的第三方庫(kù),做到這樣優(yōu)秀實(shí)在值得我們感激涕零,
但我不得不抱怨一下,自己編譯源碼太過(guò)麻煩,而且工具太糟糕了!
之前一直是直接下載編譯好的lib和頭文件來(lái)用,
前幾天為了做中文支持對(duì)CEGUI做了些改造,編譯的時(shí)候提示要pcre的庫(kù)和freetype的庫(kù),
又去sourceforge上找了下下來(lái),解壓后發(fā)現(xiàn)找不找VC8的sln或dsw,只有makefile,
搜了半天說(shuō)VC8可以用命令行來(lái)通過(guò)makefile編譯,折騰了半天又提示缺這個(gè)缺那個(gè),
又百度了半天終于找到辦法自己建項(xiàng)目和工程了編譯,又是一大堆問(wèn)題,這個(gè)要設(shè)置那個(gè)要改名,
還有那一大堆為了各平臺(tái)而寫(xiě)的一大堆宏,甚至還有一些vc8不接受的奇怪語(yǔ)法,
一個(gè)指針數(shù)組的聲明由中間使用了一個(gè)宏被VC8認(rèn)成返回?cái)?shù)組的函數(shù)而無(wú)法通過(guò)編譯等等。
拜托同事幫忙才終于編譯出了pcre,貌似他是去網(wǎng)上下了個(gè)什么高級(jí)玩意,命令行下配置了老半天才編譯出來(lái)的。
折騰了N久之后終于編譯出了我要的lib……
用CEGUI恐怕不得不用官方的CEGUILayoutEditor,這是我在網(wǎng)上唯一能找到的CEGUI編輯器,
雖然相比用記事本寫(xiě)xml文件來(lái)說(shuō),這種可視化的編輯工具方便了很多,
但是用過(guò)的人肯定知道它用起來(lái)多讓人難受——
從啟動(dòng)開(kāi)始就連續(xù)一串錯(cuò)誤提示,控件屬性列表里的屬性比較有限,更讓人吐血的是經(jīng)常改了又自己變回去,
以至于很多屬性在編輯器里根本改不了,只能保存了打開(kāi)xml文件改。
作為一個(gè)UI編輯器,居然沒(méi)有任何控件對(duì)齊功能,讓人不得不自己計(jì)算各個(gè)坐標(biāo)了跑到xml文件里去填,
今天實(shí)在忍受不了了,跑去下了CEGUILayoutEditor的源碼打算改造一番,
一編譯,又得去下wxWidgets,我真想吼一聲,就不能給我個(gè)下下來(lái)就能編譯的東西么?
又老老實(shí)實(shí)跑去下了wxWidgets,又沒(méi)發(fā)現(xiàn)編譯好的lib,只找到VC6的dsw和dsp,這么多文件,從VC6的項(xiàng)目轉(zhuǎn)換到VC8將會(huì)是件極其痛苦的事情……難道要我再去裝個(gè)VC6么。。。我絕望了……
CEGUIImagesetEditor,一個(gè)簡(jiǎn)單的切圖工具,被一個(gè)蹩腳的自動(dòng)邊界識(shí)別功能搞得幾乎沒(méi)有辦法正常使用,
總是會(huì)自聰明的替你調(diào)整切圖尺寸,而且改不回來(lái),
更要命的是拖動(dòng)一個(gè)切圖窗格時(shí)這個(gè)功能有90%的概率直接導(dǎo)致進(jìn)程在沒(méi)有任何提示的情況下忽然結(jié)束,
做了半天的工作付之東流……
我也想過(guò)去改造它,去掉它這個(gè)讓人惡心的功能,可是下了源碼下來(lái)發(fā)現(xiàn)又需要好幾個(gè)第三方庫(kù)……
感謝為開(kāi)源免費(fèi)的項(xiàng)目做出貢獻(xiàn)的程序員們,
無(wú)償?shù)膸椭覀兇蠓鹊奶岣吡诵剩刮覀儾挥迷僖磺袕念^開(kāi)始,
他們是偉大的,無(wú)私的,
但是也帶來(lái)了無(wú)盡的煩惱……
posted @
2009-09-02 18:28 Vertexer 閱讀(530) |
評(píng)論 (4) |
編輯 收藏

2009年8月31日
在嘗試渲染鏡面的時(shí)候遇到一個(gè)問(wèn)題,將要貼到鏡面上的紋理是渲染出來(lái)的,
已經(jīng)是從攝像機(jī)的角度看到的鏡面內(nèi)容了,再使用常規(guī)的紋理坐標(biāo)貼圖必然會(huì)造成扭曲失真,
要做的是相對(duì)屏幕坐標(biāo)將紋理貼到鏡面上,
就仿佛是從攝像機(jī)的角度將紋理投射到物體表面上一樣,這樣做可以使用投影紋理來(lái)實(shí)現(xiàn),
但是看了一下投影紋理坐標(biāo)的計(jì)算過(guò)于繁瑣,想了想還是決定從Vertex Shader輸出的坐標(biāo)信息下手。
折騰了半天之后終于搞定了~
在VS中將待輸出的坐標(biāo)的xy分量和w分量分別插值傳遞給PS
在PS中使用xy/w就得到當(dāng)前渲染的像素在以屏幕中心為原點(diǎn),
y=±1為上下邊沿,x=±1為左右邊沿的左手坐標(biāo)系中的坐標(biāo)。
當(dāng)然z/w也就是固定管線(xiàn)中寫(xiě)入到z緩沖中的深度值~
有了這個(gè)坐標(biāo)之后想要計(jì)算其他的東西就很方便了,
只需要對(duì)-xy使用加一除以二的操作后就可以得到鏡面上當(dāng)前像素對(duì)應(yīng)的紋理坐標(biāo)了~~
或者對(duì)xy加一除二,再乘上當(dāng)前窗口的分辨率就可以得到像素坐標(biāo)了~
不知道d3d光柵化是怎么做的,
如果不是這樣做的,那這個(gè)辦法就不一定精確了
posted @
2009-08-31 17:48 Vertexer 閱讀(1397) |
評(píng)論 (0) |
編輯 收藏