不带MPxLocator插件的OpenGL Python Maya API绘图
我正在尝试在maya python api中执行以下简单操作:不带MPxLocator插件的OpenGL Python Maya API绘图,python,api,opengl,maya,Python,Api,Opengl,Maya,我正在尝试在maya python api中执行以下简单操作: import maya.OpenMayaUI as OpenMayaUI import maya.OpenMayaRender as OpenMayaRender #Get active camera. view = OpenMayaUI.M3dView.active3dView() glFT = OpenMayaRender.MHardwareRenderer.theRenderer().glFunctionTable()
import maya.OpenMayaUI as OpenMayaUI
import maya.OpenMayaRender as OpenMayaRender
#Get active camera.
view = OpenMayaUI.M3dView.active3dView()
glFT = OpenMayaRender.MHardwareRenderer.theRenderer().glFunctionTable()
view.beginGL()
glFT.glBegin(OpenMayaRender.MGL_LINES)
glFT.glVertex3f(0.0, 0.0, 0.0)
glFT.glVertex3f(0.0, 1.0, 0.0)
glFT.glEnd()
view.endGL()
我只想在maya中绘制一条线,而不必构建MPxLocator或其他什么工具来显示它。因此我发现我需要实际向视图添加回调以使其绘制:
import maya.OpenMayaUI as OpenMayaUI
import maya.OpenMayaRender as OpenMayaRender
import maya.cmds as cmds
def setCamera(*args):
view = OpenMayaUI.M3dView.active3dView()
# Get a renderer, then a function table
glRenderer = OpenMayaRender.MHardwareRenderer.theRenderer()
glFT = glRenderer.glFunctionTable()
view.beginGL()
glFT.glPushAttrib(OpenMayaRender.MGL_LINE_BIT)
glFT.glLineWidth(5.0)
glFT.glBegin(OpenMayaRender.MGL_LINES)
glFT.glColor3f(1.0, 0.0, 0.0)
glFT.glVertex3f(0.0, 0.0, 0.0)
glFT.glVertex3f(3.0, 0.0, 0.0)
glFT.glColor3f(0.0, 1.0, 0.0)
glFT.glVertex3f(0.0, 0.0, 0.0)
glFT.glVertex3f(0.0, 3.0, 0.0)
glFT.glColor3f(0.0, 0.0, 1.0)
glFT.glVertex3f(0.0, 0.0, 0.0)
glFT.glVertex3f(0.0, 0.0, 3.0)
glFT.glEnd()
glFT.glPopAttrib()
view.endGL()
if __name__ == '__main__':
panel = cmds.getPanel(withFocus=True)
callBack = OpenMayaUI.MUiMessage.add3dViewPostRenderMsgCallback(
panel, setCamera)
view = OpenMayaUI.M3dView.active3dView()
view.refresh(True, True)
然后要删除回调,请执行以下操作:
OpenMayaUI.MUiMessage.removeCallback(callBack)
view = OpenMayaUI.M3dView.active3dView()
view.refresh(True, True)
希望这对别人有帮助 因此我发现我需要向视图中添加回调以使其绘制:
import maya.OpenMayaUI as OpenMayaUI
import maya.OpenMayaRender as OpenMayaRender
import maya.cmds as cmds
def setCamera(*args):
view = OpenMayaUI.M3dView.active3dView()
# Get a renderer, then a function table
glRenderer = OpenMayaRender.MHardwareRenderer.theRenderer()
glFT = glRenderer.glFunctionTable()
view.beginGL()
glFT.glPushAttrib(OpenMayaRender.MGL_LINE_BIT)
glFT.glLineWidth(5.0)
glFT.glBegin(OpenMayaRender.MGL_LINES)
glFT.glColor3f(1.0, 0.0, 0.0)
glFT.glVertex3f(0.0, 0.0, 0.0)
glFT.glVertex3f(3.0, 0.0, 0.0)
glFT.glColor3f(0.0, 1.0, 0.0)
glFT.glVertex3f(0.0, 0.0, 0.0)
glFT.glVertex3f(0.0, 3.0, 0.0)
glFT.glColor3f(0.0, 0.0, 1.0)
glFT.glVertex3f(0.0, 0.0, 0.0)
glFT.glVertex3f(0.0, 0.0, 3.0)
glFT.glEnd()
glFT.glPopAttrib()
view.endGL()
if __name__ == '__main__':
panel = cmds.getPanel(withFocus=True)
callBack = OpenMayaUI.MUiMessage.add3dViewPostRenderMsgCallback(
panel, setCamera)
view = OpenMayaUI.M3dView.active3dView()
view.refresh(True, True)
然后要删除回调,请执行以下操作:
OpenMayaUI.MUiMessage.removeCallback(callBack)
view = OpenMayaUI.M3dView.active3dView()
view.refresh(True, True)
希望这对别人有帮助 这很有趣。你如何/在哪里应用它。什么目的。如果我知道的话?我在用它做测试。我也考虑过使用它来绘制简单的gl图形,比如矩阵和法线,但从未决定使用它。这就是我的兴趣来源。对于未来的读者-这在传统maya视口中非常有用-但是如果您使用“viewport 2.0”或更高版本,它就不起作用了,这很有趣。你如何/在哪里应用它。什么目的。如果我知道的话?我在用它做测试。我也考虑过使用它来绘制简单的gl图形,比如矩阵和法线,但从未决定使用它。这就是我的兴趣来源。对于未来的读者-这在旧版maya视口中非常有效-但是如果使用“viewport 2.0”或更高版本,它不会绘制