Object Hierarchy | 関連する C++クラス:CColor
v1.0
Color オブジェクトは、RGBA カラーを表します。RBGA コンポーネント値は、倍精度数として格納されます。
注:コンポーネント値が符号付き単精度値より大きい場合、コンポーネント値は負の値として解釈されます。ほとんどの場合、コンポーネント値は 0~1 の範囲で正規化されます。TrianglePoint.Colorは例外で、0~ 255 の範囲の値を戻します。
他の Softimage オブジェクトおよびプロパティは別の方法でカラーを保存します。
- Shader および Softimage オブジェクトには、カラー コンポーネントごとに別個の Parameter オブジェクトがあります(たとえば、「Scene_Material.Phong.diffuse.Green」)。これらのコンポーネント値は正規化され、倍精度が使用されます。
- バーテックスカラープロパティは、ClusterProperty 内で倍の配列としてカラーコンポーネント値を格納します。
- ワイヤフレームカラーは、10ビット値(0~ 1023)としてエンコードされます。最下位ビットは無視されます。R、G、B の各チャンネルは、3 ビット(0~7 の数値)で、ワイヤフレームカラーは B2|B1|B0|G2|G1|G0|R2|R1|R0|0|としてエンコードされます。
/* This example shows how to create a tool for changing the wireframe color of an object and how to map an RGB color to a wireframe color. */ CreateColorizeTool(); function CreateColorizeTool() { var color_tool = ActiveSceneRoot.Properties("ColorizeTool"); if (!color_tool) { var color_tool = ActiveSceneRoot.AddCustomProperty( "ColorizeTool" ); var wirecolor = color_tool.AddParameter( "wirecolor", siInt4 ); wirecolor.ReadOnly = true; var r = color_tool.AddParameter( "R", siDouble ); var g = color_tool.AddParameter( "G", siDouble ); var b = color_tool.AddParameter( "B", siDouble ); var a = color_tool.AddParameter( "A", siDouble ); var layout = color_tool.PPGLayout ; layout.AddRow(); var item = layout.AddItem( "wirecolor", "wirecolor" ); item.SetAttribute( "NoSlider", true ); layout.AddButton( "ColorizeObject", "Colorize object" ); layout.EndRow(); layout.AddGroup( "Color" ); item = layout.AddColor( "R", "",true ); item.SetAttribute( "NoLabel", true ); layout.EndGroup(); layout.Language = "JScript" ; layout.Logic = ColorizeTool_R_OnChanged.toString() + ColorizeTool_G_OnChanged.toString() + ColorizeTool_B_OnChanged.toString() + RGBToWireframeColor.toString() + ColorizeTool_ColorizeObject_OnClicked.toString(); layout.SetAttribute( "LogicPrefix", "ColorizeTool_" ) ; } InspectObj( color_tool, "Colorize Tool", "", siLock ); } function ColorizeTool_R_OnChanged() { PSet.wirecolor.ReadOnly = false; PSet.wirecolor.Value = RGBToWireframeColor(PSet.R.Value,PSet.G.Value,PSet.B.Value); PSet.wirecolor.ReadOnly = true; } function ColorizeTool_G_OnChanged() { PSet.wirecolor.ReadOnly = false; PSet.wirecolor.Value = RGBToWireframeColor(PSet.R.Value,PSet.G.Value,PSet.B.Value); PSet.wirecolor.ReadOnly = true; } function ColorizeTool_B_OnChanged() { PSet.wirecolor.ReadOnly = false; PSet.wirecolor.Value = RGBToWireframeColor(PSet.R.Value,PSet.G.Value,PSet.B.Value); PSet.wirecolor.ReadOnly = true; } function ColorizeTool_ColorizeObject_OnClicked() { var color = PSet.wirecolor.Value; var o = null; var siRMB = 0; var button = -1, modifier; while ( o==null && button != siRMB ) { Application.StatusBar ="Pick object to colorize"; var rtn = PickObject( "Select object", ""); o = rtn.Value("PickedElement"); button = rtn.Value("ButtonPressed"); modifier = rtn.Value("ModifierPressed"); } if ( button == siRMB ) return; var display = o.Properties("Display"); if (display.isa(siSharedPSet)) { display = MakeLocal( display, siNodePropagation )(0); } display.wirecol.Value = color; return color; } // Convert wireframe color index to double-precision RGB color function WireframeColorToRGB(lWireframeColor) { var aColor = new Array(3); aColor[0] = ((lWireframeColor >>> 1) & 0x7)/7; aColor[1] = ((lWireframeColor >>> 4) & 0x7)/7; aColor[2] = ((lWireframeColor >>> 7) & 0x7)/7; return aColor; } // Convert double-precision RGB color to wireframe color index function RGBToWireframeColor(dR,dG,dB) { // Convert RGB to wirecolor var wirecolR, wirecolG, wirecolB; wirecolR = (Math.round(dR * 7)) << 1 wirecolG = (Math.round(dG * 7)) << 4 wirecolB = (Math.round(dB * 7)) << 7 return wirecolR | wirecolG | wirecolB; } |
set oSpot = GetValue("Scene_Root").AddLightRig("Spot").Light set oColor = oSpot.OGLLight.Color Application.LogMessage "color: " & oColor.Red & ", " & oColor.Green & ", " & oColor.Blue & ", " & oColor.Alpha |