VC下编程实现3D文字[组图]
提起3D文字制作,不少人会马上想到3D MAX等一些专门的3维制作工具,即使选用VC以编程的手段来实现也多是假手于OpenGL图形开发库来完成。熟悉OpenGL开发的编程人员一定对其初始化、材质以及灯光的渲染等一系列烦琐而又必要的编程过程深有感触。虽然通过以上的手段可以产生出包括3D文字在内的质感相当强的3维图形,但如果程序仅需要产生不很复杂的3D文字,而采用OpenGL去实现未免显得大材小用。其实在要求不很苛刻的情况下,完全可以通过MFC提供的CFont类制作出层次感较强的3D文字,其实现过程要比OpenGL简练得多。
实现原理
计算机屏幕是平面二维的,我们之所以能欣赏到真如实物般的三维图像,是因为显示在计算机屏幕上时色彩灰度的不同而使人眼产生视觉上的错觉,而将二维的计算机屏幕感知为三维图像。基于色彩学的有关知识,三维物体边缘的凸出部分一般显高亮度色,而凹下去的部分由于受光线的遮挡而显暗色。这一认识被广泛应用于网页或其他应用中对按钮、3D线条的绘制。对于本文所要绘制的3D文字同样也适用,即在原始位置显示高亮度颜色,而在左下或右上等位置用低亮度颜色勾勒出其轮廓,这样在视觉上便会产生3D文字的效果。具体实现时,可用完全一样的字体在不同的位置分别绘制两个不同颜色的2D文字,只要使两个文字的坐标合适,就完全可以在视觉上产生出不同效果的3D文字。
具体实现
在实现3D文字时一般不使用缺省的字体设置,而是通过对字体的设置而使产生的3D文字在视觉上更美观。在使用CFont类时,首先要通过其成员函数CreateFontIndirect根据预先设定好的LOGFONT结构来初始化CFont对象:
CFont m_font;
……
m_font.CreateFontIndirect(&lf);
其参数为一个指向LOGFONT结构的指针。LOGFONT结构主要定义了字体的属性,其定义可通过MSDN帮助查到:
typedef struct tagLOGFONT {
LONG lfHeight;
//字符字体高度
LONG lfWidth; //字符平均宽度
LONG lfEscapement;
//文本行逆时针旋转角度
LONG lfOrientation; //字体角度
LONG lfWeight; //字体粗细程度
BYTE lfItalic; //倾斜
BYTE lfUnderline; //下划线
BYTE lfStrikeOut; //删除线
……
} LOGFONT;