首先很對不起也很感謝我的微積分老師,李育杰老師!我的期末考沒考好,寫這個程式的動機是起於上微積分第11章時,z軸的積分,11章有很多奇形怪狀的三維函數圖形,老師就說了一句:你們可以寫程式來畫畫看,我小聲:不會耶= =,老師:喔!這樣喔……,沒了,所以我就開始研究了= =,之前的2D圖形用vb6就可以秒殺了,雖然我覺得老師的意思是用matlab來寫吧?但我比較喜歡用C++,這3維的世界沒那麼簡單,想說對寫遊戲也有幫助,所以就來研究了,本來想說在學期結束前寫出來的,沒想到我對C++了解的太少,果然是JAVA的三十五倍難,遇到了很多Linker ErrorComplier Error,沒辨法只好暫時停下腳步,先砍掉重練吧!之後!#@$!$%$ %#!,恩,終於C++入門了!所以突然不想看書了= =,就來把這個問題重新研究,這是我寫過最久的程式之一了,花了一個星期,主要是跟彭國倫作的這本「3D繪圖程式設計使用DirectX10.9OpenGL 2.0」取經的,有一半以上的程式碼都是從glib跟第4章的專案中抄來的,而我只有使用dx9來繪圖,裡面有些全域函式被我包成類別了,只是我覺得這些全域函式實在是太亂了一點,應該要用一些好記的名稱空間包裝一下會比較好的,總之這個程式的耦合度太高了,可以說是錯綜複雜了,應該要好好想想怎麼改會比較好一點,如果有人有更好的建議也歡迎分享,隨便大家玩吧!說真的,幾個主要類別的相關性與全域變數是有絕對關係的,不太好修改。
下載源碼:http://code.google.com/p/damody/downloads/list
記憶體版

顯卡版

操作:

fMaxX:X的最大範圍

fMinX:X的最小範圍

fMaxY:Y的最大範圍

fMinY:Y的最小範圍

please input CaclateString:要畫的的函數

可使用sin()cos()tan()exp()e^()abs()^指數、加+、減-、乘*、除/

acos asin atan ceil floor log sinh cosh tanh rand pi
x
y用小寫的xy表示,函數一定要加括號!

please input Grids Width:輸入長寬要幾格

輸入完以上資料後會產生出一個視窗,裡面有畫好的資料,以下是說明。

QWERTY鍵可以控制用什麼方法畫出。

非九宮鍵的123可以控制燈光,4可以關燈。

方向鍵上、下、左、右可以上下左右移動。

U鍵可以移動的快一點、J鍵可以移動的慢一點。

I可以往前移動、K可以往後移動。

滑鼠左鍵可以讓地圖原地旋轉、右鍵可以讓視角旋轉。

滑鼠滾輪可以放大縮小圖形。

關閉視窗後會顯示Do you want to Quit(y/n):問你要不要離開,只有按y會離開,按其它鍵會重新開始。

範例輸入:

Success InitDevice

Success InitRenderDX9

Success InitInput

please input fMinX fMaxX:-5 5

please input fMinY fMaxY:-5 5

please input CaclateString:sin(x)+cos(y)

please input Grids Width(1~255):60

Generate 60x60 grids

很神奇的程式只有36kb的大小= =還以為會很大的說?

顯卡版的我把打光移除了,因為顏色會被光照掉,哭哭= =


你可以得到類似這樣的圖形,如果輸出不如預期,可以用括號括多一點看看。

以下是我玩的一些圖:

 

 

 

 

 

 

讓地獄深紅的天亮 發表在 痞客邦 PIXNET 留言(0) 人氣()