伊莉討論區

標題: 用c語言寫3D遊戲問題 [打印本頁]

作者: qwerty30112    時間: 2011-12-31 05:31 PM     標題: 用c語言寫3D遊戲問題

在windows下,3d遊戲大部分都用到directx的函式庫,但是能不能不用那個就寫出來呢?如果我用c語言mingw的compiler編譯,程式裡面用到windows的api,那這樣能不能寫出3d遊戲?
作者: rik00    時間: 2011-12-31 09:55 PM

Windows 的API沒有3D相關的API喔! (記憶中)
3D的API最重要的是利用顯示卡的硬體幫你做矩陣運算。

當然,如果你完全依賴CPU的演算速度,搭配 3D相關算圖的動作也使用C語言去寫.....
理論上應該也是能達到。但這樣要怎麼寫,我自己也不知道....
就好像用組語理論上可以寫出任何程式,但真要去寫,完全不知道從何開始啊!

題外話,如果你討厭direct x,也可以使用Open GL啊XDD
作者: goodbye_mylove    時間: 2011-12-31 11:43 PM

你可以!前提是要有 3D 影像圖形學、影像處理之相關理論基礎,
但如果你不用 DirectX 或 OpenGL ,
要開發 3D 遊戲,最後可能會是自己寫一個小型的遊戲引擎出來。

就像線性代數,有學過的人都知道怎麼解所有的 matrix
( 像是 eigenvalue、linear equ. 等),
但實際上用 C 寫完整時,這和開發一套 Matrix 函式庫沒兩樣,
很花時間,且效率很糟,故大多數實用時,
還是評估一套函式庫回來用。

math library 是這樣,影像處理也為如此,慎思!
作者: swordsmes    時間: 2012-1-1 01:51 AM

可以,
但是工程很浩大
等於你不用別人寫好的資源
重新開一個像directx.Open GL相關的塗姓處理函數庫
關於影像處理的基礎之是要很深
你是想要開發一個遊戲引擎嗎?
最好先評估一下
作者: rik00    時間: 2012-1-1 07:43 PM

所以這樣的寫法有辦法用到硬體資源嗎?  (不用透過OpenGL、Direct X?)

說到遊戲引擎... 就算使用OpenGL、Direct X 不也同樣需要寫出類似引擎的東西?
例如回圈更新畫面每個3D物品的動作....

關於這兩點有點好奇!!
如果真的有使用OpenGL、Direct X就不用寫引擎的資料,可以提供一下嗎?
( 一直覺得連最簡單的更新管理都不太好寫.... )


