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 |