先日のfaceBBox.msをコールバックに登録し、フレームをレンダリングする度にオブジェクトを生成していくようにしたいのですが、コールバックの対象になるイベントはいったいどれなんでしょう?

PreRenderCallBack-malfunction
下のように#preRenderイベントに登録するとレンダリング開始時の一度っきりの実行になります。フレーム毎には実行されません。

callbacks.addscript #preRender fileName:"D:\\faceBBoxForAnim-Pre.ms" id:#BBox

#preRenderFrameはメッシュ評価後に呼び出されるのでそこに新たにオブジェクトを配置しても無視されてレンダリングされないようです。

#preRenderEvalも同じくビューポートには新規のオブジェクト配置をしてくれますがレンダラーには伝わらず、、、

registerTimeCallbackでタイムスライダを動かすたびにコールバックって手もありますが、重くなりますしそもそもスクリプトファイルを登録できないんですね。

分からん、、、

-- Delete last frame BBoxes
delete $BBox*

-- Freeze Node ,name "Sphere01" to TriMesh
freezeMesh = snapshotasmesh $Sphere01

-- Main
numOfFaces = getNumFaces freezeMesh
for faceIndex = 1 to numOfFaces do
(
	vertexIndexPt3 = getFace freezeMesh faceIndex
	
	vtx1 = getVert freezeMesh vertexIndexPt3.x
	vtx2 = getVert freezeMesh vertexIndexPt3.y
	vtx3 = getVert freezeMesh vertexIndexPt3.z
	
	xArray = #(vtx1.x , vtx2.x , vtx3.x)
	yArray = #(vtx1.y , vtx2.y , vtx3.y)
	zArray = #(vtx1.z , vtx2.z , vtx3.z)
	
	BBoxMax = point3 (amax xArray) (amax yArray) (amax zArray)
	BBoxMin = point3 (amin xArray) (amin yArray) (amin zArray)
	
	myBox = box name:("BBox"+(faceIndex as String)) \
	width:(BBoxMax.x - BBoxMin.x) \
	length:(BBoxMax.y - BBoxMin.y) \
	height:(BBoxMax.z - BBoxMin.z)
	
	faceCenter = meshop.getFaceCenter freezeMesh faceIndex
	myBox.center = faceCenter
	
	format "face:\t%/%\n" faceIndex numOfFaces
)
delete freezeMesh

ちなにみコールバックからはずすときはID指定で、

callbacks.removescripts id:#BBox

です。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です