所以遊戲引擎沒有使用到OpenGL、Direct X!? (小驚訝
想說買遊戲時,上面常常要求至少Direct X 10以上之類的訊息...
作者: goodbye_mylove    時間: 2012-1-1 08:42 PM

回復 5# rik00
可能我表達不清晰,造成一些誤解。
也由於本身對遊戲開發沒經驗 (連玩遊戲也沒興趣),
但看過一些文章探討與瀏覽過一些書 ,
(這裡瀏覽意思是一字一字看,有跑  project ,但沒深入探討與實作)
提供一些知道的東西做參考。

有意見請不吝補充;有誤請不吝幹譙。

所以這樣的寫法有辦法用到硬體資源嗎?  (不用透過OpenGL、Direct X?)


1. Windows 透過 COM componment (其它 os 就真不知怎做)
2. 硬體提供之供應商可能會附一組 api, 有名的像 CUDA。

說到遊戲引擎... 就算使用OpenGL、Direct X 不也同樣需要寫出類似引擎的東西?
例如回圈更新畫面每個3D物品的動作....


這是對的,目前遊戲引擎大多建立於一些基礎之 API 之上,確實也必須有些
硬體層之 API 做為連結,如 mouse、keyboard、網卡、音效卡、顯卡等,
實力強的話可透過 Win32 API 及 COM componment 硬兜起來,這樣的投資
報酬率不是很高。而 Direct3D、OpenGL 這兩套主要封裝了 GPU 與顯卡部份,
其他部份是否有封裝不甚確定,而 DirectX 就我所知,就封裝了
mouse、keyboard、網卡、音效卡 等部份 (沒提到是我知識淺,不代表一定沒有)。

至於 Direct3D、OpenGL、DirectX 等,彼此間的戰役從以前到現在就一直持續,
特別是 DirectX 與 OpenGL,即使文章提出了某一個數據優於另一個,
但另一派往往會提出測試環境之質疑,此處不做優劣評論與筆戰之爭,
有興趣二個 keyword 一起下去 google,很多戰文會讓人不知如何分辨。

關於這兩點有點好奇!!
如果真的有使用OpenGL、Direct X就不用寫引擎的資料,可以提供一下嗎?
( 一直覺得連最簡單的更新管理都不太好寫.... )


這應該是直接去學 DirectX 怎麼用,和一些計算機圖形學吧?
遊戲引擎不就是把一系列常用到的 3D 遊戲函式庫,以較底階之 API 再封裝起來嗎?
念一本書應該是沒什麼效果,"嘴炮" 的認為是
先學 Direct3D、OpenGL、DirectX 其中一套,
再去看一般遊戲引擎之 design pattern 或技巧等 
(所以至少要 k 過一套遊戲引擎之 api 如何設計),
最後用再自己的巧思,發展一套小型之遊戲引擎 
(最後重點還是圍繞在效能問題)。

有一陣子 K DirectX ,這二本書還不錯:

Graphics Programming with DirectX 9 Module II
這本書的背景知識也很深,比一本日曆還厚,會以 DirectX 架構出 3D 的遊戲出來

C++ -Game  Programming RPGs With DirectX
這本書比較適合 DirectX 幼幼班,動畫效果沒上一本來得好。比一本日曆還厚,但只有上一本書的一半厚度。


想要直接砍的話, Crystal Space 是 3D 遊戲引擎之開放原始碼,
有興趣、有恆心、自認 C++ 還不錯,
可到 SourceForge 或 Crystal Space 官網 下載看看。

所以遊戲引擎沒有使用到OpenGL、Direct X!? (小驚訝
想說買遊戲時,上面常常要求至少Direct X 10以上之類的訊息...


就是因不拿 OpenGL 、DirectX 開發時,開發速度會更慢,所以才挑一套出來用。
( 有多餘時間的話,寧可花在遊戲引擎上,而不願花時間在底層 api 上 ,
   因遊戲引擎才是主軸)
所以那款遊戲是以 DirectX 主軸所發展,
但不代表那遊戲在開發時一定會用到市面上常見之遊戲引擎,
也可能是公司內部基於 DirectX、OpenGL 或其它較低層之 API 自行開發遊戲引擎。

淺見,參閱。
作者: qwerty30112    時間: 2012-1-2 11:08 AM

關於rik00大大說的「3D的API最重要的是利用顯示卡的硬體幫你做矩陣運算。」我有點問題。
用winapi寫的為什麼不會用顯示卡硬體運算呢?
那3d api又是怎麼寫的,才會用顯示卡硬體運算。
作者: qwerty30112    時間: 2012-1-2 11:17 AM

補充一下,不管是3d還是幾d,我覺得只要有畫一個點的函數,理論上應該可以寫出任何圖形函數。不過這樣很慢,所以可以先在記憶體設定好大量的點,然後一次畫到螢幕上,這樣看來,好像真的都是在cpu運算,那怎樣才是用顯示卡的硬體運算呢
作者: goodbye_mylove    時間: 2012-1-2 09:08 PM

我覺得只要有畫一個點的函數,理論上應該可以寫出任何圖形函數。不過這樣很慢

重點就是很慢,3D 遊戲在做運算時用到很多浮點數運算及矩陣運算,
這裡會相當費時,然而顯卡就是針對這部份進行加速過之優化運算,
與使用 cpu 硬暴速度差不少。

顯示卡的硬體運算呢

就是使用顯卡提供的 api,上面我說過了,如 cuda,
這支函式庫有綁定硬體,也就是只有某些顯卡才可調用,
且 cuda 必須額外安裝。
作者: qwerty30112    時間: 2012-1-2 10:34 PM

但是directx好像沒有針對不同顯示卡而有不同版本,那它又怎麼可以控制不同的顯示卡?
作者: goodbye_mylove    時間: 2012-1-3 12:05 AM

回復 10# qwerty30112


控制硬體說過了,可以調用 Com componment 完成,
( 我開始懷疑我 6F 的回答是不是白打了..)
DirectX 可以和硬體溝通,顯卡只是其中一個硬體。
作者: rik00    時間: 2012-1-3 12:31 AM

但是directx好像沒有針對不同顯示卡而有不同版本,那它又怎麼可以控制不同的顯示卡?
qwerty30112 發表於 2012-1-2 10:34 PM



關於OpenGL、DirectX 可以控制,支援他們的顯示卡。(買顯示卡時,盒子上會寫。)
因為是顯示卡的驅動程式去配合OpenGL、DirectX 的API。
(不是反過來喔~)


至於前面提到的矩陣運算速度。
當程式還是 a1*b1 + a2*b2 ...一堆乘法、加法計算的時候。
顯示卡一次就算出來了!

9*9 = 81       <-- 顯示卡GPU計算
與 9+9+9..... <-- CPU計算
這種感覺.....

要更直覺一點的差異就是....
裝上新的顯示卡後,不要安裝驅動程式,那種討厭的延遲感.... (只會比那個更慢)
作者: qwerty30112    時間: 2012-1-3 10:01 AM

9*9 = 81       <-- 顯示卡GPU計算
9+9+9..... <-- CPU計算
這個說法感覺不太正確耶,我覺得cpu應該也有乘法電路,不是用加法迴圈算乘法。
作者: qwerty30112    時間: 2012-1-3 10:02 AM

那用c語言怎麼使用顯示卡比較高階的指令呢?除了使用別人寫好的函式庫




歡迎光臨 伊莉討論區 (http://a401.file-static.com/) Powered by Discuz!