本文整理汇总了Python中opengltk.OpenGL.GL.glMultMatrixf方法的典型用法代码示例。如果您正苦于以下问题:Python GL.glMultMatrixf方法的具体用法?Python GL.glMultMatrixf怎么用?Python GL.glMultMatrixf使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类opengltk.OpenGL.GL
的用法示例。
在下文中一共展示了GL.glMultMatrixf方法的9个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: _loopGeomsRec
# 需要导入模块: from opengltk.OpenGL import GL [as 别名]
# 或者: from opengltk.OpenGL.GL import glMultMatrixf [as 别名]
def _loopGeomsRec(self, obj):
""" recursive method """
GL.glPushMatrix()
# we discard root object transformation:
if obj is not obj.viewer.rootObject:
if hasattr(obj, 'MakeMat'):
obj.MakeMat()
obj.VRML2CreatedPROTOForThisGeom = 0 # flag used in vrml2 doit()
for i in range(len(obj.instanceMatricesFortran)):
GL.glPushMatrix()
GL.glMultMatrixf(obj.instanceMatricesFortran[i])
obj.instanceMatricesFortranIndex = i # flag used in stl and vrml2 doit()
matrix = GL.glGetDoublev(GL.GL_MODELVIEW_MATRIX)
self.NodeRepr(obj, matrix)
for child in obj.children:
if child.visible:
self._loopGeomsRec(child)
GL.glPopMatrix()
GL.glPopMatrix() # Restore the matrix
del obj.instanceMatricesFortranIndex # clean up object
del obj.VRML2CreatedPROTOForThisGeom
示例2: test_0031
# 需要导入模块: from opengltk.OpenGL import GL [as 别名]
# 或者: from opengltk.OpenGL.GL import glMultMatrixf [as 别名]
def test_0031(self ):
# example we test glMultMatrixf
import Tkinter
root = Tkinter.Tk()
vi = OGLTkWidget(root)
id = Numeric.array([1.,0.,0.,0.,
0.,1.,0.,0.,
0.,0.,1.,0.,
0.,0.,0.,1.], "d")
from opengltk.extent import _gllib as gllib
#GL.glMultMatrixf(id)
try:
gllib.cvar.checkArgumentsInCWrapper = 0
GL.glMultMatrixf(id)
# calling with bad argument
gllib.cvar.checkArgumentsInCWrapper = 1
#import numpy.oldnumeric as Numeric
id = Numeric.identity(4).astype('d')
try:
GL.glMultMatrixf(id)
raise RuntimeError('failed to catch type error in wrapper')
except TypeError:
print 'Type Error caught succefully in wrapper'
except ImportError:
pass
root.after(1000, root.quit )
root.mainloop()
root.destroy()
示例3: ConcatRotation
# 需要导入模块: from opengltk.OpenGL import GL [as 别名]
# 或者: from opengltk.OpenGL.GL import glMultMatrixf [as 别名]
def ConcatRotation(self, matrix, redo=1):
if __debug__:
if hasattr(DejaVu, 'functionName'): DejaVu.functionName()
"""Apply the rotation matrix to the object [matrix.shape==(16,)]"""
if self.redirectXform: obj = self.redirectXform
else: obj = self
obj._modified = True
GL.glPushMatrix()
GL.glLoadIdentity()
GL.glMultMatrixf(obj.Ri)#.astype('f'))
GL.glMultMatrixf(matrix)
GL.glMultMatrixf(obj.R)#.astype('f'))
GL.glMultMatrixf(obj.rotation)
m = Numeric.array(GL.glGetDoublev(GL.GL_MODELVIEW_MATRIX)).astype('f')
obj.rotation = glCleanRotMat(m).astype('f')
obj.rotation.shape = (16, )
GL.glPopMatrix()
for o in self.copyXform: o.ConcatRotation(matrix)
## This code made rotation very slow because it would rebuild the
## master dpyList in cases where it was not needed
## if redo and not self.immediateRendering:
## vi = self.viewer
## print 'faga'
## vi.deleteOpenglList()
vi = self.viewer
if vi.activeClippingPlanes > 0 or vi.activeScissor > 0 or \
(vi.currentObject!=vi.rootObject and not \
vi.redirectTransformToRoot) and redo and \
not self.immediateRendering:
vi.deleteOpenglList()
示例4: ConcatRotationRelative
# 需要导入模块: from opengltk.OpenGL import GL [as 别名]
# 或者: from opengltk.OpenGL.GL import glMultMatrixf [as 别名]
def ConcatRotationRelative(self, matrix):
if __debug__:
if hasattr(DejaVu, 'functionName'): DejaVu.functionName()
"""Apply the rotation matrix to the object (matrix.shape ==(16,)
Unlike ConcatRotation you just concatenate the rotation of the object
without considering Ri and R
"""
self._modified = True
obj = self
GL.glPushMatrix()
GL.glLoadIdentity()
## GL.glMultMatrixf(obj.rotation)
GL.glMultMatrixf(matrix)
GL.glMultMatrixf(obj.rotation)
m = Numeric.array(GL.glGetDoublev(GL.GL_MODELVIEW_MATRIX)).astype('f')
obj.rotation = m.astype('f')
obj.rotation.shape = (16, )
GL.glPopMatrix()
示例5: FrameTransform
# 需要导入模块: from opengltk.OpenGL import GL [as 别名]
# 或者: from opengltk.OpenGL.GL import glMultMatrixf [as 别名]
def FrameTransform(self, camera=None):
if __debug__:
if hasattr(DejaVu, 'functionName'): DejaVu.functionName()
"""Build the R an RI, the object's frame transformation and inverse"""
GL.glPushMatrix()
self.Si = Numeric.ones( (3, ) )
GL.glLoadIdentity()
if hasattr(self, 'parent'):
if self.inheritXform:
parent = self.parent
while (parent):
m = Numeric.reshape( parent.rotation, (4,4) )
upd = Numeric.reshape( Numeric.transpose(m), (16, ) )
GL.glMultMatrixf(upd)
GL.glMultMatrixf(parent.MatrixRotInv)
self.Si = self.Si / parent.scale
self.Si = self.Si / parent.MatrixScale
# we have to test here because we need to take into
# account the first parent that does not inherit while
# building R and Ri
if not parent.inheritXform:
break
parent = parent.parent
if camera:
m = Numeric.reshape( camera.rotation, (4,4) )
upd = Numeric.reshape( Numeric.transpose(m), (16, ) )
GL.glMultMatrixf(upd)
self.Si = self.Si / camera.scale
self.Ri = Numeric.array(GL.glGetDoublev(GL.GL_MODELVIEW_MATRIX)).astype('f')
GL.glPopMatrix()
self.Ri = glCleanRotMat(self.Ri).astype('f')
self.Ri.shape = (4,4)
self.R = Numeric.reshape( Numeric.transpose(self.Ri), (16, ) ).astype('f')
self.Ri.shape = (16, )
if self.redirectXform: self.redirectXform.FrameTransform(camera)
for o in self.copyXform: o.FrameTransform(camera)
示例6: FrameTransform
# 需要导入模块: from opengltk.OpenGL import GL [as 别名]
# 或者: from opengltk.OpenGL.GL import glMultMatrixf [as 别名]
def FrameTransform(self, camera=None):
"""Build the R an RI, the object's frame transformation and inverse"""
GL.glPushMatrix()
self.Si = Numeric.ones( (3, ) )
GL.glLoadIdentity()
m = Numeric.reshape( self.object.rotation, (4,4) )
upd = Numeric.reshape( Numeric.transpose(m), (16, ) )
GL.glMultMatrixf(self.object.Ri)
GL.glMultMatrixf(upd)
GL.glMultMatrixf(self.object.MatrixRotInv)
self.Si = self.Si * self.object.Si / (self.object.scale *
self.object.MatrixScale)
self.Ri = Numeric.array(GL.glGetDoublev(GL.GL_MODELVIEW_MATRIX)).astype('f')
GL.glPopMatrix()
#self.Ri = Numeric.reshape(glCleanRotMat(self.Ri), (4,4) )
self.Ri = glCleanRotMat(self.Ri)
self.R = Numeric.reshape( Numeric.transpose(self.Ri), (16, ) ).astype('f')
self.Ri = Numeric.reshape(self.Ri, (16, )).astype('f')
if self.redirectXform: self.redirectXform.FrameTransform(camera)
for o in self.copyXform: o.FrameTransform(camera)
示例7: Draw
# 需要导入模块: from opengltk.OpenGL import GL [as 别名]
# 或者: from opengltk.OpenGL.GL import glMultMatrixf [as 别名]
def Draw(self):
""" Draw function of the geom
return status 0 or 1
If you want fast rendering, you need to set self.templateDSPL
using MakeTemplate.
"""
#print "Ellipsoids.Draw"
assert self.templateDSPL is not None
currentcontext = self.viewer.currentCamera.tk.call(self.viewer.currentCamera._w, 'contexttag')
if currentcontext != self.templateDSPL[1]:
warnings.warn("""draw failed because the current context is the wrong one""")
#print "currentcontext != self.templateDSPL[1]", currentcontext, self.templateDSPL[1]
return 0
centers = self.vertexSet.vertices.array
if len(centers) == 0: return
scaling = self.scaling
orientation = self.orientation
vertices = self.vertexSet.vertices.array
if len(vertices) != len(scaling) or len(vertices) != len(orientation):
return
if self.inheritMaterial:
fp = None
bp = None
else:
fp = self.materials[GL.GL_FRONT]
if not self.frontAndBack:
bp = self.materials[GL.GL_BACK]
face = GL.GL_FRONT
else:
bp = None
face = GL.GL_FRONT_AND_BACK
for i in xrange(len(vertices)):
GL.glPushName(i)
if fp:
for m in (0,1,2,3,4):
if fp.binding[m] != viewerConst.OVERALL:
glMaterialWithCheck( face,
viewerConst.propConst[m],
fp.prop[m][i] )
if bp:
for m in (0,1,2,3,4):
if bp.binding[m] != viewerConst.OVERALL:
glMaterialWithCheck( face,
viewerConst.propConst[m],
bp.prop[m][i] )
GL.glPushMatrix()
GL.glTranslatef(float(vertices[i][0]),
float(vertices[i][1]),
float(vertices[i][2]))
GL.glMultMatrixf( orientation[i].ravel() )
GL.glScalef(float(scaling[i][0]),
float(scaling[i][1]),
float(scaling[i][2]))
#print '#%d'%self.templateDSPL[0], "glCallList Ellipsoids0"
GL.glCallList(self.templateDSPL[0])
GL.glPopMatrix()
GL.glPopName()
return True
示例8: DisplayFunction
# 需要导入模块: from opengltk.OpenGL import GL [as 别名]
# 或者: from opengltk.OpenGL.GL import glMultMatrixf [as 别名]
def DisplayFunction(self):
"""Draw a square with diagonals to represent the clipping plane
"""
#print "ClippingPlane.DisplayFunction"
#trans = self.eqn[3]*(self.eqn[:3]*self.n)
resetMaterialMemory()
trans = self.translation
GL.glPushMatrix()
#GL.glTranslatef(-trans[0],-trans[1],-trans[2])
GL.glTranslatef(float(trans[0]),
float(trans[1]),
float(trans[2]))
GL.glMultMatrixf(self.rotation)
GL.glScalef(float(self.scale[0]),
float(self.scale[1]),
float(self.scale[2]))
if self.polyMode == GL.GL_QUADS:
GL.glPushAttrib(GL.GL_CURRENT_BIT | GL.GL_LIGHTING_BIT |
GL.GL_POLYGON_BIT)
GL.glDisable(GL.GL_LIGHTING)
GL.glMaterialWithCheck(GL.GL_FRONT_AND_BACK, GL.GL_AMBIENT,
self.color)
if self.viewer is not None:
self.viewer.enableOpenglLighting()
GL.glPolygonMode(GL.GL_FRONT_AND_BACK, GL.GL_FILL)
GL.glPushMatrix()
GL.glMultMatrixf(self.planeRot)
GL.glBegin (GL.GL_QUADS)
GL.glVertex3f (0.0, -5.0, -5.0)
GL.glVertex3f (0.0, -5.0, 5.0)
GL.glVertex3f (0.0, 5.0, 5.0)
GL.glVertex3f (0.0, 5.0, -5.0)
GL.glVertex3f (0.0, -5.0, -5.0)
GL.glEnd ()
GL.glPopMatrix()
GL.glPopAttrib()
else:
# MS disabling GL.GL_BLEND breaks display of transparent surfaces
## if self.antialiased==True:
## GL.glEnable(GL.GL_LINE_SMOOTH)
## GL.glEnable(GL.GL_BLEND)
## else:
## GL.glDisable(GL.GL_LINE_SMOOTH)
## GL.glDisable(GL.GL_BLEND)
GL.glColor4fv (self.color)
GL.glLineWidth(self.lineWidth)
GL.glPushMatrix()
GL.glMultMatrixf(self.planeRot)
# could and should be a display list made once for all planes
GL.glBegin (GL.GL_LINE_STRIP)
GL.glVertex3f (0.0, -5.0, -5.0)
GL.glVertex3f (0.0, -5.0, 5.0)
GL.glVertex3f (0.0, 5.0, 5.0)
GL.glVertex3f (0.0, 5.0, -5.0)
GL.glVertex3f (0.0, -5.0, -5.0)
GL.glVertex3f (0.0, 5.0, 5.0)
GL.glVertex3f (0.0, -5.0, 5.0)
GL.glVertex3f (0.0, 5.0, -5.0)
GL.glEnd ()
GL.glPopMatrix()
GL.glPopMatrix()
示例9: getDpyList
# 需要导入模块: from opengltk.OpenGL import GL [as 别名]
# 或者: from opengltk.OpenGL.GL import glMultMatrixf [as 别名]
def getDpyList(self,objects):
"""function to obtain a display list for any object in DejaVu"""
from opengltk.OpenGL import GL
# Draw build a display function that contains global coloring,
# transformation nd all global GL properties of this objects.
# we cannot use the object's display list that does not contains this
# info
#if len(objects) == 1 and objects[0].dpyList:
# return objects[0].dpyList
# transparent object need to be drawn last
# reorder object so transparent object drawn last
transparent =[]
opaque = []
for obj in objects:
if obj.transparent: #obj.isTransparent():
transparent.append(obj)
else:
opaque.append(obj)
objlist = opaque + transparent
lNewList = GL.glGenLists(1)
#print "lNewList geomsChooser.getDpyList", lNewList, self.name
dpyList = ( lNewList,
self.viewer.currentCamera.tk.call(self.viewer.currentCamera._w, 'contexttag')
)
camera = self.mv.GUI.VIEWER.currentCamera
camera.Activate()
GL.glNewList(dpyList, GL.GL_COMPILE)
#print "geomChooser 208", GL.glGetIntegerv(GL.GL_LIST_INDEX)
for obj in objlist:
if obj.immediateRendering: # or obj.hasChildWithImmediateRendering:
camera.drawMode=5
camera.Draw(obj)
else:
camera.drawMode=2
camera.drawTransparentObjects = 0
camera.hasTransparentObjects = 0
# draw opaque object
for m in obj.instanceMatricesFortran:
GL.glPushMatrix()
GL.glMultMatrixf(m)
if len(obj.children):
map( camera.Draw, obj.children)
else:
camera.Draw(obj)
GL.glPopMatrix()
# draw transparent children of object
if camera.hasTransparentObjects:
camera.drawTransparentObjects = 1
for m in obj.instanceMatricesFortran:
GL.glPushMatrix()
GL.glMultMatrixf(m)
map( camera.Draw, obj.children)
GL.glPopMatrix()
# draw transparent object that do not have children
if obj.isTransparent() and not len(obj.children):
camera.drawTransparentObjects =1
for m in obj.instanceMatricesFortran:
GL.glPushMatrix()
GL.glMultMatrixf(m)
camera.Draw(obj)
GL.glPopMatrix()
GL.glEndList()
return dpyList