From 8542fd5750f9e419e1bd9d073e8a4e7416431519 Mon Sep 17 00:00:00 2001 From: Brian Caine Date: Mon, 10 Dec 2007 18:03:15 -0500 Subject: [PATCH] Did a little Camera/Engine work. You can move around. I think. --- demo/Engine.py | 5 ++-- demo/Engine.py~ | 68 +++++++++++++++++++++++++++++++++++++++---- demo/Entity.py | 1 + demo/Transform.py | 13 +++++++-- demo/pack/pack.zip | Bin 3283 -> 0 bytes demo/pack_out/scripts/cam.py | 8 +++-- 6 files changed, 84 insertions(+), 11 deletions(-) delete mode 100644 demo/pack/pack.zip diff --git a/demo/Engine.py b/demo/Engine.py index 7ad8c43..bcec573 100644 --- a/demo/Engine.py +++ b/demo/Engine.py @@ -295,9 +295,10 @@ class Engine: # something temporary glColor3f(1.0, 0, 0) + glLoadIdentity() + self.camera_pos.transform() + for obj in self.objects: - glLoadIdentity() - self.camera_pos.transform() obj.draw(self) # also temp diff --git a/demo/Engine.py~ b/demo/Engine.py~ index 69abb6d..7ad8c43 100644 --- a/demo/Engine.py~ +++ b/demo/Engine.py~ @@ -25,6 +25,10 @@ from OpenGL.GL import * import OpenGL.GLU from OpenGL.GLU import * +import Dice3DS +from Dice3DS import dom3ds, util +from Dice3DS.example import glmodel, gltexture + from zipfile import * import copy @@ -32,8 +36,11 @@ import copy from xml.dom.minidom import parse, parseString from experimental import * +from Transform import Transformation from ThreadQueue import ThreadQueue +from Entity import * + def main(): print "Engine.py class... more documentation to come" @@ -80,6 +87,8 @@ class Engine: glDepthFunc(GL_LEQUAL) glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST) + self.camera_pos = Transformation() + # more stuff if self.config.has_key('window_title'): @@ -123,6 +132,10 @@ class Engine: for item in self.zipfiles[-1].namelist(): self.filelist[item] = "self.zipfiles[" + str(len(self.zipfiles) - 1) + "].read(\"" + item + "\")" + self.texcache = {} + + # file stuff + self.files = {} self.menudefs = {} @@ -150,7 +163,7 @@ class Engine: 'menu_def': {}, 'object_def': {}, 'menu_instance': {}, - 'object_instance': {}, + 'object_instance': [], 'parent': None, 'children': []} @@ -179,13 +192,27 @@ class Engine: # do instance stuff here for item in instances: - print "debug", item + if item[0] == 'object': + print "debug", item + + assert item[1]['contents'] in self.objectdefs.keys() + + d = {} + for n in item[1].keys(): + d[n] = item[1][n] + + for n in self.objectdefs[item[1]['contents']].keys(): + d[n] = self.objectdefs[item[1]['contents']][n] + + nobject = Entity(self, d) + results['object_instance'].append(nobject) + self.objects.append(nobject) results['parent'] = parent if not parent == '': self.files[parent]['children'].append(filename) - self.files[filename] = copy.deepcopy(results) + self.files[filename] = results return 1 @@ -196,6 +223,29 @@ class Engine: assert filename in self.filelist.keys() return eval(self.filelist[filename]) + def loadTexture(self, filename): + + if self.texcache.has_key(filename): + return texcache[filename] + + tex = None + + try: + data = self.readZipfile(filename) + except: + print "Engine.loadTexture(): No file", filename + return tex + + try: + tex = gltexture.Texture(data) + except: + print "Engine.loadTexture(): Error making texture from", filename + return tex + + self.texcache[filename] = tex + + return tex + def run(self): if self.event_queue == None: @@ -240,10 +290,18 @@ class Engine: def draw(self): glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT) - glLoadIdentity() + glMatrixMode(GL_MODELVIEW) + + # something temporary + glColor3f(1.0, 0, 0) for obj in self.objects: - obj.draw() + glLoadIdentity() + self.camera_pos.transform() + obj.draw(self) + + # also temp + d() glLoadIdentity() if self.change: diff --git a/demo/Entity.py b/demo/Entity.py index 347bb9f..7e3ab47 100644 --- a/demo/Entity.py +++ b/demo/Entity.py @@ -60,6 +60,7 @@ class Entity: self.position.transform() self.model.render() + self.position.negate_transform() return diff --git a/demo/Transform.py b/demo/Transform.py index 19dc6b2..a6e3694 100644 --- a/demo/Transform.py +++ b/demo/Transform.py @@ -10,9 +10,9 @@ def main(): class Transformation: - def __init__(self, (x, y,z)=(0, 0, 0), (rotx, roty, rotz)=(0, 0, 0)): + def __init__(self, (x, y, z)=[0, 0, 0], (rotx, roty, rotz)=[0, 0, 0]): - self.pos = [x, y, z] + self.pos = list([x, y, z]) self.rot = [rotx, roty, rotz] def negate(self): @@ -38,10 +38,19 @@ class Transformation: def negate_transform(self): + self.fix() + self.negate() self.transform() self.negate() return + def fix(self): + + self.pos = list(self.pos) + self.rot = list(self.rot) + + return + if __name__ == '__main__': main() diff --git a/demo/pack/pack.zip b/demo/pack/pack.zip deleted file mode 100644 index 29e12df1e72415d2d08648b0402979103ef6b5ee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcwPel00001 literal 3283 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