三維視圖的真實感較強,很多人比較喜歡。
笨笨在CChart中實現了好幾種類型的三維視圖。
其中一種是在普通折線圖的基礎上修修補補而成的假3D視圖,這個3D不是真的3D,不過也很有用,笨笨用它來畫瀑布圖,效果非常好。
另外兩種三維視圖是真3D,采用了OpenGL。第一種真三維視圖是3D折線圖,第二種真三維視圖是3D曲面圖。
目前3D曲面圖還有點缺點,主要是笨笨不太熟悉OpenGL。笨笨想用紋理貼圖實現曲面的顏色變化,但還沒有做好,這裡就不獻丑了。如果那位同學可以幫助笨笨實現用Z坐標設置曲面的顏色,笨笨感激不盡。
本節課笨笨向大家介紹3D折線圖,仍然是一個實例。
請按照第一課的方法,建立一個VC6工程Lesson14。
由於要是用數學庫,在Lesson14.cpp頭部加上頭文件引用。
#include <math.h>
下面填寫WM_CREATE的響應例程如下。
case WM_CREATE: chartWnd.Attach(hWnd, kType3DLine); { int i; int nNum = 1080; double *pX, *pY, *pZ; pX = new double[nNum]; pY = new double[nNum]; pZ = new double[nNum]; for(i=0; i<nNum; i++) { pX[i] = 2.0*3.1415926536*i/nNum*5; pY[i] = cos(pX[i]); pZ[i] = sin(pX[i]); } chartWnd.GetChart()->AddCurve(pX, pY, pZ, nNum); for(i=0; i<nNum; i++) { pX[i] = (i-nNum/2.0)/nNum*2.0; pY[i] = pX[i]*pX[i]; pZ[i] = pY[i]*pX[i]; } chartWnd.GetChart()->AddCurve(pX, pY, pZ, nNum); delete []pX; delete []pY; delete []pZ; } chartWnd.GetChart()->SetTitle(_TEXT("測試3D曲線")); break;
運行程序,效果如圖。
由於是OpenGL實現的真3D圖像,用鼠標拖動圖像運動可以看到3D效果,下圖是拖動過程中的某個狀態。
可以看到,所有的圖形和文字都是懸浮在空間中的,坐標平面不透明,呵呵。
本課簡單介紹了CChart的三維視圖功能,現在下課。