Re: [問題] 想了解遊戲業者如何做跨平台遊戲

看板C_and_CPP作者 (我愛阿蓉)時間15年前 (2010/10/12 01:01), 編輯推噓9(9021)
留言30則, 9人參與, 最新討論串3/7 (看更多)
再請教一下 假如我要寫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)

10/12 01:57, , 1F
GL的腳色是提供既有的API, 讓AP designer知道當他想要做
10/12 01:57, 1F

10/12 01:58, , 2F
什麼效果的時候, 要組合哪些API並提供哪些data來完成.
10/12 01:58, 2F

10/12 01:59, , 3F
確實可以說DX/GL這些東西的誕生, 就是為了讓3D AP/eng
10/12 01:59, 3F

10/12 01:59, , 4F
的開發者不用費心去研究該如何和不同的HW/drv溝通以取得
10/12 01:59, 4F

10/12 01:59, , 5F
想要的繪圖效果.
10/12 01:59, 5F

10/12 02:00, , 6F
只是實作方式來看, 與其說GL lib把和driver溝通的東西都
10/12 02:00, 6F

10/12 02:00, , 7F
包裝好, 不如說GL spec就在那裡, 各家的HW/drv follow這
10/12 02:00, 7F

10/12 02:01, , 8F
個spec來實作.
10/12 02:01, 8F

10/12 02:30, , 9F
port GL很辛苦 那port Java 不就累到趴 哈哈
10/12 02:30, 9F

10/12 02:31, , 10F
本來就是 一層壓一層 API的目的就是向下管理resource
10/12 02:31, 10F

10/12 02:31, , 11F
向上提供一層抽象 貼近開發者的interface
10/12 02:31, 11F

10/12 02:32, , 12F
只是看effort在哪邊罷了
10/12 02:32, 12F

10/12 03:03, , 13F
是, 照你這種不從基礎打起的學法. 沒有 API 的確就沒
10/12 03:03, 13F

10/12 03:03, , 14F
辦法寫程式了
10/12 03:03, 14F

10/12 09:01, , 15F
確實基礎不好才來這邊討論呀
10/12 09:01, 15F

10/12 11:59, , 16F
不對,你應該先念書
10/12 11:59, 16F

10/12 12:00, , 17F
討論區無法給你系統化的知識,這邊的資訊都非常零碎
10/12 12:00, 17F

10/12 13:36, , 18F
不過目前我不知道哪種書籍有討論這些耶~ @@
10/12 13:36, 18F

10/12 13:42, , 19F
應該說 想知道的太多又廣 卻不知道可從哪裡得知...
10/12 13:42, 19F

10/12 14:06, , 20F
基礎沒打好看太深的書也看不懂
10/12 14:06, 20F

10/12 14:32, , 21F
所以就不知從何開始呀= = 且下班到家也都11.以後了...掙扎
10/12 14:32, 21F

10/12 15:17, , 22F
assembly, computer organization, OS
10/12 15:17, 22F

10/12 22:39, , 23F
那就先從工作用得到的方向又有興趣深入進階的topic去學
10/12 22:39, 23F

10/12 22:40, , 24F
習吧, 至少某種角度看起來投資報酬率會高一點....XD
10/12 22:40, 24F

10/12 22:40, , 25F
我會選擇先想盡辦法,換個早點下班的工作
10/12 22:40, 25F

10/12 22:41, , 26F
不然早晚過勞死
10/12 22:41, 26F

10/12 23:30, , 27F
做個簡單遊戲,在Windows/Linux跑起來一樣 就有感覺了..XD
10/12 23:30, 27F

10/12 23:31, , 28F
過程中應該會有好幾次重構,慢慢將一些東西分層
10/12 23:31, 28F

10/13 00:02, , 29F
不知道GLUT用法在linux上與在windows有沒有啥不同XD
10/13 00:02, 29F

10/14 23:54, , 30F
都一樣,只是有些呼叫可省不可省有差 XD
10/14 23:54, 30F
文章代碼(AID): #1CiqBSUl (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1CiqBSUl (C_and_CPP)