这里有一个Nuke的Python脚本,用于创建摄像机的投影矩阵,并使用画笔作为纹理映射。其背后的想法,是投射所有物体的三维纹理在查看器,以屏幕空间通过当前选定的相机使用油漆笔画。
方法.getGeometry()不起作用。
怎么修呢?

下面是一个代码:
import nuke
import nukescripts
def paintPoints():
geoNode = nuke.activeViewer().node()
camera = nuke.selectedNode()
if not camera.Class() in ('Camera', 'Camera2'):
nuke.message('Por favor, seleccione un nodo de la cámara primera')
return
geoKnob = geoNode['geo']
objects = geoKnob.getGeometry()
if not objects:
nuke.message('No se han encontrado geometría en %s' % geoNode.name())
pts = []
for o in objects:
objTransform = o.transform()
for p in o.points():
worldP = objTransform * nuke.math.Vector4(p.x, p.y, p.z, 1)
pts.append([worldP.x, worldP.y, worldP.z])
curvesKnob = nuke.createNode('RotoPaint')['curves']
task = nuke.ProgressTask('painting points')
for i, pt in enumerate(pts):
if task.isCancelled():
break
task.setMessage('painting point %s' % i)
stroke = nuke.rotopaint.Stroke(curvesKnob)
pos = nukescripts.snap3d.projectPoint(camera, pt)
ctrlPoint = nuke.rotopaint.AnimControlPoint(pos)
stroke.append(ctrlPoint)
curvesKnob.rootLayer.append(stroke)
task.setProgress(int(float(i)/len(pts)*100))
paintPoints()

发布于 2019-10-29 14:05:14
由于铸造工程师反对使用geo旋钮及其.getGeometry()方法,所以我们应该使用.getGeometryNodes()方法。
如果你需要更详细的信息,到这里去并写出你的问题。
发布于 2016-10-24 19:29:02
下面是如何向节点添加自定义旋钮的方法。核子开发人员指南中的更多细节和图像。
下面的示例将控件添加到模糊节点:
b = nuke.nodes.Blur()
k = nuke.Array_Knob("myctrl", "My Control")
b.addKnob(k).Array_Knob可以替换为滑块的.WH_Knob或复选框的.Boolean_Knob。
https://stackoverflow.com/questions/40163460
复制相似问题