Author: JaroslawTworek
Date: 2008-02-18 03:09:44 -0500 (Mon, 18 Feb 2008)
New Revision: 934

Modified:
   trunk/pysoy/examples/vid_canvas.py
   trunk/pysoy/src/_datatypes/VertexList.pxi
   trunk/pysoy/src/widgets/Canvas.pxi
Log:
Canvas bugfix + my work in progress about bumpmapping


Modified: trunk/pysoy/examples/vid_canvas.py
===================================================================
--- trunk/pysoy/examples/vid_canvas.py  2008-02-18 07:32:06 UTC (rev 933)
+++ trunk/pysoy/examples/vid_canvas.py  2008-02-18 08:09:44 UTC (rev 934)
@@ -17,4 +17,4 @@
 
 if __name__ == '__main__' :
   while True:
-    sleep(10)
+    sleep(0.3)

Modified: trunk/pysoy/src/_datatypes/VertexList.pxi
===================================================================
--- trunk/pysoy/src/_datatypes/VertexList.pxi   2008-02-18 07:32:06 UTC (rev 
933)
+++ trunk/pysoy/src/_datatypes/VertexList.pxi   2008-02-18 08:09:44 UTC (rev 
934)
@@ -201,53 +201,80 @@
     #stdlib.free( fog_coord_array)
 
   cdef void _calculateTSLV(self, void* body):
-    cdef soy.bodies._bodies.Body _body
-    cdef soy.scenes.Scene        _scene
-    cdef soy.bodies.lights.Light _light
-    cdef ode.dVector3            _light_pos
-    cdef float                   _inv_mm[16]
-    cdef float                   _model_light_pos[3]
-    cdef float                   _binormal[3]
-    cdef int                     i
-    _body = <soy.bodies._bodies.Body> body
-    _scene = _body._scene
-    if _scene._lights.current > 0:
-      _light = <soy.bodies.lights.Light> _scene._lights.list[0]
-      ode.dBodyCopyPosition(<ode.dBodyID> _light._bodyID, _light_pos)
-      _body._coreGetModelviewInv(_inv_mm)
-      #vector by matrix multiplication by hand
-      _model_light_pos[0] = _inv_mm[0]  * _light_pos[0] + \
-                            _inv_mm[4]  * _light_pos[1] + \
-                            _inv_mm[8]  * _light_pos[2] + \
-                            _inv_mm[12] 
-      _model_light_pos[1] = _inv_mm[1]  * _light_pos[0] + \
-                            _inv_mm[5]  * _light_pos[1] + \
-                            _inv_mm[9]  * _light_pos[2] + \
-                            _inv_mm[13] 
-      _model_light_pos[2] = _inv_mm[2]  * _light_pos[0] + \
-                            _inv_mm[6]  * _light_pos[1] + \
-                            _inv_mm[10] * _light_pos[2] + \
-                            _inv_mm[14]
-      for i from 0 <= i < self._arraySize:
-        _binormal[0] = self._array[i].tan_y * self._array[i].nz - \
-                       self._array[i].tan_z * self._array[i].ny
-        _binormal[1] = self._array[i].tan_z * self._array[i].nx - \
-                       self._array[i].tan_x * self._array[i].nz
-        _binormal[2] = self._array[i].tan_x * self._array[i].ny - \
-                       self._array[i].tan_y * self._array[i].nx
-        self._tslvArray[3*i + 0] = _model_light_pos[0] * self._array[i].tan_x 
+ \
-                                   _model_light_pos[1] * self._array[i].tan_y 
+ \
-                                   _model_light_pos[2] * self._array[i].tan_z
-        self._tslvArray[3*i + 1] = _model_light_pos[0] * _binormal[0] + \
-                                   _model_light_pos[1] * _binormal[1] + \
-                                   _model_light_pos[2] * _binormal[2]
-        self._tslvArray[3*i + 2] = _model_light_pos[0] * self._array[i].nx + \
-                                   _model_light_pos[1] * self._array[i].ny + \
-                                   _model_light_pos[2] * self._array[i].nz
-        if self._bufferAlloc:
-          gl.glBindBufferARB  (gl.GL_ARRAY_BUFFER_ARB, self._buffer)
-          gl.glBufferSubDataARB(gl.GL_ARRAY_BUFFER_ARB, 
-                                (sizeof(Vert)+4) * self._bufferAlloc,
-                                12*self._bufferAlloc, self._tslvArray)
-    else:
-      return
+      cdef soy.bodies._bodies.Body _body
+      cdef soy.scenes.Scene        _scene
+      cdef soy.bodies.lights.Light _light
+      cdef ode.dVector3            _light_pos
+      cdef float                   _inv_mm[16]
+      cdef float                   _model_light_pos[3]
+      cdef float                   _vert_light_pos[3]
+      cdef float                   _binormal[3]
+      cdef float                   _lgt
+      cdef int                     i
+
+      _body = <soy.bodies._bodies.Body> body
+      _scene = _body._scene
+
+      if _scene._lights.current > 0:
+          _light = <soy.bodies.lights.Light> _scene._lights.list[0]
+          ode.dBodyCopyPosition(<ode.dBodyID> _light._bodyID, _light_pos)
+          _body._coreGetModelviewInv(_inv_mm)
+
+          #vector by matrix multiplication by hand
+          _model_light_pos[0] = _inv_mm[0]  * (_light_pos[0] + _inv_mm[12]) + \
+                                _inv_mm[4]  * (_light_pos[1] + _inv_mm[13]) + \
+                                _inv_mm[8]  * (_light_pos[2] + _inv_mm[14]) 
+
+          _model_light_pos[1] = _inv_mm[1]  * (_light_pos[0] + _inv_mm[12]) + \
+                                _inv_mm[5]  * (_light_pos[1] + _inv_mm[13]) + \
+                                _inv_mm[9]  * (_light_pos[2] + _inv_mm[14]) 
+
+          _model_light_pos[2] = _inv_mm[2]  * (_light_pos[0] + _inv_mm[12]) + \
+                                _inv_mm[6]  * (_light_pos[1] + _inv_mm[13]) + \
+                                _inv_mm[10] * (_light_pos[2] + _inv_mm[14])
+
+          for i from 0 <= i < self._arraySize:
+              _vert_light_pos[0] = _model_light_pos[0] - self._array[i].px
+              _vert_light_pos[1] = _model_light_pos[1] - self._array[i].py
+              _vert_light_pos[2] = _model_light_pos[2] - self._array[i].pz
+
+              _lgt = stdlib.sqrtf( _vert_light_pos[0]*_vert_light_pos[0] + 
_vert_light_pos[1] * _vert_light_pos[1] + _vert_light_pos[2]*_vert_light_pos[2])
+
+              _vert_light_pos[0] = _vert_light_pos[0] / _lgt
+              _vert_light_pos[1] = _vert_light_pos[1] / _lgt
+              _vert_light_pos[2] = _vert_light_pos[2] / _lgt
+
+              _binormal[0] = self._array[i].tan_y * self._array[i].nz - \
+                             self._array[i].tan_z * self._array[i].ny
+
+              _binormal[1] = self._array[i].tan_z * self._array[i].nx - \
+                             self._array[i].tan_x * self._array[i].nz
+
+              _binormal[2] = self._array[i].tan_x * self._array[i].ny - \
+                             self._array[i].tan_y * self._array[i].nx
+              
+              self._tslvArray[3*i + 0] = (_vert_light_pos[0] * 
self._array[i].tan_x + \
+                                         _vert_light_pos[1] * 
self._array[i].tan_y + \
+                                         _vert_light_pos[2] * 
self._array[i].tan_z)
+
+              self._tslvArray[3*i + 1] = (_vert_light_pos[0] * _binormal[0] + \
+                                          _vert_light_pos[1] * _binormal[1] + \
+                                          _vert_light_pos[2] * _binormal[2])
+
+              self._tslvArray[3*i + 2] = (_vert_light_pos[0] * 
self._array[i].nx + \
+                                         _vert_light_pos[1] * 
self._array[i].ny + \
+                                         _vert_light_pos[2] * 
self._array[i].nz)
+              
+              #self._tslvArray[3*i + 0] = 0
+              #self._tslvArray[3*i + 1] = 0
+              #self._tslvArray[3*i + 2] = 1
+              if self._bufferAlloc:
+                  gl.glBindBufferARB  (gl.GL_ARRAY_BUFFER_ARB, self._buffer)
+                  gl.glBufferSubDataARB(gl.GL_ARRAY_BUFFER_ARB, 
(sizeof(Vert)+4) * self._bufferAlloc,
+                          12*self._bufferAlloc, self._tslvArray )
+
+      else:
+          self._tslvArray[3*i + 0] = 0
+          self._tslvArray[3*i + 1] = 0
+          self._tslvArray[3*i + 2] = 1
+

