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