citywar Engine:下一階段目標

預計: citywar engine 1.3版功能

1.Casecade  shadow (已做得差不多了, 每增加一層 速度少掉20張. 只做3層而已)
fps總共少掉50張, 換取更好的影子品質, 不大覺得很划算.(在bulr 下去又少掉20張)
所以影子到這裡結束,  最多是做最佳化, 已經花了太多時間了.

2.所以說把影子繼續做好 不如在去寫其他的特效, 少掉50張, 這資源做其他的特效 夠了.
水面特效 只少掉30張.

已確定要做的特效但是不大確定能做出來. 所以無法說明.

3.Cull. 現在發覺, 要增加速度 cull 的效率要提高.


a.人物動態影子 可以從5個提升到10個. 算是意外的收穫.
之前寫在pixel shader, 速度有點慢, 改寫在vertex shader,為了Casecade  shadow,
又改在 pixel shader. 速度沒甚麼掉 算是好事.
寫在pixel shader, 當然人物影子數就可提高了.


b.發覺gpu運算方式 好像是暴力演算法, if的處理速度很慢,for的速度很快.


c.2年前寫引擎時, 我的9600gt  材質只支援到 4096x4096,現在已經到8192x8192
還有在hlsl 裡面寫 break, 速度會狂掉, 現在不會了.

所以說  顯示卡廠商 把driver寫好比較實在, 常常會出現很奇怪的問題.

hlsl 裡面要加強 if continue break 的速度 才是重點.



要更好的劃質, 就要拿硬體規格來換


3D畫面  = GPU速度  +  記憶體   + 程式設計

畫面就是由這三種組成.

現在3D已經沒有 速度又快,  畫質又好,  硬體規格又低的.

軟體的比例已經剩下1/3了.(再加上大家用的演算法都差不多)

事實證明記憶體的比例也愈來愈高了,
例如 id的 RAGE, 可以在很低的硬體配備執行出不錯的畫面, 就是用大量的記憶裡來換的.



citywar 3D Engine Editor 1.0 發布

citywar  3D Engine Editor 1.0 發布

也提供販售完整的程式碼 跟技術轉移   e-mail: houpito@gmail.com

秉持  用簡單的方法解決複雜的問題.    所以這是一個看不到編輯畫面的編輯器

就是一次只能做一件事 的編輯器.

編輯器下載:(38mb)

https://app.box.com/s/c3xpcrlbyi4cvhx9jfml


只需要花個5分鐘   看一下 Editor說明.rtf  說明檔, 沒錯 只要5分鐘 就可完全掌握編輯器的功能了.

有任何問題可以在這裡留言

C++的friend關鍵字實現了軟體工程

很多書本教你的 不要使用 friend,  結果意外的被我發現新方法, 就是大量的使用friend.

因為我不寫繼承的, 所以會有很多class, 之前整理程式碼, 發現閱讀code有些費時,
不知要從哪裡下手.

突然閃過一個念頭, friend 根本是救星.

經過一個多月整理程式碼的心得:

這是程式碼裡的:

class CShadowRole
{
private:
//*** 這裡面有7個變數,  12個函數, 看起來也算蠻大的class ***//

    public:
    CShadowRole()
    {
        m_nRole=0;     for(int i=0; i<MAX_PLAYER; i++)m_szRole[i].pRole=NULL;
    }

    friend class CGame;
    friend void interface_ShadowRole_AddRole( class  CViewFrustum *pCull, class CMyRole *pMyRole, int idModel, BYTE wpn, float time );
};


看到沒有, public 只有一個 初始的, 剩下甚麼都沒有 有兩個 friend.
 
這樣的class幾乎是沒有用的, 但是那兩個 friend 就是重點了,
沒錯,  這個class CShadowRole 只在 class Game裡面使用 跟那個函數裡使用
其他都不能使用.

這樣不是很清楚嗎? 一看到這個class 的宣告 就一目了然 這個 class的使用方法.

所有要存取 CShadowRole必須來這裡宣告firend 才可以使用.
就很容易看出class 彼此之間的關係.

---------------------------------------------------------------------------------------------------------
但是 上面是理想的狀態,  但是 有一個致命的缺點  就是會有一大串的friend,

這就沒有意義了.

-------------------------------------------------------------------------------------------------

所以C++的對於類別成員的封裝 太爛了 只有兩種 private, 跟 public.

應該再增加一個封裝的關鍵字: 也是取名叫做 friend.

宣告為 friend function 跟 friend class, 可以存取宣告 friend 跟public內的函數或是變數.


這樣  friend 真的就會實現 軟體工程的方法.