看板 C_and_CPP 關於我們 聯絡資訊
再請教一下 假如我要寫windows平台... 也許是在WM_PAINT呼叫engine的render(); 而linux平台不熟 但應該不是像windows平台這樣寫法 是message based的嗎我也不確定... 遊戲engine有辦法把這塊也包起來嗎??? programmar不管哪個平台 開個空專案就可以直接拿engine來寫遊戲 另外就我自己了解 Windows要和driver溝通是透過win32 deviceiocontrol 所以render(){#ifdef WINDOWS 這邊可以用這win32 API去和driver溝通...} 所以#else 那邊就是呼叫linux平台可以和driver溝通的api嗎? 所以上層再用render()就不用管哪平台? 如果是使用opengl的話 opengl的腳色就是把跟driver溝通的這段包好 讓我們在實做render()的時候不用費心去處理和driver溝通嗎 所以我可以說opengl算是一套library 一個middle-ware 算是把跟Driver溝通的部分 都處理好~~~的API(API定義還是無法真正理解 常常不知道function和API怎麼區隔 好像都通.....)? 假如說 沒有了opengl這個middle-ware 我們一般人有辦法自己去實作這一段嗎(需要和nvidia之類的合作才有可能?) 現在總覺得程式要寫是OK 但想了解來龍去脈 越想是越迷惘 每次都想著 如果我沒API 那我是不是就不會寫程式了..... 請教各位= = 感謝 ※ 引述《littleshan (我要加入劍道社!)》之銘言: : 比較漂亮的作法: : class Renderer { // 某個處理繪圖用的 abstract class : public: : virtual void render(const Scene& scene) = 0; // 把場景畫出來 : }; : class RendererD3D9 : Renderer { : public: : void render(const Scene& scene) : { : // 使用 DirectX 進行繪圖 : } : }; : class RendererGL : Renderer { : public: : void render(const Scene& scene) : { : // 使用 OpenGL 進行繪圖 : } : }; : 比較醜但是直接的做法 : void Render(const Scene& scene) : { : #ifdef USE_OPENGL : // 使用 OpenGL 進行繪圖 : #else : // 使用 DirectX 進行繪圖 : #end : } : 說穿了也沒什麼神奇的 : 當然其中也有一些技巧就是了 (比如 abstract factory pattern) -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 123.192.70.221 ※ 編輯: QQ29 來自: 123.192.70.221 (10/12 01:02)
VictorTom:GL的腳色是提供既有的API, 讓AP designer知道當他想要做 10/12 01:57
VictorTom:什麼效果的時候, 要組合哪些API並提供哪些data來完成. 10/12 01:58
VictorTom:確實可以說DX/GL這些東西的誕生, 就是為了讓3D AP/eng 10/12 01:59
VictorTom:的開發者不用費心去研究該如何和不同的HW/drv溝通以取得 10/12 01:59
VictorTom:想要的繪圖效果. 10/12 01:59
VictorTom:只是實作方式來看, 與其說GL lib把和driver溝通的東西都 10/12 02:00
VictorTom:包裝好, 不如說GL spec就在那裡, 各家的HW/drv follow這 10/12 02:00
VictorTom:個spec來實作. 10/12 02:01
softwind:port GL很辛苦 那port Java 不就累到趴 哈哈 10/12 02:30
softwind:本來就是 一層壓一層 API的目的就是向下管理resource 10/12 02:31
softwind:向上提供一層抽象 貼近開發者的interface 10/12 02:31
softwind:只是看effort在哪邊罷了 10/12 02:32
king19880326:是, 照你這種不從基礎打起的學法. 沒有 API 的確就沒 10/12 03:03
king19880326:辦法寫程式了 10/12 03:03
QQ29:確實基礎不好才來這邊討論呀 10/12 09:01
littleshan:不對,你應該先念書 10/12 11:59
littleshan:討論區無法給你系統化的知識,這邊的資訊都非常零碎 10/12 12:00
QQ29:不過目前我不知道哪種書籍有討論這些耶~ @@ 10/12 13:36
QQ29:應該說 想知道的太多又廣 卻不知道可從哪裡得知... 10/12 13:42
stupid0319:基礎沒打好看太深的書也看不懂 10/12 14:06
QQ29:所以就不知從何開始呀= = 且下班到家也都11.以後了...掙扎 10/12 14:32
littleshan:assembly, computer organization, OS 10/12 15:17
VictorTom:那就先從工作用得到的方向又有興趣深入進階的topic去學 10/12 22:39
VictorTom:習吧, 至少某種角度看起來投資報酬率會高一點....XD 10/12 22:40
purpose:我會選擇先想盡辦法,換個早點下班的工作 10/12 22:40
purpose:不然早晚過勞死 10/12 22:41
mingtai1:做個簡單遊戲,在Windows/Linux跑起來一樣 就有感覺了..XD 10/12 23:30
mingtai1:過程中應該會有好幾次重構,慢慢將一些東西分層 10/12 23:31
VictorTom:不知道GLUT用法在linux上與在windows有沒有啥不同XD 10/13 00:02
Bencrie:都一樣,只是有些呼叫可省不可省有差 XD 10/14 23:54