開車加入光影材質…
http://www.asn.com.tw/flex/cardrive/CarDriver3.html
幾種加入光影材質的方式…
在PV3D 裡面有所謂的 shadematerial,用來產生會按照光源反應出明暗變化的效果的材質,在使用上很方便,只需產生一個點光源,再利用它來 new 出一個 ShadeMaterial,再賦予物件使用。
最簡單的像是 org.papervision3d.materials.shadematerials 底下的 FlatShadeMaterial …
private function foo():void
{
var light:PointLight3D = new PointLight3D();
var shaderMaterial:FlatShadeMaterial = new FlatShadeMaterial( light, 0x123456, 0x000000 );
var plane:Plane = new Plane(shaderMaterial,500,500);
}
但有時會需要用貼圖的方式來生成物件的表面紋理,比較像真,這時要透過 shader 來重新製作俱備貼圖的 ShadedMaterial…
[Embed(source="assets/photo.jpg")]
private var bmpAsset:Class;
private function foo():void
{
var light:PointLight3D = new PointLight3D();
var yourBitmap:Bitmap = new bmpAsset() as Bitmap;
var bitmapMaterial:BitmapMaterial = new BitmapMaterial(yourBitmap.bitmapData);
var shader:FlatShader= new FlatShader( light, 0xffffff, 0x333333);
var shaderMaterial:ShadedMaterial = new ShadedMaterial(bitmapMaterial, shader);
plane = new Plane(shaderMaterial,500,500);
}
上面是靜態讀圖的作法,但是若是透過 BitmapFileMaterial 動態即時讀圖檔,卻會失敗…
private function foo():void
{
var fileMaterial:BitmapFileMaterial = new BitmapFileMaterial("assets/FocusBody.jpg");
/// after FileLoadEvent.LOAD_COMPLETE ....
var light:PointLight3D = new PointLight3D();
var shader:FlatShader = new FlatShader(light, 0xFFFFFF, 0x333333);
var shaderMaterial:ShadedMaterial = new ShadedMaterial(fileMaterial, shader);
var plane:Plane = new Plane(shaderMaterial,500,500);
}
因為 BitmapFileMaterial 並不是 BitmapMaterial 的子類別 ~"~,所以要稍微轉一下…
private function foo():void
{
var fileMaterial:BitmapFileMaterial = new BitmapFileMaterial("assets/FocusBody.jpg");
/// after FileLoadEvent.LOAD_COMPLETE ....
var light:PointLight3D = new PointLight3D();
var shader:FlatShader = new FlatShader(light, 0xFFFFFF, 0x333333);
var bitmapMaterial:BitmapMaterial = new BitmapMaterial( fileMaterial.bitmap );
var shaderMaterial:ShadedMaterial = new ShadedMaterial(bitmapMaterial, shader);
var plane:Plane = new Plane(shaderMaterial,500,500);
}
另外要注意,Cube 六面體若是要使用 ShadedMaterial 的話,六面都要 new 個新 shader 給它,否則會有三角形黑色塊產生 = =",很麻煩,而且跑起來非常秏效能。
org.papervision3d.materials.shader 底下還有很多種不同的 shader 可以使用,效果皆不同…
FlatShader
PhongShader
CellShader
EnvMapShader
GouraudShader
…
訂閱:
張貼留言 (Atom)
更高效處理 micro second 的方式
更高效處理 micro second 的方式… 以 STM32 為例… __IO unsigned long sys_tick = 0; void SysTick_Handler(void) { HAL_IncTick(); sys_tick += (SysTi...
-
rails blog -d mysql 建立一個名為 blog 的網站app,使用 mysql cd blog 進去 gen 好的網站 config/database.yml 編輯資料庫設定 rake db:create 自動建立資料庫 ruby script/generate ...
-
https://github.com/ljean/modbus-tk/ install pip… sudo apt-get install python-pip install... download modbus_tk-x.x.x.tar.gz tar zxvf...
-
DMX protocol… # 1:break + 1:start + 512:channel python: import serial class DMX512: def __init__(self, port): self.seria...
沒有留言:
張貼留言