def resetCamera(self, viewer): camera = viewer.getCamera() camera.setComputeNearFarMode(False) # camera = osg.Camera() camera.setViewport(osg.Viewport(0, 0, self.width(), self.height())) # camera.setReferenceFrame(osg.Transform.ABSOLUTE_RF) CAMERA_ANGLE = 45.0 CAMERA_Z_TRANSLATE = 2.4142135623730949 #1.0 / math.tan(math.radians(CAMERA_ANGLE / 2.0)) cameraPosition = [0.0, 0.0, CAMERA_Z_TRANSLATE] camera.setProjectionMatrixAsPerspective( CAMERA_ANGLE, float(self.width()) / float(self.height()), 0.1, 100.0) eye = osg.Vec3d(cameraPosition[0], cameraPosition[1], cameraPosition[2]) center = osg.Vec3d(0, 0, 0) up = osg.Vec3d(0, 1, 0) camera.setViewMatrixAsLookAt(eye, center, up) camera.getOrCreateStateSet().setAttributeAndModes( osg.BlendFunc(GL.GL_ONE, GL.GL_ONE_MINUS_SRC_ALPHA)) camera.getOrCreateStateSet().setMode(GL.GL_DEPTH_TEST, False) camera.getOrCreateStateSet().setMode(GL.GL_DEPTH_WRITEMASK, False) camera.getOrCreateStateSet().setMode(GL.GL_LIGHTING, False) material = osg.Material() color = osg.Vec4(1.0, 1.0, 1.0, 1.0) material.setDiffuse(osg.Material.FRONT_AND_BACK, color) material.setAmbient(osg.Material.FRONT_AND_BACK, color) camera.getOrCreateStateSet().setAttributeAndModes(material) camera.setClearColor(osg.Vec4(0, 0, 0, 0)) camera.setClearMask(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT) camera.setCullMask(VISIBLE_CULL_MASK) if not self.gw: raise Exception("GraphicsWindow not yet created") self.camera = camera # viewer.getCamera().setViewport(osg.Viewport(0,0, self.width(), self.height())) # viewer.getCamera().addChild(camera) camera.setGraphicsContext(self.gw)
def createAxis(): geode = osg.Geode() geometry = osg.Geometry() vertices = osg.Vec3Array() vertices.push_back(osg.Vec3(0.0, 0.0, 0.0)) vertices.push_back(osg.Vec3(1.0, 0.0, 0.0)) vertices.push_back(osg.Vec3(0.0, 0.0, 0.0)) vertices.push_back(osg.Vec3(0.0, 1.0, 0.0)) vertices.push_back(osg.Vec3(0.0, 0.0, 0.0)) vertices.push_back(osg.Vec3(0.0, 0.0, 1.0)) geometry.setVertexArray(vertices) colors = osg.Vec4Array() colors.push_back(osg.Vec4(1.0, 0.0, 0.0, 1.0)) colors.push_back(osg.Vec4(1.0, 0.0, 0.0, 1.0)) colors.push_back(osg.Vec4(0.0, 1.0, 0.0, 1.0)) colors.push_back(osg.Vec4(0.0, 1.0, 0.0, 1.0)) colors.push_back(osg.Vec4(0.0, 0.0, 1.0, 1.0)) colors.push_back(osg.Vec4(0.0, 0.0, 1.0, 1.0)) geometry.setColorArray(colors) geometry.setColorBinding(osg.Geometry.BIND_PER_VERTEX) geometry.addPrimitiveSet(osg.DrawArrays(osg.PrimitiveSet.LINES, 0, 6)) geode.addDrawable(geometry) return geode
def camera_build(self): texture = self.texture_build() camera = osg.Camera() camera.setViewport(osg.Viewport(0, 0, self.width(), self.height())) camera.setReferenceFrame(osg.Transform.ABSOLUTE_RF) camera.setRenderOrder(osg.Camera.PRE_RENDER) camera.setRenderTargetImplementation(osg.Camera.FRAME_BUFFER_OBJECT) camera.attach(osg.Camera.COLOR_BUFFER, texture, 0, 0, False, 0, 0) CAMERA_ANGLE = 45.0 CAMERA_Z_TRANSLATE = 2.4142135623730949 #1.0 / math.tan(math.radians(CAMERA_ANGLE / 2.0)) cameraPosition = [0.0, 0.0, CAMERA_Z_TRANSLATE] camera.setProjectionMatrixAsPerspective( CAMERA_ANGLE, float(self.width()) / float(self.height()), 0.1, 10000.0) eye = osg.Vec3d(cameraPosition[0], cameraPosition[1], cameraPosition[2]) center = osg.Vec3d(0, 0, 0) up = osg.Vec3d(0, 1, 0) camera.setViewMatrixAsLookAt(eye, center, up) camera.getOrCreateStateSet().setAttributeAndModes( osg.BlendFunc(GL.GL_ONE, GL.GL_ONE_MINUS_SRC_ALPHA)) camera.getOrCreateStateSet().setMode(GL.GL_DEPTH_TEST, False) camera.getOrCreateStateSet().setMode(GL.GL_DEPTH_WRITEMASK, False) camera.getOrCreateStateSet().setMode(GL.GL_LIGHTING, False) material = osg.Material() color = osg.Vec4(1.0, 1.0, 1.0, 1.0) material.setDiffuse(osg.Material.FRONT_AND_BACK, color) material.setAmbient(osg.Material.FRONT_AND_BACK, color) camera.getOrCreateStateSet().setAttributeAndModes(material) camera.setClearColor(osg.Vec4(0, 0, 0, 0)) camera.setClearMask(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT) return camera, texture
#!/usr/bin/env python #dynamicosg.py __author__ = ["Rene Molenaar"] __url__ = ("http://code.google.com/p/osgswig/") __version__ = "2.0.0" __doc__ = """ This OpenSceneGraph in Python example shows creating a\ pickhandler that adds a wirebox and a callback to \ a selected node \ ____Rene Molenaar 2008 """ #import the needed modules import osg, osgDB, osgGA, osgViewer, osgUtil selmat = osg.Material() selmat.setDiffuse(osg.Material.FRONT_AND_BACK, osg.Vec4(0.9, 0.1, 0.0, 1.0)) selmat.setEmission(osg.Material.FRONT_AND_BACK, osg.Vec4(0.8, 0.1, 0.0, 1.0)) selmat.setAmbient(osg.Material.FRONT_AND_BACK, osg.Vec4(0.5, 0.5, 0.5, 1)) def createWireBox(node): """create a bounding box for the node """ #create an empty bounding box bb = osg.BoundingBox() #if we have a geode, expand by the drawables bounding box, else use the bounding sphere geode = osg.NodeToGeode(node) if geode: print "geode found" for i in range(geode.getNumDrawables()):
def createPreRenderSubGraph(subgraph, tex_width, tex_height, renderImplementation, \ useImage, useTextureRectangle, useHDR, \ samples, colorSamples): if not subgraph: return 0 # create a group to contain the flag and the pre rendering camera. parent = osg.Group() #texture to render to and to use for rendering of flag. texture = 0 if (useTextureRectangle): textureRect = osg.TextureRectangle() textureRect.setTextureSize(tex_width, tex_height) textureRect.setInternalFormat(osg.GL_RGBA) textureRect.setFilter(osg.Texture2D.MIN_FILTER, osg.Texture2D.LINEAR) textureRect.setFilter(osg.Texture2D.MAG_FILTER, osg.Texture2D.LINEAR) texture = textureRect else: texture2D = osg.Texture2D() texture2D.setTextureSize(tex_width, tex_height) texture2D.setInternalFormat(osg.GL_RGBA) texture2D.setFilter(osg.Texture2D.MIN_FILTER, osg.Texture2D.LINEAR) texture2D.setFilter(osg.Texture2D.MAG_FILTER, osg.Texture2D.LINEAR) texture = texture2D if useHDR: texture.setInternalFormat(osg.GL_RGBA16F_ARB) texture.setSourceFormat(osg.GL_RGBA) texture.setSourceType(osg.GL_FLOAT) #first create the geometry of the flag of which to view. if True: # create the to visualize. polyGeom = osg.Geometry() polyGeom.setName("PolyGeom") polyGeom.setDataVariance(osg.Object.DYNAMIC) polyGeom.setSupportsDisplayList(False) origin = osg.Vec3(0.0, 0.0, 0.0) xAxis = osg.Vec3(1.0, 0.0, 0.0) yAxis = osg.Vec3(0.0, 0.0, 1.0) zAxis = osg.Vec3(0.0, -1.0, 0.0) height = 100.0 width = 200.0 noSteps = 20 vertices = osg.Vec3Array() bottom = osg.Vec3(origin[0], origin[1], origin[2]) top = osg.Vec3(origin[0], origin[1], origin[2]) top[2] += height dv = xAxis * (width / (float(noSteps - 1))) texcoords = osg.Vec2Array() # note, when we use TextureRectangle we have to scale the tex coords up to compensate. bottom_texcoord = osg.Vec2(0.0, 0.0) if useTextureRectangle: ltex_height = tex_height ltex_width = tex_width else: ltex_height = 1.0 ltex_width = 1.0 top_texcoord = osg.Vec2(0.0, ltex_height) dv_texcoord = osg.Vec2(ltex_width / float((noSteps - 1)), 0.0) for i in range(noSteps): vertices.push_back(top) vertices.push_back(bottom) top += dv bottom += dv texcoords.push_back(top_texcoord) texcoords.push_back(bottom_texcoord) top_texcoord += dv_texcoord bottom_texcoord += dv_texcoord # pass the created vertex array to the points geometry object. polyGeom.setVertexArray(vertices) polyGeom.setTexCoordArray(0, texcoords) colors = osg.Vec4Array() colors.push_back(osg.Vec4(1.0, 1.0, 1.0, 1.0)) polyGeom.setColorArray(colors) polyGeom.setColorBinding(osg.Geometry.BIND_OVERALL) polyGeom.addPrimitiveSet( osg.DrawArrays(osg.PrimitiveSet.QUAD_STRIP, 0, vertices.size())) # new we need to add the texture to the Drawable, we do so by creating a # StateSet to contain the Texture StateAttribute. stateset = osg.StateSet() stateset.setTextureAttributeAndModes(0, texture, osg.StateAttribute.ON) polyGeom.setStateSet(stateset) #changes to the geometry polyGeom.setUpdateCallback( MyGeometryCallback(origin, xAxis, yAxis, zAxis, 1.0, 1.0 / width, 0.2).__disown__()) geode = osg.Geode() geode.addDrawable(polyGeom) parent.addChild(geode) # then create the camera node to do the render to texture if True: camera = osg.Camera() # set up the background color and clear mask. camera.setClearColor(osg.Vec4(0.1, 0.1, 0.3, 1.0)) camera.setClearMask(osg.GL_COLOR_BUFFER_BIT | osg.GL_DEPTH_BUFFER_BIT) bs = subgraph.getBound() if not bs.valid(): return subgraph znear = 1.0 * bs.radius() zfar = 3.0 * bs.radius() # 2:1 aspect ratio as per flag geometry below. proj_top = 0.25 * znear proj_right = 0.5 * znear znear *= 0.9 zfar *= 1.1 # set up projection. camera.setProjectionMatrixAsFrustum(-proj_right, proj_right, -proj_top, proj_top, znear, zfar) # set view camera.setReferenceFrame(osg.Transform.ABSOLUTE_RF) camera.setViewMatrixAsLookAt(osg.Vec3d(bs.center())-osg.Vec3d(0.0,2.0,0.0)*bs.radius(), \ osg.Vec3d(bs.center()),\ osg.Vec3d(0.0,0.0,1.0)) # set viewport camera.setViewport(0, 0, tex_width, tex_height) # set the camera to render before the main camera. camera.setRenderOrder(osg.Camera.PRE_RENDER) # tell the camera to use OpenGL frame buffer object where supported. camera.setRenderTargetImplementation(renderImplementation) if useImage: image = osg.Image() #image.allocateImage(tex_width, tex_height, 1, GL_RGBA, GL_UNSIGNED_BYTE); image.allocateImage(tex_width, tex_height, 1, osg.GL_RGBA, osg.GL_FLOAT) # attach the image so its copied on each frame. camera.attach(osg.Camera.COLOR_BUFFER, image, samples, colorSamples) camera.setPostDrawCallback(MyCameraPostDrawCallback(image)) # Rather than attach the texture directly to illustrate the texture's ability to # detect an image update and to subload the image onto the texture. You needn't # do this when using an Image for copying to, as a separate camera.attach(..) # would suffice as well, but we'll do it the long way round here just for demonstration # purposes (long way round meaning we'll need to copy image to main memory, then # copy it back to the graphics card to the texture in one frame). # The long way round allows us to manually modify the copied image via the callback # and then let this modified image by reloaded back. texture.setImage(0, image) else: # attach the texture and use it as the color buffer. camera.attach(osg.Camera.COLOR_BUFFER, texture, 0, 0, False, samples, colorSamples) # add subgraph to render camera.addChild(subgraph) parent.addChild(camera) return parent
import ctypes import osgDB, osgViewer, osg, osgGA, osgAnimation floatKeys = osgAnimation.FloatKeyframeContainer() key0 = osgAnimation.FloatKeyframe(0.0, 1.0) floatKeys.push_back(key0) vec3Keys = osgAnimation.Vec3KeyframeContainer() key0 = osgAnimation.Vec3Keyframe(0.0, osg.Vec3(1, 2, 3)) vec3Keys.push_back(key0) vec4Keys = osgAnimation.Vec4KeyframeContainer() key0 = osgAnimation.Vec4Keyframe(0.0, osg.Vec4(1, 2, 3, 4)) vec4Keys.push_back(key0)
pyramidGeometry.addPrimitiveSet(pyramidFace2) pyramidFace3 = osg.DrawElementsUInt(osg.PrimitiveSet.TRIANGLES, 0) pyramidFace3.push_back(2) pyramidFace3.push_back(3) pyramidFace3.push_back(4) pyramidGeometry.addPrimitiveSet(pyramidFace3) pyramidFace4 = osg.DrawElementsUInt(osg.PrimitiveSet.TRIANGLES, 0) pyramidFace4.push_back(3) pyramidFace4.push_back(0) pyramidFace4.push_back(4) pyramidGeometry.addPrimitiveSet(pyramidFace4) colors = osg.Vec4Array() colors.push_back(osg.Vec4(1, 0, 0, 1)) #index 0 red colors.push_back(osg.Vec4(0, 1, 0, 1)) #index 1 green colors.push_back(osg.Vec4(0, 0, 1, 1)) #index 2 blue colors.push_back(osg.Vec4(1, 1, 1, 1)) #index 3 white colorIndexArray = osg.UIntArray() colorIndexArray.push_back(0) colorIndexArray.push_back(1) colorIndexArray.push_back(2) colorIndexArray.push_back(3) colorIndexArray.push_back(0) pyramidGeometry.setColorArray(colors) pyramidGeometry.setColorIndices(colorIndexArray) pyramidGeometry.setColorBinding(osg.Geometry.BIND_PER_VERTEX)