1.2 色彩と材質
著者:梅谷 武
語句:色彩と材質にかかわる手法について記す。
語句:色彩と材質にかかわる手法について記す。
材質, D3DMATERIAL9構造体, RGB表色系, HSV表色系, テクスチャマッピング, 透明化, アルファブレンディング
作成:2010-09-28
更新:2011-03-08
更新:2011-03-08
3次元コンピュータグラフィックスにおいて図形に色を付けることは、図形を構成する各面の材質ざいしつ, materialを指定することに他ならない。DirectXの内部において、これはD3DMATERIAL9構造体D3DMATERIAL9こうぞうたいで定義される。
typedef struct _D3DMATERIAL9 { D3DCOLORVALUE Diffuse; // 拡散反射色(Dr,Dg,Db,Da) D3DCOLORVALUE Ambient; // 環境反射色(Ar,Ag,Ab,Aa) D3DCOLORVALUE Specular; // 鏡面反射色(Sr,Sg,Sb,Sa) D3DCOLORVALUE Emissive; // 発光色(Er,Eg,Eb,Ea) float Power; // 鏡面反射係数 } D3DMATERIAL9;
実際にレンダリングされたときの色は、この材質パラメータの他、照明の位置・方向と照明光のパラメータ、さらには視点・視方向・視野角から成るカメラパラメータによって決定される。
dxSetMaterial関数はDirectXに直接D3DMATERIAL9構造体の値を渡して、設定する関数である。
dxSetMaterial
書式 | dxSetMaterial(Dr,Dg,Db,Da,Ar,Ag,Ab,Aa,Sr,Sg,Sb,Sa,Er,Eg,Eb,Ea,power) |
SetMaterial関数は材質をLuaの配列として渡すようにしたものである。
SetMaterial
書式 | SetMaterial( 材質配列 ) |
幾何ライブラリには次の材質配列が既定値として定義されている。
emerald jade obsidian pearl ruby turquoise brass bronze chrome copper gold silver plastic_black plastic_cyan plastic_green plastic_red plastic_white plastic_yellow rubber_black rubber_cyan rubber_green rubber_red rubber_white rubber_yellow
sample124.lua
package.path = "std/?.lua" require( "Geometry" ) SetMaterial( emerald ) dxTeapot() tnNewObject()
dxSetColor関数はRGB表色系RGBひょうしょくけい, RGB color systemにより材質を設定する。
dxSetColor
書式(1) | dxSetColor( R成分, G成分, B成分 ) |
書式(2) | dxSetColor( R成分, G成分, B成分, A成分 ) |
dxSetColor関数はHSV表色系HSVひょうしょくけい, HSV color systemにより材質を設定する。
dxSetColorHSV
書式(1) | dxSetColorHSV( H成分, S成分, V成分 ) |
書式(2) | dxSetColorHSV( H成分, S成分, V成分, A成分 ) |
sample125.lua
package.path = "std/?.lua" require( "Geometry" ) function Square() RotateZ( 45.0 ) RotateX( 90.0 ) dxPolygon( 0.6, 4 ) end for arg = 0.0, 345.0, 15.0 do PushMatrix() RotateZ( -arg ) Translate( 0.0, 3.5, 0.0 ) dxSetColorHSV( arg, 1.0, 1.0 ) Square() PopMatrix() end tnNewObject()
テクスチャマッピングてくすちゃまっぴんぐ, texture mappingはテクスチャ座標が設定されたメッシュに対してdxSetTexture関数によりテクスチャ画像を設定して行なう。一旦、dxSetTextureによりテクスチャ画像が設定されるとそれ以降の処理すべてでマッピングされるので、処理終了後、テクスチャをクリアしておくことが望ましい・
dxSetTexture
書式 | dxSetTexture( テクスチャ画像ファイル名 ) |
sample126.lua
dxSetColor( 0.8, 0.8, 0.8 ) dxSetTexture( "media/DSC_0036.JPG" ) HeightMesh( 0.0, 0.0, 1.0, 1.0, 4, 3, { 0.1, 0.2, 0.3, 0.2, 0.2, 0.3, 0.2, 0.1, 0.3, 0.2, 0.1, 0.0 } ) dxSetTexture( "" ) tnNewObject()
図形の透明化とうめいか, make transparentはアルファブレンディングあるふぁぶれんでぃんぐ, alpha blendingにより行なう。このためにはdxSetRenderState関数により、一時的にレンダリング状態を変更する。
アルファブレンディングは描画順序に依存し、完全な透明処理は実現できない。完全な透明処理が必要な場合はレイトレーシング法等を利用する。
dxSetRenderState
書式 | dxSetRenderState( デバイス状態名, 状態値 ) |
デバイス状態名と状態値の詳細については、MSDNのIDirect3DDevice9::SetRenderStateの項目を参照すること。幾何ライブラリにはDirectXのすべてのデバイス状態名と状態値が定義されている。
sample127.lua
package.path = "std/?.lua" require( "Geometry" ) function Square() RotateZ( 45.0 ) RotateX( 90.0 ) dxPolygon( 0.6, 4 ) end dxSetRenderState( D3DRS_ALPHABLENDENABLE, 1 ) dxSetRenderState( D3DRS_SRCBLEND, D3DBLEND_SRCALPHA ) dxSetRenderState( D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA ) PushMatrix() Translate( 0.0, 0.0, -0.5 ) dxSetColor( 0.8, 0.0, 0.0, 1.0 ) Square() PopMatrix() PushMatrix() Translate( 0.0, 0.0, 0.5) dxSetColor( 0.8, 0.8, 1.0, 0.5 ) Square() PopMatrix() dxSetRenderState( D3DRS_ALPHABLENDENABLE, 0 ) tnNewObject()
語 句
材質 ざいしつ, materialD3DMATERIAL9構造体 D3DMATERIAL9こうぞうたい
RGB表色系 RGBひょうしょくけい, RGB color system
HSV表色系 HSVひょうしょくけい, HSV color system
テクスチャマッピング てくすちゃまっぴんぐ, texture mapping
透明化 とうめいか, make transparent
アルファブレンディング あるふぁぶれんでぃんぐ, alpha blending
Published by SANENSYA Co.,Ltd.