三维视图的真实感较强,很多人比较喜欢。
笨笨在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的三维视图功能,现在下课。