
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 閱讀(528) |
評論 (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 閱讀(1391) |
評論 (0) |
編輯 收藏