Modified: trunk/pysoy/src/widgets/Canvas.pxi
===================================================================
--- trunk/pysoy/src/widgets/Canvas.pxi  2008-02-18 07:32:06 UTC (rev 933)
+++ trunk/pysoy/src/widgets/Canvas.pxi  2008-02-18 08:09:44 UTC (rev 934)
@@ -93,9 +93,10 @@
       gl.glBindBufferARB  (gl.GL_ELEMENT_ARRAY_BUFFER_ARB, 0)
       gl.glBindBufferARB  (gl.GL_ARRAY_BUFFER_ARB, 0)
 
-    gl.glVertexPointer  (3,  gl.GL_FLOAT, 36, &self._verts[0].px)
-    gl.glNormalPointer  (    gl.GL_FLOAT, 36, &self._verts[0].nx)
-    gl.glTexCoordPointer(3,  gl.GL_FLOAT, 36, &self._verts[0].tx)
+    gl.glVertexPointer  (3,  gl.GL_FLOAT, 48, &self._verts[0].px)
+    gl.glNormalPointer  (    gl.GL_FLOAT, 48, &self._verts[0].nx)
+    gl.glTexCoordPointer(3,  gl.GL_FLOAT, 48, &self._verts[0].tx)
+
     gl.glDrawElements   (gl.GL_TRIANGLES, 6, gl.GL_UNSIGNED_SHORT, 
                          <unsigned short *> self._faces)
 

_______________________________________________
PySoy-SVN mailing list
PySoy-SVN@pysoy.org
http://www.pysoy.org/mailman/listinfo/pysoy-svn

Reply via email to