Changeset 366
- Timestamp:
- 11/11/02 17:48:30 (6 years ago)
- Files:
-
- trunk/RBRapier/RBRapier/Formats/Lightwave/Loader.py (modified) (3 diffs)
- trunk/RBRapier/RBRapier/Formats/Lightwave/MeshedObject.py (modified) (11 diffs)
- trunk/RBRapier/RBRapier/Formats/Wavefront/MeshedObject.py (modified) (2 diffs)
- trunk/RBRapier/RBRapier/Tools/Geometry/Analysis/TriangleLister.py (modified) (1 diff)
- trunk/RBRapier/RBRapier/Tools/Geometry/Analysis/TriangleMesh.py (modified) (2 diffs)
- trunk/RBRapier/RBRapier/Tools/Geometry/Analysis/TriangleStripifier.py (modified) (10 diffs)
- trunk/RBRapier/RBRapier/Tools/Geometry/ConvexPolygonTesselation.py (modified) (1 diff)
- trunk/RBRapier/RBRapier/Tools/Geometry/Synthesis/VertexNormals.py (modified) (4 diffs)
- trunk/RBRapier/RBRapier/Tools/Vector.py (modified) (1 diff)
- trunk/RBRapier/demo/Lightwave/scene.py (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/RBRapier/RBRapier/Formats/Lightwave/Loader.py
r363 r366 109 109 self.Faces = [] 110 110 111 def ReadFormat(self, SurfaceDefChunk ):111 def ReadFormat(self, SurfaceDefChunk, TaskProgress=None): 112 112 FormatMap = { 113 113 'COLR': ('BaseColor', '>BBBB'), … … 157 157 158 158 class _LWOFace(object): 159 def ReadFormat(self, FacesChunk ):159 def ReadFormat(self, FacesChunk, TaskProgress=None): 160 160 NumIndices = struct.unpack(">H", FacesChunk.read(2))[0] 161 161 self.IndexList = [struct.unpack(">H", FacesChunk.read(2))[0] for each in xrange(NumIndices)] … … 186 186 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 187 187 188 def ReadFormat(self, LightwaveLWOFile ):188 def ReadFormat(self, LightwaveLWOFile, TaskProgress=None): 189 189 self.Name = None 190 190 self.Vertices = [] trunk/RBRapier/RBRapier/Formats/Lightwave/MeshedObject.py
r364 r366 34 34 from RBRapier.Tools.Geometry.Analysis import LocalityRemapper 35 35 from RBRapier.Tools.Geometry.Synthesis import VertexNormals 36 36 37 from RBRapier.Tools.Geometry.ConvexPolygonTesselation import TesselateConvexPolygon 38 #from RBRapier.Tools.Geometry.PolygonTesselation import PolygonTesselation 37 39 38 40 from RBRapier.Renderer.Geometry import VertexArrays … … 52 54 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 53 55 54 def copyattr(From, FromName, To, ToName='', call=lambda x:x): 55 ToName = ToName or FromName 56 try: value = getattr(From, FromName) 57 except AttributeError: return 0 58 setattr(To, ToName, call(value)) 59 return 1 56 from Foundation import TaskProgress 57 class PrintOnTaskProgress(TaskProgress.TaskProgress): 58 Indent = 0 59 def __init__(self, *args, **kw): 60 TaskProgress.TaskProgress.__init__(self, *args, **kw) 61 self.OnProgress.Add(self._OnProgress) 62 self.OnAddSubtask.Add(self._OnAddSubtask) 63 self._OnProgress(self, self.Progress) 64 def _OnProgress(self, task, progress): 65 print '%s[%4.0f] %-20s (%s)' % (' ' * task.Indent, 100*task.Percent, task.Name, id(task)) 66 def _OnAddSubtask(self, parent, child): 67 child.Indent = parent.Indent + 1 68 print 69 #if parent is self: 70 # child.OnAddSubtask.Add(self._OnAddSubtask) 71 child.OnProgress.Add(self._OnProgress) 72 self._OnProgress(child, child.Progress) 73 74 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 60 75 61 76 class MeshedObjectBuilder(object): … … 66 81 GeoObjectFactory = GeoObject.GeoObject 67 82 IndexedTraversal = ArrayTraversal.IndexedCollectionTraversal 83 TaskProgress = PrintOnTaskProgress('Lightwave Meshed Object', 0., 1., 20) 68 84 69 85 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ … … 136 152 scale = getattr(Group, 'iSpecular') / 256. 137 153 Group.Material.Specular = BaseColor * scale 138 copyattr(Group, 'Shininess', Group.Material) 154 155 shininess = getattr(Group, 'Shininess', None) 156 if shininess is not None: 157 Group.Material.Shininess = shininess 139 158 except AttributeError: pass 140 159 … … 150 169 def Load(self, FileInFormat): 151 170 obj = Loader.LightwaveLWOLoader() 152 obj.ReadFormat(FileInFormat )171 obj.ReadFormat(FileInFormat, TaskProgress=self.TaskProgress) 153 172 154 173 self.Name = FileInFormat.name … … 156 175 self.SurfaceGroups = obj.Surfaces.values() 157 176 177 if self.TaskProgress: 178 for each in self.SurfaceGroups: 179 each.SurfaceTask = self.TaskProgress.NewSubtask('Surface %s'%each.Name, 0., 1.) 180 else: 181 for each in self.SurfaceGroups: 182 each.SurfaceTask = None 183 158 184 def SimpleMesh(self): 159 185 TriLister = TriangleLister.TriangleLister() 160 self.TraverseMesh(TriangleMesh.FaceMesh, TriLister )186 self.TraverseMesh(TriangleMesh.FaceMesh, TriLister, 'SimpleList') 161 187 162 188 def OptimizeMesh(self, level): 163 189 TriStripifier = TriangleStripifier.TriangleStripifier() 164 190 TriStripifier.Selector = TriangleStripifier.ExperimentSelector(level, 3) 165 self.TraverseMesh(TriangleMesh.FaceEdgeMesh, TriStripifier) 166 167 def TraverseMesh(self, MeshFactory, TraversalMaker): 191 self.TraverseMesh(TriangleMesh.FaceEdgeMesh, TriStripifier, 'TriStrip') 192 193 def TraverseMesh(self, MeshFactory, TraversalMaker, TraverseMethodName): 194 #PolyTesselator = PolygonTesselation() 168 195 VNSythesisMgr = VertexNormals.VertexNormalSynthesisMgr(self.Vertices) 169 196 for Group in self.SurfaceGroups: 170 197 VNSythesisMgr.SetTolerance(getattr(Group, 'SmoothingAngle', None)) 171 198 172 if not Group.Faces: 173 Group.Traversals = {} 174 else: 175 mesh = MeshFactory() 176 for FaceTraversal in Group.Faces: 199 if Group.SurfaceTask: 200 Subtask = Group.SurfaceTask.NewSubtask('Meshing and tesselation', 0, len(Group.Faces)) 201 else: Subtask = 0 202 203 mesh = MeshFactory() 204 for FaceTraversal in Group.Faces: 205 count = len(FaceTraversal.IndexList) 206 if count > 3: 207 # Yuck. Polygons. We should tesselate them, but that's not too easy 177 208 FaceTraversal = TesselateConvexPolygon(FaceTraversal.IndexList) 209 #FaceTraversal = PolyTesselator.TesselatePolygon(FaceTraversal.IndexList, self.Vertices) 178 210 for each in FaceTraversal: 179 211 each = VNSythesisMgr.VisitTriangle(*each) 180 face = mesh.AddFace(*each) 181 182 if __debug__: 183 print '%-20s[%6d]: ' % (Group.Name, len(mesh.Faces)*3), 184 Group.Traversals = TraversalMaker(mesh, OnProgress=TriangleStripifier.PrintOnProgress(0)) 185 print " [", 186 for name, each in Group.Traversals.iteritems(): 187 try: 188 count = 0 189 maxcount = 0 190 for e in each: 191 count += len(e) 192 maxcount = max(maxcount, len(e)) 193 print '%s=%d (%d, %1.1f, %d),' % (name, len(each), count, count/float(len(each) or 1.), maxcount), 194 except TypeError: 195 print '%s=%d (%d),' % (name, 1, len(each)), 196 print "]" 197 else: 198 Group.Traversals = TraversalMaker(mesh) 212 if each: face = mesh.AddFace(*each) 213 elif count == 3: 214 # Triangles are easy =) wish they were all triangles... 215 each = VNSythesisMgr.VisitTriangle(*FaceTraversal.IndexList) 216 if each: face = mesh.AddFace(*each) 217 # Update our progress 218 Subtask += 1 219 220 if not mesh.Faces: 221 Group.Traversals = {} 222 else: 223 if Group.SurfaceTask: 224 Subtask = Group.SurfaceTask#.NewSubtask('Mesh traversal (%s)' % TraverseMethodName, 0, 1.) 225 else: Subtask = None 226 Group.Traversals = dict(TraversalMaker(mesh, TaskProgress=Subtask)) 199 227 200 228 Vertices, Normals = VNSythesisMgr.GetResultantArrays() … … 204 232 def SimpleTraversals(self): 205 233 for Group in self.SurfaceGroups: 234 if Group.SurfaceTask: 235 Subtask = Group.SurfaceTask.NewSubtask('Simple index traversal', 0, 3) 236 else: Subtask = 0 237 206 238 listdata = Group.Traversals.get('list') 207 239 if listdata: 208 240 Group.Traversals['list'] = self.IndexedTraversal('trilist', [listdata]) 241 elif listdata is not None: 242 del Group.Traversals['list'] 243 Subtask += 1 209 244 210 245 fandatacollection = Group.Traversals.get('fan') 211 246 if fandatacollection: 212 247 Group.Traversals['fan'] = self.IndexedTraversal('tristrip', fandatacollection) 248 elif fandatacollection is not None: 249 del Group.Traversals['fan'] 250 Subtask += 1 213 251 214 252 stripdatacollection = Group.Traversals.get('strip') 215 253 if stripdatacollection: 216 254 Group.Traversals['strip'] = self.IndexedTraversal('tristrip', stripdatacollection) 255 elif stripdatacollection is not None: 256 del Group.Traversals['strip'] 257 Subtask += 1 217 258 218 259 def OptimizeTraversals(self, level): … … 220 261 221 262 for Group in self.SurfaceGroups: 263 if Group.SurfaceTask: 264 Subtask = Group.SurfaceTask.NewSubtask('Locality optimizing index traversal', 0, 3) 265 else: Subtask = 0 266 222 267 listdata = Group.Traversals.get('list') 223 268 if listdata: … … 226 271 elif listdata is not None: 227 272 del Group.Traversals['list'] 273 Subtask += 1 228 274 229 275 fandatacollection = Group.Traversals.get('fan') … … 234 280 elif fandatacollection is not None: 235 281 del Group.Traversals['fan'] 282 Subtask += 1 236 283 237 284 stripdatacollection = Group.Traversals.get('strip') … … 242 289 elif stripdatacollection is not None: 243 290 del Group.Traversals['strip'] 244 291 Subtask += 1 292 293 if self.TaskProgress: 294 OptimizingSubtask = self.TaskProgress.NewSubtask('Index locality optimization', 0, 2*len(self.Vertices.data)) 295 else: OptimizingSubtask = 0 245 296 optimizer.RemapIndices(self.Vertices.data) 297 OptimizingSubtask += len(self.Vertices.data) 298 optimizer.RemapIndices(self.Normals.data) 299 OptimizingSubtask += len(self.Normals.data) 246 300 247 301 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trunk/RBRapier/RBRapier/Formats/Wavefront/MeshedObject.py
r362 r366 170 170 if __debug__: 171 171 print '%-20s[%6d]: ' % (Group.Names[0], len(mesh.Faces)*3), 172 Group.Traversals = TraversalMaker(mesh, OnProgress=TriangleStripifier.PrintOnProgress(0))172 Group.Traversals = dict(TraversalMaker(mesh, OnProgress=TriangleStripifier.PrintOnProgress(0))) 173 173 print " [", 174 174 for name, each in Group.Traversals.iteritems(): … … 184 184 print "]" 185 185 else: 186 Group.Traversals = TraversalMaker(mesh)186 Group.Traversals = dict(TraversalMaker(mesh)) 187 187 188 188 def SimpleTraversals(self): trunk/RBRapier/RBRapier/Tools/Geometry/Analysis/TriangleLister.py
r345 r366 25 25 26 26 class TriangleLister(object): 27 def __call__(self, mesh, OnProgress):27 def __call__(self, mesh, TaskProgress): 28 28 result = [] 29 if OnProgress: 30 lenFaces = len(mesh.Faces) * 1.1 31 threshold = lenFaces / 110 32 totalcount = lenFaces / 11. 33 count = 0 29 if TaskProgress: 30 TaskProgress.SetProgressRange(0, len(mesh.Faces)/.9) 34 31 mesh.Faces.sort() 35 OnProgress(totalcount/lenFaces)32 TaskProgress.Percentage = 0.1 36 33 for face in mesh.Faces: 37 34 result.extend(face.v) 38 count += 1 39 if count > threshold: 40 totalcount += count 41 count = 0 42 OnProgress(totalcount/lenFaces) 35 TaskProgress += 1 43 36 else: 44 37 mesh.Faces.sort() 45 38 for face in mesh.Faces: 46 39 result.extend(face.v) 47 return {'list': result}40 return [('list', result)] 48 41 42 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 43 #~ Optimization 44 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 45 46 try: import psyco 47 except ImportError: pass 48 else: 49 psyco.bind(TriangleLister) 50 trunk/RBRapier/RBRapier/Tools/Geometry/Analysis/TriangleMesh.py
r364 r366 151 151 152 152 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 153 154 153 155 154 class FaceEdgeMesh(FlyweightGroupObject): … … 225 224 226 225 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 226 #~ Optimization 227 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 228 229 try: import psyco 230 except ImportError: pass 231 else: 232 psyco.bind(Edge) 233 psyco.bind(Face) 234 psyco.bind(EdgedFace) 235 psyco.bind(FaceMesh) 236 psyco.bind(FaceEdgeMesh) 237 238 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 227 239 #~ Testing 228 240 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trunk/RBRapier/RBRapier/Tools/Geometry/Analysis/TriangleStripifier.py
r362 r366 32 32 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 33 33 34 def _GetNextIndex(indicies, face):35 return face.OtherVertex(*indicies[-2:])36 37 34 def _FindOtherFace(ev0, ev1, face): 38 35 try: … … 165 162 while NextFace and not self.IsFaceMarked(NextFace): 166 163 if not BreakTest(NextFace): break 167 nv0, nv1 = nv1, _GetNextIndex(Indices, NextFace)164 nv0, nv1 = nv1, NextFace.OtherVertex(*Indices[-2:]) 168 165 FaceList.append(NextFace) 169 166 self.MarkFace(FaceList[-1]) … … 174 171 175 172 v0,v1 = self.StartEdgeOrder 176 v2 = _GetNextIndex((v0,v1), self.StartFace)173 v2 = self.StartFace.OtherVertex(v0,v1) 177 174 self.MarkFace(self.StartFace) 178 175 ForwardFaces.append(self.StartFace) … … 188 185 return self.Faces 189 186 190 def Commit(self ):187 def Commit(self, TaskProgress=None): 191 188 del self.ExperimentId 192 return len(map(self.MarkFace, self.Faces)) 189 count = len(map(self.MarkFace, self.Faces)) 190 if TaskProgress: 191 TaskProgress += count 192 return self 193 193 194 194 def TraingleListIndices(self): … … 323 323 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 324 324 325 def Stripify(self, mesh, OnProgress=None):325 def Stripify(self, mesh, TaskProgress=None): 326 326 self.TriangleList = [] 327 327 self.TriangleStrips = [] … … 329 329 330 330 # TODO: Could find triangle fans here 331 Strips = self._FindAllStrips(mesh, OnProgress) 332 331 Strips = self._FindAllStrips(mesh, TaskProgress) 333 332 for strip in Strips: 334 333 if len(strip.Faces) < self.Selector.MinStripLength: … … 337 336 self.TriangleStrips.append(strip.TriangleStripIndices()) 338 337 339 result = {'list': self.TriangleList, 'strip':self.TriangleStrips}#, 'fan':self.TriangleFans }338 result = [('list', self.TriangleList), ('strip', self.TriangleStrips)]#, ('fan',self.TriangleFans) ] 340 339 return result 341 340 342 341 __call__ = Stripify 343 342 344 def StripifyIter(self, mesh, OnProgress=None):343 def StripifyIter(self, mesh, TaskProgress=None): 345 344 # TODO: Could find triangle fans here 346 Strips = self._FindAllStrips(mesh, OnProgress) 347 345 Strips = self._FindAllStrips(mesh, TaskProgress) 348 346 for strip in Strips: 349 347 if len(strip.Faces) < self.Selector.MinStripLength: … … 426 424 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 427 425 428 def _FindAllStrips(self, mesh, OnProgress):426 def _FindAllStrips(self, mesh, TaskProgress): 429 427 selector = self.Selector 430 TotalFaces = len(mesh.Faces)428 bCleanFaces = getattr(mesh, 'CleanFaces', 0) 431 429 GoodResetPoints = self._FindGoodResetPoint(mesh) 432 430 experimentId = _Counter() 433 431 stripId = _Counter() 434 FacesComplete = 0. 435 #result = [] 432 433 StripifyTask = 0 434 CleanFacesTask = 0 435 if TaskProgress: 436 StripifyTask = TaskProgress.NewSubtask("Stripify triangles", 0, len(mesh.Faces)) 437 if bCleanFaces: 438 CleanFacesTask = TaskProgress.NewSubtask("Clean faces", 0, len(mesh.Faces)) 436 439 437 440 try: … … 476 479 # Get the best experiment according to the selector 477 480 BestExperiment = selector.Result() 478 479 481 # And commit it to the resultset 480 482 for each in BestExperiment: 481 FacesComplete += each.Commit() 482 yield each 483 #result.extend(BestExperiment) 484 485 # and update anyone watching 486 if OnProgress: OnProgress(FacesComplete / TotalFaces) 483 yield each.Commit(StripifyTask) 484 del BestExperiment 487 485 except StopIteration: 488 486 pass 489 487 490 if getattr(mesh, 'CleanFaces', 0):488 if bCleanFaces: 491 489 for face in mesh.Faces: 492 490 try: del face.StripId 493 491 except AttributeError: pass 494 495 #return result 492 CleanFacesTask += 1 496 493 497 494 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ … … 516 513 517 514 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 515 #~ Optimization 516 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 517 518 try: import psyco 519 except ImportError: pass 520 else: 521 psyco.bind(TriangleStrip) 522 psyco.bind(ExperimentSelector) 523 psyco.bind(TriangleStripifier) 524 psyco.bind(_FindOtherFace) 525 526 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 518 527 #~ Testing 519 528 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trunk/RBRapier/RBRapier/Tools/Geometry/ConvexPolygonTesselation.py
r362 r366 50 50 return result 51 51 52 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 53 #~ Title 54 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 55 56 try: import psyco 57 except ImportError: pass 58 else: 59 psyco.bind(TesselateConvexPolygon) 52 60 53 61 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trunk/RBRapier/RBRapier/Tools/Geometry/Synthesis/VertexNormals.py
r364 r366 54 54 55 55 def SetResults(self, VertexData, NormalData): 56 srcVertex = self.owner.VertexData[self.idx] 56 57 for idx, normal in self.Normals.iteritems(): 57 try: normal.iNormalize() 58 except ValueError: 59 normal 60 VertexData[idx] = self.owner.VertexData[self.idx] 61 NormalData[idx] = normal.asarray() 58 VertexData[idx] = srcVertex 59 NormalData[idx] = normal.Normalize().asarray() 62 60 63 61 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ … … 80 78 81 79 def GetResultantArrays(self): 82 print len(self.VertexData), self.NextVertexIdx 83 self.NormalData = [None for i in xrange(self.NextVertexIdx)] 80 #print len(self.VertexData), self.NextVertexIdx 81 defval = (0.,0.,0.) 82 self.NormalData = [defval for i in xrange(self.NextVertexIdx)] 84 83 self.VertexData.extend(self.NormalData[len(self.VertexData):]) 85 84 for vertex in self.Vertices: … … 88 87 89 88 def VisitTriangle(self, vi0, vi1, vi2): 89 if vi0==vi1 or vi1==vi2 or vi2==vi0: 90 print "Degenerate triangle found" 91 return None 90 92 normal = self._CalculateNormal(vi0, vi1, vi2) 91 93 vi0 = self.Vertices[vi0].IntegrateNormal(normal) … … 107 109 e01 = (Vector3(self.VertexData[vi1]) - vector0).Normalize() 108 110 e02 = (Vector3(self.VertexData[vi2]) - vector0).Normalize() 109 #normal = e01.Cross3(e02).Normalize() 110 normal = e01.Cross3(e02) 111 normal = e01.Cross3(e02)#.Normalize() 111 112 return normal 112 113 114 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 115 #~ Optimization 116 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 117 118 try: import psyco 119 except ImportError: pass 120 else: 121 psyco.bind(Vertex) 122 psyco.bind(VertexNormalSynthesisMgr) 123 trunk/RBRapier/RBRapier/Tools/Vector.py
r362 r366 42 42 a2, b2, c2 = v2 43 43 return (b1*c2-c1*b2, c1*a2-a1*c2, a1*b2-b1*a2) 44 45 def CrossMag3(v1, v2): 46 a1, b1, c1 = v1 47 a2, b2, c2 = v2 48 return Numeric.sqrt((b1*c2-c1*b2)**2 + (c1*a2-a1*c2)**2 + (a1*b2-b1*a2)**2) 44 49 45 50 def DotCross3(v1, v2): trunk/RBRapier/demo/Lightwave/scene.py
r364 r366 51 51 self.Sequence = SequenceMgr.RootSequence() 52 52 53 self.ClearColor = Buffers.ClearColor( )#(0.5,0.5,1.0,1.0))54 self.Sequence.AddElement(self.ClearColor , -2)53 self.ClearColor = Buffers.ClearColor((0.,0.,0.,0.)) 54 self.Sequence.AddElement(self.ClearColor.Execute, -2) 55 55 self.ClearDepth = Buffers.ClearDepth(1.) 56 self.Sequence.AddElement(self.ClearDepth , -2)56 self.Sequence.AddElement(self.ClearDepth.Execute, -2) 57 57 self.DepthTest = FragmentTests.DepthTest() 58 58 self.Sequence.AddElement(self.DepthTest.Select, -1) … … 89 89 return GeoObj 90 90 91 frustum = (-1,1,-1,1,1,100) 92 xlate = (0,0,-30) 93 rotate = (30, 1,0,0) 91 94 def Render(self, subject, canvas): 92 95 self.Viewport.SetRectangle(canvas.GetClientRect().asTuple()) … … 107 110 #GL.glOrtho(-0.5,0.5,-0.25,0.75,-1,1) 108 111 112 # Large 113 #GL.glFrustum(*self.frustum) 114 #GL.glTranslatef(*self.xlate) 115 #GL.glRotatef(*self.rotate) 116 109 117 GL.glMatrixMode(GL.GL_MODELVIEW) 110 118 GL.glRotatef(1., 0, 1, 0)
