From: <ar...@us...> - 2006-08-17 18:56:25
|
Revision: 6 Author: aronb Date: 2006-08-17 11:56:02 -0700 (Thu, 17 Aug 2006) ViewCVS: http://svn.sourceforge.net/pydemeter/?rev=6&view=rev Log Message: ----------- - Renaming the qt example. - Adding glut example. Added Paths: ----------- trunk/src/test/glut_example.py trunk/src/test/qt_example.py Removed Paths: ------------- trunk/src/test/hellogl.py Added: trunk/src/test/glut_example.py =================================================================== --- trunk/src/test/glut_example.py (rev 0) +++ trunk/src/test/glut_example.py 2006-08-17 18:56:02 UTC (rev 6) @@ -0,0 +1,205 @@ +#!/usr/bin/env python + +import os, sys +import demeter + +try: + from OpenGL.GL import * + from OpenGL.GLUT import * +except ImportError: + print "PyOpenGL must be installed to run this example." + sys.exit(1) + +if not os.environ.has_key("DEMETER_SAMPLE_DATA_PATH"): + print "You must set DEMETER_SAMPLE_DATA_PATH to the location of the sample data." + sys.exit(1) + +terrain = None +camera = None +cameraPosition = None + +terrain = None +camera = None +cameraPosition = None +# The "detail level" of the terrain - higher values will render faster but yield less visual quality +threshold = 30.0; + +def init(): + global terrain + global camera + global cameraPosition + try: + demeter.Settings.GetInstance().Initialize() + demeter.Settings.GetInstance().SetVerbose(True) + demeter.Settings.GetInstance().SetMediaPath(os.environ["DEMETER_SAMPLE_DATA_PATH"]); + demeter.Settings.GetInstance().SetUseVertexLocking(True) + demeter.Settings.GetInstance().SetUseNormals(False) + demeter.Settings.GetInstance().SetUseBorders(False) + + + demeter.Settings.GetInstance().SetDetailTextureRepeats((512.0 * 30.0) / 64.0) + demeter.Settings.GetInstance().SetTextureCellWidth(2048) + demeter.Settings.GetInstance().SetTextureCellHeight(2048) + demeter.Settings.GetInstance().SetTextureMaskWidth(2048) + demeter.Settings.GetInstance().SetTextureMaskHeight(2048) + demeter.Settings.GetInstance().SetTextureCompression(True) + + terrain = demeter.Terrain() + #demeter.LoadRawElevations(terrain,"/home/aronb/Source/demeter.4.0/DemeterSampleData/Raid.raw",513,513,30.0,0.015,False) + demeter.LoadRawElevations(terrain,"Raid.raw",513,513,30.0,0.015,False) + #demeter.SDLTextureLoader.GetInstance().LoadTerrainTexture("RaidTexture.png", terrain) + tex_loader = demeter.PILTextureLoader.PILTextureLoader() + #(width, height, data) = tex_loader.loadImage("/home/aronb/Source/demeter.4.0/DemeterSampleData/RaidTexture.png") + (width, height) = tex_loader.LoadTerrainTexture("/home/aronb/Source/demeter.4.0/DemeterSampleData/RaidTexture.png", terrain) + #(width, height) = tex_loader.LoadTerrainTexture("/home/aronb/Source/demeter.4.0/DemeterSampleData/arctica.png", terrain) + + tex_loader.LoadMasks(terrain, "/home/aronb/Source/demeter.4.0/DemeterSampleData/RaidMask.png", + "/home/aronb/Source/demeter.4.0/DemeterSampleData/granite19.png", + "/home/aronb/Source/demeter.4.0/DemeterSampleData/grassDetail.png", + "/home/aronb/Source/demeter.4.0/DemeterSampleData/road2.png") + print "Image [%s] [%s]" % (width, height) + except Exception, ex: + print "ERROR: ", ex + + try: + MAX_VIEW_DISTANCE = 8000.0 + SKY_RED = 0.5 + SKY_GREEN = 0.75 + SKY_BLUE = 1.0 + SKY_ALPHA = 1.0 + FOG_RED = SKY_RED + FOG_GREEN = SKY_GREEN + FOG_BLUE = SKY_BLUE + FOG_ALPHA = SKY_ALPHA + ScreenWidth = 800 + ScreenHeight = 600 + terrain.SetMaximumVisibleBlockSize(128) + # Setup 3D scene + # Vanilla OpenGL setup + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + glViewport(0, 0, 800, 600) + glFrustum(-0.5, 0.5, -0.5, 0.5, 0.65, MAX_VIEW_DISTANCE); + glClearColor(SKY_RED, SKY_GREEN, SKY_BLUE, SKY_ALPHA); + glDisable(GL_NORMALIZE); + glEnable(GL_DEPTH_TEST); + glShadeModel(GL_SMOOTH); + # Setup fog + fogColor = [0, 0, 0, 0] + fogColor[0] = FOG_RED + fogColor[1] = FOG_GREEN + fogColor[2] = FOG_BLUE + fogColor[3] = FOG_ALPHA + glEnable(GL_FOG) + glFogf(GL_FOG_MODE, GL_LINEAR) + glFogfv(GL_FOG_COLOR, fogColor); + glFogf(GL_FOG_START, 100.0) + glFogf(GL_FOG_END, MAX_VIEW_DISTANCE - 100.0) + glHint(GL_FOG_HINT, GL_FASTEST) + + # Setup camera + cameraPosition = demeter.Vector() + cameraPosition.x = terrain.GetWidth() / 2.0 + cameraPosition.y = terrain.GetHeight() / 2.0 + cameraPosition.z = 50.0 + camera = demeter.Camera(terrain) + camera.SetPosition(cameraPosition.x, cameraPosition.y) + camera.SetHoverElevation(50.0) + except Exception, ex: + print "ERROR: ", ex + +def draw(): + global terrain + global camera + global cameraPosition + if camera is not None: + # Setup viewing transformation + camera.Update() + camPos = demeter.Vector() + camera.GetPosition(camPos) + terrain.SetCameraPosition(camPos.x,camPos.y) + if terrain is not None: + #Render the terrain + terrain.SetCameraPosition(0, 0) + terrain.SetDetailThreshold(threshold) + terrain.ModelViewMatrixChanged() + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) + try: + terrain.Render() + except Exception, ex: + print "EXCEPTION: ", ex + glutSwapBuffers() + +def reshape(width, height): + MAX_VIEW_DISTANCE = 8000.0 + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + glViewport(0, 0, width, height) + glFrustum(-0.5, 0.5, -0.5, 0.5, 0.65, MAX_VIEW_DISTANCE); + glMatrixMode(GL_MODELVIEW) + +def idle(): + glutPostRedisplay() + +def key(ch, x, y): + # Adjust control velocities based on user's current execution speed + CAMERA_SPEED = 100.0 # Meters per second + CAMERA_ROTATE_SPEED = 0.5 # Radians per second + TimePerFrame = 0.03 + rotateSpeed = TimePerFrame * CAMERA_ROTATE_SPEED; + translateSpeed = TimePerFrame * CAMERA_SPEED; + + # Handle keyboard commands + if 'w' == ch: + camera.TranslateForward(translateSpeed); + elif 'x' == ch: + camera.TranslateBackward(translateSpeed); + elif 'a' == ch: + camera.TranslateLeft(translateSpeed); + elif 'd' == ch: + camera.TranslateRight(translateSpeed); + elif 'q' == ch: + camera.SetHoverElevation(camera.GetHoverElevation() + translateSpeed); + elif 'z' == ch: + camera.SetHoverElevation(camera.GetHoverElevation() - translateSpeed); + elif '+' == ch: + # Increase the detail threshold (make the terrain less detailed - worse looking but faster) + self.mThreshold += 0.5 + print "SAMPLE: Threshold = ", self.mThreshold + elif '-' == ch: + # Decrease the detail threshold (make the terrain more detailed - better looking but slower) + self.mThreshold -= 0.5 + print "SAMPLE: Threshold = ", self.mThreshold + elif ord(ch) == 27: # Escape + sys.exit(0) + +def special(): + pass +def visible(vis): + if vis == GLUT_VISIBLE: + glutIdleFunc(idle) + else: + glutIdleFunc(None) + +if __name__ == '__main__': + glutInit(sys.argv) + glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH) + + glutInitWindowPosition(0, 0) + glutInitWindowSize(800, 600) + glutCreateWindow("pyDemeter") + init() + + glutDisplayFunc(draw) + glutReshapeFunc(reshape) + glutKeyboardFunc(key) + glutSpecialFunc(special) + glutVisibilityFunc(visible) + glutIdleFunc(idle) + + if "-info" in sys.argv: + print "GL_RENDERER = ", glGetString(GL_RENDERER) + print "GL_VERSION = ", glGetString(GL_VERSION) + print "GL_VENDOR = ", glGetString(GL_VENDOR) + print "GL_EXTENSIONS = ", glGetString(GL_EXTENSIONS) + glutMainLoop() Property changes on: trunk/src/test/glut_example.py ___________________________________________________________________ Name: svn:executable + * Name: svn:eol-style + native Deleted: trunk/src/test/hellogl.py =================================================================== --- trunk/src/test/hellogl.py 2006-08-16 22:47:32 UTC (rev 5) +++ trunk/src/test/hellogl.py 2006-08-17 18:56:02 UTC (rev 6) @@ -1,241 +0,0 @@ -#!/usr/bin/env python - -"""PyQt4 port of the opengl/hellogl example from Qt v4.x""" - -import os -import sys -import math -from PyQt4 import QtCore, QtGui, QtOpenGL -import demeter - -try: - from OpenGL import GL -except ImportError: - app = QtGui.QApplication(sys.argv) - QtGui.QMessageBox.critical(None, "OpenGL hellogl", - "PyOpenGL must be installed to run this example.", - QtGui.QMessageBox.Ok | QtGui.QMessageBox.Default, - QtGui.QMessageBox.NoButton) - sys.exit(1) - -terrain = None -camera = None -cameraPosition = None - -class Window(QtGui.QWidget): - def __init__(self, parent=None): - QtGui.QWidget.__init__(self, parent) - - self.glWidget = GLWidget() - - - mainLayout = QtGui.QHBoxLayout() - mainLayout.addWidget(self.glWidget) - self.setLayout(mainLayout) - - self.setWindowTitle(self.tr("Hello GL")) - -class GLWidget(QtOpenGL.QGLWidget): - def __init__(self, parent=None): - QtOpenGL.QGLWidget.__init__(self, parent) - self.setFocusPolicy(QtCore.Qt.StrongFocus) - self.lastPos = QtCore.QPoint() - - # The "detail level" of the terrain - higher values will render faster but yield less visual quality - self.mThreshold = 30.0; - - - def keyPressEvent(self, event): - #global keymap - global camera - text = event.text() - if len(text) > 0: - ch = event.text().at(0).toAscii() - key = event.key() - - # Adjust control velocities based on user's current execution speed - CAMERA_SPEED = 100.0 # Meters per second - CAMERA_ROTATE_SPEED = 0.5 # Radians per second - TimePerFrame = 0.03 - rotateSpeed = TimePerFrame * CAMERA_ROTATE_SPEED; - translateSpeed = TimePerFrame * CAMERA_SPEED; - - # Handle keyboard commands - if 'w' == ch: - camera.TranslateForward(translateSpeed); - if 'x' == ch: - camera.TranslateBackward(translateSpeed); - if 'a' == ch: - camera.TranslateLeft(translateSpeed); - if 'd' == ch: - camera.TranslateRight(translateSpeed); - if 'q' == ch: - camera.SetHoverElevation(camera.GetHoverElevation() + translateSpeed); - if 'z' == ch: - camera.SetHoverElevation(camera.GetHoverElevation() - translateSpeed); - #if (pKeys[SDLK_ESCAPE]) - # continueRunning = false; - - if '+' == ch: - # Increase the detail threshold (make the terrain less detailed - worse looking but faster) - self.mThreshold += 0.5 - print "SAMPLE: Threshold = ", self.mThreshold - if '-' == ch: - # Decrease the detail threshold (make the terrain more detailed - better looking but slower) - self.mThreshold -= 0.5 - print "SAMPLE: Threshold = ", self.mThreshold - - if QtCore.Qt.Key_Escape == key: - QtGui.qApp.closeAllWindows() - - - #self.mManager.keyPress(ord(ch), 0, 0) - #elif keymap.has_key(event.key()): - # key = keymap[event.key()] - # self.mManager.keyPress(key,0,0) - self.updateGL() - - def minimumSizeHint(self): - return QtCore.QSize(50, 50) - - def sizeHint(self): - return QtCore.QSize(400, 400) - - hack = None - - def initializeGL(self): - global terrain - global camera - global cameraPosition - global hack - print "SAMPLE: OpenGL vendor: ", GL.glGetString(GL.GL_VENDOR) - print "SAMPLE: OpenGL extensions supported: ", GL.glGetString(GL.GL_EXTENSIONS) - try: - demeter.Settings.GetInstance().Initialize() - demeter.Settings.GetInstance().SetVerbose(True) - demeter.Settings.GetInstance().SetMediaPath(os.environ["DEMETER_SAMPLE_DATA_PATH"]); - demeter.Settings.GetInstance().SetUseVertexLocking(True) - demeter.Settings.GetInstance().SetUseNormals(False) - demeter.Settings.GetInstance().SetUseBorders(False) - - - demeter.Settings.GetInstance().SetDetailTextureRepeats((512.0 * 30.0) / 64.0) - demeter.Settings.GetInstance().SetTextureCellWidth(2048) - demeter.Settings.GetInstance().SetTextureCellHeight(2048) - demeter.Settings.GetInstance().SetTextureMaskWidth(2048) - demeter.Settings.GetInstance().SetTextureMaskHeight(2048) - demeter.Settings.GetInstance().SetTextureCompression(True) - - terrain = demeter.Terrain() - #demeter.LoadRawElevations(terrain,"/home/aronb/Source/demeter.4.0/DemeterSampleData/Raid.raw",513,513,30.0,0.015,False) - demeter.LoadRawElevations(terrain,"Raid.raw",513,513,30.0,0.015,False) - #demeter.SDLTextureLoader.GetInstance().LoadTerrainTexture("RaidTexture.png", terrain) - tex_loader = demeter.PILTextureLoader.PILTextureLoader() - #(width, height, data) = tex_loader.loadImage("/home/aronb/Source/demeter.4.0/DemeterSampleData/RaidTexture.png") - (width, height) = tex_loader.LoadTerrainTexture("/home/aronb/Source/demeter.4.0/DemeterSampleData/RaidTexture.png", terrain) - #(width, height) = tex_loader.LoadTerrainTexture("/home/aronb/Source/demeter.4.0/DemeterSampleData/arctica.png", terrain) - - tex_loader.LoadMasks(terrain, "/home/aronb/Source/demeter.4.0/DemeterSampleData/RaidMask.png", - "/home/aronb/Source/demeter.4.0/DemeterSampleData/granite19.png", - "/home/aronb/Source/demeter.4.0/DemeterSampleData/grassDetail.png", - "/home/aronb/Source/demeter.4.0/DemeterSampleData/road2.png") - print "Image [%s] [%s]" % (width, height) - except Exception, ex: - print "ERROR: ", ex - - try: - MAX_VIEW_DISTANCE = 8000.0 - SKY_RED = 0.5 - SKY_GREEN = 0.75 - SKY_BLUE = 1.0 - SKY_ALPHA = 1.0 - FOG_RED = SKY_RED - FOG_GREEN = SKY_GREEN - FOG_BLUE = SKY_BLUE - FOG_ALPHA = SKY_ALPHA - ScreenWidth = 800 - ScreenHeight = 600 - terrain.SetMaximumVisibleBlockSize(128) - # Setup 3D scene - # Vanilla OpenGL setup - GL.glMatrixMode(GL.GL_PROJECTION); - GL.glLoadIdentity(); - GL.glViewport(0, 0, self.width(), self.height()); - GL.glFrustum(-0.5, 0.5, -0.5, 0.5, 0.65, MAX_VIEW_DISTANCE); - GL.glClearColor(SKY_RED, SKY_GREEN, SKY_BLUE, SKY_ALPHA); - GL.glDisable(GL.GL_NORMALIZE); - GL.glEnable(GL.GL_DEPTH_TEST); - GL.glShadeModel(GL.GL_SMOOTH); - # Setup fog - fogColor = [0, 0, 0, 0] - fogColor[0] = FOG_RED - fogColor[1] = FOG_GREEN - fogColor[2] = FOG_BLUE - fogColor[3] = FOG_ALPHA - GL.glEnable(GL.GL_FOG) - GL.glFogf(GL.GL_FOG_MODE, GL.GL_LINEAR) - GL.glFogfv(GL.GL_FOG_COLOR, fogColor); - GL.glFogf(GL.GL_FOG_START, 100.0) - GL.glFogf(GL.GL_FOG_END, MAX_VIEW_DISTANCE - 100.0) - GL.glHint(GL.GL_FOG_HINT, GL.GL_FASTEST) - - # Setup camera - cameraPosition = demeter.Vector() - cameraPosition.x = terrain.GetWidth() / 2.0 - cameraPosition.y = terrain.GetHeight() / 2.0 - cameraPosition.z = 50.0 - camera = demeter.Camera(terrain) - camera.SetPosition(cameraPosition.x, cameraPosition.y) - camera.SetHoverElevation(50.0) - except Exception, ex: - print "ERROR: ", ex - - def paintGL(self): - global terrain - global camera - if camera is not None: - # Setup viewing transformation - camera.Update() - camPos = demeter.Vector() - camera.GetPosition(camPos) - terrain.SetCameraPosition(camPos.x,camPos.y) - if terrain is not None: - #Render the terrain - terrain.SetCameraPosition(0, 0) - terrain.SetDetailThreshold(self.mThreshold) - terrain.ModelViewMatrixChanged() - GL.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT) - try: - terrain.Render() - except Exception, ex: - print "EXCEPTION: ", ex - - - def resizeGL(self, width, height): - MAX_VIEW_DISTANCE = 8000.0 - GL.glMatrixMode(GL.GL_PROJECTION); - GL.glLoadIdentity(); - GL.glViewport(0, 0, width, height) - GL.glFrustum(-0.5, 0.5, -0.5, 0.5, 0.65, MAX_VIEW_DISTANCE); - GL.glMatrixMode(GL.GL_MODELVIEW) - - - def mousePressEvent(self, event): - self.lastPos = QtCore.QPoint(event.pos()) - - def mouseMoveEvent(self, event): - dx = event.x() - self.lastPos.x() - dy = event.y() - self.lastPos.y() - - self.lastPos = QtCore.QPoint(event.pos()) - -if __name__ == '__main__': - app = QtGui.QApplication(sys.argv) - window = Window() - window.show() - - if not os.environ.has_key("DEMETER_SAMPLE_DATA_PATH"): - exit(9) - - - sys.exit(app.exec_()) Copied: trunk/src/test/qt_example.py (from rev 3, trunk/src/test/hellogl.py) =================================================================== --- trunk/src/test/qt_example.py (rev 0) +++ trunk/src/test/qt_example.py 2006-08-17 18:56:02 UTC (rev 6) @@ -0,0 +1,241 @@ +#!/usr/bin/env python + +"""PyQt4 port of the opengl/hellogl example from Qt v4.x""" + +import os +import sys +import math +from PyQt4 import QtCore, QtGui, QtOpenGL +import demeter + +try: + from OpenGL import GL +except ImportError: + app = QtGui.QApplication(sys.argv) + QtGui.QMessageBox.critical(None, "OpenGL hellogl", + "PyOpenGL must be installed to run this example.", + QtGui.QMessageBox.Ok | QtGui.QMessageBox.Default, + QtGui.QMessageBox.NoButton) + sys.exit(1) + +terrain = None +camera = None +cameraPosition = None + +class Window(QtGui.QWidget): + def __init__(self, parent=None): + QtGui.QWidget.__init__(self, parent) + + self.glWidget = GLWidget() + + + mainLayout = QtGui.QHBoxLayout() + mainLayout.addWidget(self.glWidget) + self.setLayout(mainLayout) + + self.setWindowTitle(self.tr("Hello GL")) + +class GLWidget(QtOpenGL.QGLWidget): + def __init__(self, parent=None): + QtOpenGL.QGLWidget.__init__(self, parent) + self.setFocusPolicy(QtCore.Qt.StrongFocus) + self.lastPos = QtCore.QPoint() + + # The "detail level" of the terrain - higher values will render faster but yield less visual quality + self.mThreshold = 30.0; + + + def keyPressEvent(self, event): + #global keymap + global camera + text = event.text() + if len(text) > 0: + ch = event.text().at(0).toAscii() + key = event.key() + + # Adjust control velocities based on user's current execution speed + CAMERA_SPEED = 100.0 # Meters per second + CAMERA_ROTATE_SPEED = 0.5 # Radians per second + TimePerFrame = 0.03 + rotateSpeed = TimePerFrame * CAMERA_ROTATE_SPEED; + translateSpeed = TimePerFrame * CAMERA_SPEED; + + # Handle keyboard commands + if 'w' == ch: + camera.TranslateForward(translateSpeed); + if 'x' == ch: + camera.TranslateBackward(translateSpeed); + if 'a' == ch: + camera.TranslateLeft(translateSpeed); + if 'd' == ch: + camera.TranslateRight(translateSpeed); + if 'q' == ch: + camera.SetHoverElevation(camera.GetHoverElevation() + translateSpeed); + if 'z' == ch: + camera.SetHoverElevation(camera.GetHoverElevation() - translateSpeed); + #if (pKeys[SDLK_ESCAPE]) + # continueRunning = false; + + if '+' == ch: + # Increase the detail threshold (make the terrain less detailed - worse looking but faster) + self.mThreshold += 0.5 + print "SAMPLE: Threshold = ", self.mThreshold + if '-' == ch: + # Decrease the detail threshold (make the terrain more detailed - better looking but slower) + self.mThreshold -= 0.5 + print "SAMPLE: Threshold = ", self.mThreshold + + if QtCore.Qt.Key_Escape == key: + QtGui.qApp.closeAllWindows() + + + #self.mManager.keyPress(ord(ch), 0, 0) + #elif keymap.has_key(event.key()): + # key = keymap[event.key()] + # self.mManager.keyPress(key,0,0) + self.updateGL() + + def minimumSizeHint(self): + return QtCore.QSize(50, 50) + + def sizeHint(self): + return QtCore.QSize(400, 400) + + hack = None + + def initializeGL(self): + global terrain + global camera + global cameraPosition + global hack + print "SAMPLE: OpenGL vendor: ", GL.glGetString(GL.GL_VENDOR) + print "SAMPLE: OpenGL extensions supported: ", GL.glGetString(GL.GL_EXTENSIONS) + try: + demeter.Settings.GetInstance().Initialize() + demeter.Settings.GetInstance().SetVerbose(True) + demeter.Settings.GetInstance().SetMediaPath(os.environ["DEMETER_SAMPLE_DATA_PATH"]); + demeter.Settings.GetInstance().SetUseVertexLocking(True) + demeter.Settings.GetInstance().SetUseNormals(False) + demeter.Settings.GetInstance().SetUseBorders(False) + + + demeter.Settings.GetInstance().SetDetailTextureRepeats((512.0 * 30.0) / 64.0) + demeter.Settings.GetInstance().SetTextureCellWidth(2048) + demeter.Settings.GetInstance().SetTextureCellHeight(2048) + demeter.Settings.GetInstance().SetTextureMaskWidth(2048) + demeter.Settings.GetInstance().SetTextureMaskHeight(2048) + demeter.Settings.GetInstance().SetTextureCompression(True) + + terrain = demeter.Terrain() + #demeter.LoadRawElevations(terrain,"/home/aronb/Source/demeter.4.0/DemeterSampleData/Raid.raw",513,513,30.0,0.015,False) + demeter.LoadRawElevations(terrain,"Raid.raw",513,513,30.0,0.015,False) + #demeter.SDLTextureLoader.GetInstance().LoadTerrainTexture("RaidTexture.png", terrain) + tex_loader = demeter.PILTextureLoader.PILTextureLoader() + #(width, height, data) = tex_loader.loadImage("/home/aronb/Source/demeter.4.0/DemeterSampleData/RaidTexture.png") + (width, height) = tex_loader.LoadTerrainTexture("/home/aronb/Source/demeter.4.0/DemeterSampleData/RaidTexture.png", terrain) + #(width, height) = tex_loader.LoadTerrainTexture("/home/aronb/Source/demeter.4.0/DemeterSampleData/arctica.png", terrain) + + tex_loader.LoadMasks(terrain, "/home/aronb/Source/demeter.4.0/DemeterSampleData/RaidMask.png", + "/home/aronb/Source/demeter.4.0/DemeterSampleData/granite19.png", + "/home/aronb/Source/demeter.4.0/DemeterSampleData/grassDetail.png", + "/home/aronb/Source/demeter.4.0/DemeterSampleData/road2.png") + print "Image [%s] [%s]" % (width, height) + except Exception, ex: + print "ERROR: ", ex + + try: + MAX_VIEW_DISTANCE = 8000.0 + SKY_RED = 0.5 + SKY_GREEN = 0.75 + SKY_BLUE = 1.0 + SKY_ALPHA = 1.0 + FOG_RED = SKY_RED + FOG_GREEN = SKY_GREEN + FOG_BLUE = SKY_BLUE + FOG_ALPHA = SKY_ALPHA + ScreenWidth = 800 + ScreenHeight = 600 + terrain.SetMaximumVisibleBlockSize(128) + # Setup 3D scene + # Vanilla OpenGL setup + GL.glMatrixMode(GL.GL_PROJECTION); + GL.glLoadIdentity(); + GL.glViewport(0, 0, self.width(), self.height()); + GL.glFrustum(-0.5, 0.5, -0.5, 0.5, 0.65, MAX_VIEW_DISTANCE); + GL.glClearColor(SKY_RED, SKY_GREEN, SKY_BLUE, SKY_ALPHA); + GL.glDisable(GL.GL_NORMALIZE); + GL.glEnable(GL.GL_DEPTH_TEST); + GL.glShadeModel(GL.GL_SMOOTH); + # Setup fog + fogColor = [0, 0, 0, 0] + fogColor[0] = FOG_RED + fogColor[1] = FOG_GREEN + fogColor[2] = FOG_BLUE + fogColor[3] = FOG_ALPHA + GL.glEnable(GL.GL_FOG) + GL.glFogf(GL.GL_FOG_MODE, GL.GL_LINEAR) + GL.glFogfv(GL.GL_FOG_COLOR, fogColor); + GL.glFogf(GL.GL_FOG_START, 100.0) + GL.glFogf(GL.GL_FOG_END, MAX_VIEW_DISTANCE - 100.0) + GL.glHint(GL.GL_FOG_HINT, GL.GL_FASTEST) + + # Setup camera + cameraPosition = demeter.Vector() + cameraPosition.x = terrain.GetWidth() / 2.0 + cameraPosition.y = terrain.GetHeight() / 2.0 + cameraPosition.z = 50.0 + camera = demeter.Camera(terrain) + camera.SetPosition(cameraPosition.x, cameraPosition.y) + camera.SetHoverElevation(50.0) + except Exception, ex: + print "ERROR: ", ex + + def paintGL(self): + global terrain + global camera + if camera is not None: + # Setup viewing transformation + camera.Update() + camPos = demeter.Vector() + camera.GetPosition(camPos) + terrain.SetCameraPosition(camPos.x,camPos.y) + if terrain is not None: + #Render the terrain + terrain.SetCameraPosition(0, 0) + terrain.SetDetailThreshold(self.mThreshold) + terrain.ModelViewMatrixChanged() + GL.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT) + try: + terrain.Render() + except Exception, ex: + print "EXCEPTION: ", ex + + + def resizeGL(self, width, height): + MAX_VIEW_DISTANCE = 8000.0 + GL.glMatrixMode(GL.GL_PROJECTION); + GL.glLoadIdentity(); + GL.glViewport(0, 0, width, height) + GL.glFrustum(-0.5, 0.5, -0.5, 0.5, 0.65, MAX_VIEW_DISTANCE); + GL.glMatrixMode(GL.GL_MODELVIEW) + + + def mousePressEvent(self, event): + self.lastPos = QtCore.QPoint(event.pos()) + + def mouseMoveEvent(self, event): + dx = event.x() - self.lastPos.x() + dy = event.y() - self.lastPos.y() + + self.lastPos = QtCore.QPoint(event.pos()) + +if __name__ == '__main__': + app = QtGui.QApplication(sys.argv) + window = Window() + window.show() + + if not os.environ.has_key("DEMETER_SAMPLE_DATA_PATH"): + exit(9) + + + sys.exit(app.exec_()) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |