QT3D给我们提供了一些基本的3D形状,比如圆环,圆柱,球,圆台,平面,立方体等。今天我通过一个QT提供的圆环体演示一下怎么来进行Entity(物体)的光照颜色控制。
先贴上相关代码,在下面解读一下。
//! [2] //QPhongMaterial提供默认实现的光照效果;
Qt3DExtras::QPhongMaterial *torusMaterial = new Qt3DExtras::QPhongMaterial();
torusMaterial->setDiffuse(QColor(QRgb(0xbeb32b))); //原程序设置为土黄色
// setDiffuse,setA..,setS..这3个方法可以对物体的颜色等进行设置,具体效果看测试图
// torusMaterial->setDiffuse(QColor(QRgb(0xffffff))); //测试1,白色D
// torusMaterial->setAmbient(QColor(QRgb(0xffffff))); //测试2,白色A
// torusMaterial->setSpecular(QColor( QRgb(0xffffff)) ); //测试3,白色S
// torusMaterial->setDiffuse(QColor(QRgb(0xbeb32b))); //测试4,土黄D
// torusMaterial->setAmbient(QColor(QRgb(0xbeb32b))); //测试5,土黄A
// torusMaterial->setSpecular(QColor( QRgb(0xbeb32b)) ); //测试6,土黄S
// setShiness()用于设置物体表面的粗糙/反光程度,float类型,数值越大越光滑
// torusMaterial->setShininess(0.0f); //测试7
// torusMaterial->setShininess(100.0f); //测试8
// torusMaterial->setShininess(1000.0f); //测试9
//! [2]
我new了一个QPhongMaterial对象,这是个什么东西呢?这是QT提供的一个默认的光照效果,不进行其他设置的画默认是白色半粗糙的效果。这个对象可以进行一些设置,在下面我对其属性做了一次其他的设置,我们对照着测试结果来看一下:
对照help文档的说明和测试结果,我把我对这几个方法的个人理解说一下:
Diffuse是类似漫反射,也就是粗糙表面;
Ambient是在没有(或者说不考虑)其他光源的影响的情况下,物体本身的颜色。也就是你设置什么颜色就是什么颜色;
Specular是镜面反射,也就是说像一面镜子,你给的光什么颜色它就呈现什么颜色(已经验证过)
(所以对其设置颜色并没有用,不过设置为纯黑会有一些其他变化,比如在白光下是白色的,但是不会反射任何光线,也即看起来粗糙)
最后是一个setShininess(float xx);方法,这个是用来设置粗糙或者说反光程度的(原谅我不知道用什么专业词汇表达),对照实验结果很容易理解;
(需要补充的是,这个设置可以和上面的3者一起使用,会有很有趣的结果,具体怎么样就自己去试试吧)。
我的学习之路可能要过阵子再来写了,等真的透彻之后,免得误导了各位朋友。