From 421ae4f3898869ae41ccb7456cf1203eccf7cb04 Mon Sep 17 00:00:00 2001 From: David Vierra Date: Sat, 11 Jul 2015 22:43:09 -1000 Subject: [PATCH] Add scenegraph nodes for matrix rotate and depth test function. --- src/mcedit2/rendering/rendergraph.py | 28 ++++++++++++++++++++++++++++ src/mcedit2/rendering/scenegraph.py | 16 ++++++++++++++++ 2 files changed, 44 insertions(+) diff --git a/src/mcedit2/rendering/rendergraph.py b/src/mcedit2/rendering/rendergraph.py index 1062bfc..0232e29 100644 --- a/src/mcedit2/rendering/rendergraph.py +++ b/src/mcedit2/rendering/rendergraph.py @@ -211,6 +211,26 @@ class TranslateRenderNode(RenderstateRenderNode): GL.glMatrixMode(GL.GL_MODELVIEW) GL.glPopMatrix() +class RotateRenderNode(RenderstateRenderNode): + def __init__(self, sceneNode): + """ + + :type sceneNode: TranslateNode + """ + super(RotateRenderNode, self).__init__(sceneNode) + + def __repr__(self): + return "RotateRenderNode(%s, %s)" % (self.sceneNode.degrees,self.sceneNode.axis) + + def enter(self): + GL.glMatrixMode(GL.GL_MODELVIEW) + GL.glPushMatrix() + GL.glRotate(self.sceneNode.degrees, *self.sceneNode.axis) + + def exit(self): + GL.glMatrixMode(GL.GL_MODELVIEW) + GL.glPopMatrix() + class PolygonModeRenderNode(RenderstateRenderNode): def enter(self): @@ -327,6 +347,14 @@ class DepthMaskRenderNode(RenderstateRenderNode): def exit(self): GL.glPopAttrib() +class DepthFuncRenderNode(RenderstateRenderNode): + def enter(self): + GL.glPushAttrib(GL.GL_DEPTH_BUFFER_BIT) + GL.glDepthFunc(self.sceneNode.func) + + def exit(self): + GL.glPopAttrib() + class BoxRenderNode(RenderNode): def drawSelf(self): box = self.sceneNode.box diff --git a/src/mcedit2/rendering/scenegraph.py b/src/mcedit2/rendering/scenegraph.py index 3c7d922..0a6bb79 100644 --- a/src/mcedit2/rendering/scenegraph.py +++ b/src/mcedit2/rendering/scenegraph.py @@ -179,12 +179,28 @@ class TranslateNode(Node): self._translateOffset = value self.dirty = True +class RotateNode(Node): + RenderNodeClass = rendergraph.RotateRenderNode + + def __init__(self, degrees, axis): + super(RotateNode, self).__init__() + self.degrees = degrees + self.axis = axis + + class DepthMaskNode(Node): RenderNodeClass = rendergraph.DepthMaskRenderNode mask = False +class DepthFuncNode(Node): + RenderNodeClass = rendergraph.DepthFuncRenderNode + + def __init__(self, func=GL.GL_LESS): + super(DepthFuncNode, self).__init__() + self.func = func + class ClearNode(Node): RenderNodeClass = rendergraph.ClearRenderNode