個人原創,歡迎轉載,轉載請註明地址,專欄地址http://blog.csdn.net/bill_man
3D遊戲中光照對於遊戲效果佔有舉足輕重的作用,也是與2D遊戲的重要區別。cocos引擎也提供了完善的光效效果支持。
光照就是光源照到物體上的效果,cocos引擎支持四種光源,繼承自Node類,也就是說可以作爲子節點防止到場景裏,四種光源的基類是BaseLight,它是所有燈光的基類,cocos2d-x支持4種燈光,環境光、方向光、點光源和聚光燈。每個燈光都有一個燈光標記lightflag, 只有當物體的燈光掩碼lightmask與(1<<lightFlag)做與運算不爲0的時候這個物體纔會被該燈光照亮。
環境光(AmbientLight)是不來自任何特定方向的光,在整個場景中經典光照模型把它當作一個常量,組成一個合適的第一近似值來縮放場景中的光照部分。計算這個光照並不涉及任何關於光源方向或者眼睛觀察場景的方向,它也可以當成積累每個光源的基礎貢獻值或者當成預先計算的單一全局效果。
使用方法
_ambientLight = AmbientLight::create(Color3B(200, 200, 200));
_ambientLight->retain();
_ambientLight->setEnabled(true);
addChild(_ambientLight);
_ambientLight->setCameraMask(2);
參數就是光的顏色,作爲子節點加入到場景中就可以了
方向光(DirectionLight)是一個無限遠的光源,他可以與我們表面上所有的點近似有相同的方向。這樣的假設簡化了數學運算,因此方向光的實現代碼很簡單,比其他光源的運行速度更快,方向光的典型例子是太陽光。
使用方法
_directionalLight = DirectionLight::create(Vec3(-1.0f, -1.0f, 0.0f), Color3B(200, 200, 200));
_directionalLight->retain();
_directionalLight->setEnabled(false);
addChild(_directionalLight);
_directionalLight->setCameraMask(2);
第一個參數是方向,方向光的方向就是燈光的局部座標系的-z方向,第二個參數是顏色。
點光源(PointLight)是模擬靠近場景或者在場景中的光源,就像電燈或者路燈。點光源和方向光有兩個區別,一是點光源表面的光源方向都是不同的,二是表面接收的光源會隨着離光源的距離越遠而變少。
使用方法
_pointLight = PointLight::create(Vec3(0.0f, 0.0f, 0.0f), Color3B(200, 200, 200), 10000.0f);
_pointLight->retain();
_pointLight->setEnabled(false);
addChild(_pointLight);
_pointLight->setCameraMask(2);
第一個參數是光源位置,第二個是顏色
聚光燈(SpotLight)是一個強大的光束來照亮一個明確的區域,照射區域可以進一步通過在光源的側面使用擋板或者窗板的形狀來設置。
使用方法
_spotLight = SpotLight::create(Vec3(-1.0f, -1.0f, 0.0f), Vec3(0.0f, 0.0f, 0.0f), Color3B(200, 200, 200), 0.0, 0.5, 10000.0f);
_spotLight->retain();
_spotLight->setEnabled(false);
addChild(_spotLight);
_spotLight->setCameraMask(2);
參數分別是方向、位置、顏色、內徑,外徑和衰減範圍
需要說明的是sprite3D有一個setLightMask方法,用於設置哪個光照對它起作用,-1是所有光照都對它起作用(默認值),剩下的值就可以根據光源設置的setLightFlag的值來選擇特定的光源(LIGHT0-LIGHT15)
能力不足,水平有限,如有錯誤,歡迎指出。