Color

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|としてエンコードされます。

プロパティ

Alpha Blue Green Red

1. JScript の例

/*

	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;

}

2. VBScript の例

set oSpot = GetValue("Scene_Root").AddLightRig("Spot").Light

set oColor = oSpot.OGLLight.Color

Application.LogMessage "color: " & oColor.Red & ", " & oColor.Green & ", " & oColor.Blue & ", " & oColor.Alpha

関連項目

ColorizeObject TrianglePoint.Color Triangle OGLLight.Color OGLMaterial Light Envelope.GetDeformerColor