Author: DavidCzech Date: 2008-11-30 22:04:39 -0500 (Sun, 30 Nov 2008) New Revision: 1382
Modified: trunk/pysoy/src/models/Axis.pym Log: Ticket #963 : Completed but with a cheat Modified: trunk/pysoy/src/models/Axis.pym =================================================================== --- trunk/pysoy/src/models/Axis.pym 2008-11-30 02:21:44 UTC (rev 1381) +++ trunk/pysoy/src/models/Axis.pym 2008-12-01 03:04:39 UTC (rev 1382) @@ -23,45 +23,57 @@ This :class:`~soy.model.Model` renders a "XYZ axis" oriented to each body it's attached to. This is useful for debugging. ''' - + def __cinit__(self, size=None,*args, **kw): + if size == None: + self._size = 0; + else: + #assert isinstance(size,int) + self._size = size; + + property size : + def __get__(self): + return self._size + def __set__(self, value): + self._size = value + ############################################################################ # # WindowLoop Functions # cdef void _render(self, soy.bodies.Body _body) : - cdef VertPC _vert[2] # contains vertex position and color data - cdef Line _elmt[1] # contains indices to verts to render lines - cdef gl.GLfloat _mtx[16] - cdef int a + cdef VertPC _vert[20] # contains vertex position and color data + cdef Line _elmt[20] # contains indices to verts to render lines + cdef gl.GLfloat _mtx[16] # ###################################### # # get model's matrix # - _mtx[0] = _body._rotation[0] + _mtx[0] = _body._rotation[0] _mtx[1] = _body._rotation[4] _mtx[2] = _body._rotation[8] - _mtx[3] = 0.0 + _mtx[3] = 0.0 _mtx[4] = _body._rotation[1] - _mtx[5] = _body._rotation[5] + _mtx[5] = _body._rotation[5] _mtx[6] = _body._rotation[9] - _mtx[7] = 0.0 + _mtx[7] = 0.0 _mtx[8] = _body._rotation[2] _mtx[9] = _body._rotation[6] _mtx[10] = _body._rotation[10] - _mtx[11] = 0.0 + _mtx[11] = 0.0 _mtx[12] = _body._position[0] _mtx[13] = _body._position[1] _mtx[14] = _body._position[2] - _mtx[15] = 1.0 + _mtx[15] = 1#-self._size + 2 # ###################################### # # save Camera matix before transforming to the Axis' matrix # - #gl.glPushMatrix() - #gl.glMultMatrixf(_mtx) + gl.glPushMatrix() + gl.glMultMatrixf(_mtx) + gl.glScalef(self._size,self._size,self._size) # ###################################### # @@ -80,27 +92,147 @@ # This is the first render pass, so we need to setup the VBO # # First we'll populate _vert - # - _vert[0].px = 0.00 # \ + # + # X Axis. + _vert[0].px = 0.00 # \ Vertex 0 _vert[0].py = 0.00 # } (0.0, 0.0, 0.0) _vert[0].pz = 0.00 # / _vert[0].cr = 1.00 # \ _vert[0].cg = 0.00 # } Red _vert[0].cb = 0.00 # /___________________________ - _vert[1].px = 1.00 # \ + _vert[1].px = 1.00 # \ Vertex 1 _vert[1].py = 0.00 # } (1.0, 0.0, 0.0) _vert[1].pz = 0.00 # / _vert[1].cr = 1.00 # \ _vert[1].cg = 0.00 # } Red _vert[1].cb = 0.00 # /___________________________ - for a from 0 <= a <= 1 : - stdio.printf("Index: %d, px %f py %f pz %f cr %f cg %f cb %f\n",a,_vert[a].px,_vert[a].py,_vert[a].pz,_vert[a].cr,_vert[a].cg,_vert[a].cb) + _vert[2].px = 1.00 # \ Vertex 2 + _vert[2].py = 0.30 # } (1.0, 0.3, 0.0) + _vert[2].pz = 0.00 # / + _vert[2].cr = 1.00 # \ + _vert[2].cg = 0.00 # } Red + _vert[2].cb = 0.00 # /___________________________ + _vert[3].px = 1.30 # \ Vertex 3 + _vert[3].py = 0.00 # } (1.3, 0.0, 0.0) + _vert[3].pz = 0.00 # / + _vert[3].cr = 1.00 # \ + _vert[3].cg = 0.00 # } Red + _vert[3].cb = 0.00 # /___________________________ + + _vert[4].px = 1.00 # \ Vertex 4 + _vert[4].py = -.30 # } (1.0, -0.3, 0.0) + _vert[4].pz = 0.00 # / + _vert[4].cr = 1.00 # \ + _vert[4].cg = 0.00 # } Red + _vert[4].cb = 0.00 # /___________________________ + + # Y Axis + _vert[5]= _vert[0] # Vertex 5 is the same as vertex 0 + _vert[5].cr = 0.0 # Except its not Red. + _vert[5].cg = 1.0 # Its green. + + _vert[6].px = 0.00 # \ Vertex 6 + _vert[6].py = 1.00 # } (0.0, 1.0, 0.0) + _vert[6].pz = 0.00 # / + _vert[6].cr = 0.00 # \ + _vert[6].cg = 1.00 # } Red + _vert[6].cb = 0.00 # /___________________________ + _vert[7].px = 0.30 # \ Vertex 7 + _vert[7].py = 1.00 # } (0.3, 1.0, 0.0) + _vert[7].pz = 0.00 # / + _vert[7].cr = 0.00 # \ + _vert[7].cg = 1.00 # } Red + _vert[7].cb = 0.00 # /___________________________ + + _vert[8].px = 0.00 # \ Vertex 8 + _vert[8].py = 1.30 # } (0.0, 1.3, 0.0) + _vert[8].pz = 0.00 # / + _vert[8].cr = 0.00 # \ + _vert[8].cg = 1.00 # } Red + _vert[8].cb = 0.00 # /___________________________ + _vert[9].px = -.30 # \ Vertex 9 + _vert[9].py = 1.00 # } (-0.3, 1.0, 0.0) + _vert[9].pz = 0.00 # / + _vert[9].cr = 0.00 # \ + _vert[9].cg = 1.00 # } Red + _vert[9].cb = 0.00 # /___________________________ + + # Z Axis + _vert[10] = _vert[0] + _vert[10].cr = 0.00 # \ + _vert[10].cb = 1.00 # /___________________________ + + _vert[11].px = 0.00 # \ Vertex 11 + _vert[11].py = 0.00 # } (0.0, 1.3, 0.0) + _vert[11].pz = 1.00 # / + _vert[11].cr = 0.00 # \ + _vert[11].cg = 0.00 # } Red + _vert[11].cb = 1.00 # /___________________________ + + _vert[12].px = 0.30 # \ Vertex 12 + _vert[12].py = 0.00 # } (-0.3, 1.0, 0.0) + _vert[12].pz = 1.00 # / + _vert[12].cr = 0.00 # \ + _vert[12].cg = 0.00 # } Red + _vert[12].cb = 1.00 # /___________________________ + + _vert[13].px = 0.00 # \ Vertex 13 + _vert[13].py = 0.00 # } (0.0, 1.3, 0.0) + _vert[13].pz = 1.30 # / + _vert[13].cr = 0.00 # \ + _vert[13].cg = 0.00 # } Red + _vert[13].cb = 1.00 # /___________________________ + _vert[14].px = -.30 # \ Vertex 14 + _vert[14].py = 0.00 # } (-0.3, 1.0, 0.0) + _vert[14].pz = 1.00 # / + _vert[14].cr = 0.00 # \ + _vert[14].cg = 0.00 # } Red + _vert[14].cb = 1.00 # /___________________________ + + # TODO optional tags. I left them out because they're not all that useful + # and take up another 15+ verticies.. maybe when we can define verticies more easily. + + # # Next populate _elmt # _elmt[0].a = 0 # Line 0: 0-1 - _elmt[0].b = 1 # ____________________________ + _elmt[0].b = 1 # ____________________________ + + _elmt[1].a = 2 # Line 1: 2-4 + _elmt[1].b = 4 # ____________________________ + + _elmt[2].a = 2 # Line 2: 2-3 + _elmt[2].b = 3 # ____________________________ + + _elmt[3].a = 3 # Line 3: 3-4 + _elmt[3].b = 4 # ____________________________ + + _elmt[4].a = 5 # Line 4: 5-6 + _elmt[4].b = 6 # ____________________________ + + _elmt[5].a = 7 # Line 5: 7-9 + _elmt[5].b = 9 # ____________________________ + + _elmt[6].a = 8 # Line 6: 8-9 + _elmt[6].b = 9 # ____________________________ + + _elmt[7].a = 8 # Line 7: 8-7 + _elmt[7].b = 7 # ____________________________ + + _elmt[8].a = 10 # Line 8: 10-11 + _elmt[8].b = 11 # ____________________________ + + _elmt[9].a = 14 # Line 9: 14-12 + _elmt[9].b = 12 # ____________________________ + + _elmt[10].a = 13 # Line 10: 13-12 + _elmt[10].b = 12 # ____________________________ + + _elmt[11].a = 13 # Line 11: 13-14 + _elmt[11].b = 14 # ____________________________ + # # Create new vertex buffer and send _vert # @@ -112,9 +244,10 @@ # Do the same for the element buffer # gl.glGenBuffersARB(1, &self._elmtBuffer) - gl.glBindBufferARB(gl.GL_ARRAY_BUFFER_ARB, self._elmtBuffer) - gl.glBufferDataARB(gl.GL_ARRAY_BUFFER_ARB, sizeof(_elmt), _elmt, - gl.GL_STATIC_DRAW_ARB) + gl.glBindBufferARB(gl.GL_ELEMENT_ARRAY_BUFFER_ARB, self._elmtBuffer) + gl.glBufferDataARB(gl.GL_ELEMENT_ARRAY_BUFFER_ARB, sizeof(_elmt), _elmt, + gl.GL_STATIC_DRAW_ARB) + # ###################################### # @@ -123,8 +256,8 @@ # Unlike Mesh and most other models, Axis doesn't use normals or textures # so we need to turn these off while rendering an Axis # - #gl.glDisableClientState(gl.GL_NORMAL_ARRAY) # No Normals - #gl.glDisableClientState(gl.GL_TEXTURE_COORD_ARRAY) # No Texture Coords + gl.glDisableClientState(gl.GL_NORMAL_ARRAY) # No Normals + gl.glDisableClientState(gl.GL_TEXTURE_COORD_ARRAY) # No Texture Coords # ###################################### # @@ -135,26 +268,24 @@ # gl.glEnableClientState(gl.GL_COLOR_ARRAY) # We need to render with color arrays # - gl.glVertexPointer(3, gl.GL_FLOAT, 0, <gl.GLvoid *> 0) - gl.glNormalPointer ( gl.GL_FLOAT, 0,<gl.GLvoid *> 0) # nx ny nz - gl.glTexCoordPointer(3, gl.GL_FLOAT, 0, <gl.GLvoid *> 0) # tx ty tz - gl.glColorPointer (3, gl.GL_FLOAT, 0, <gl.GLvoid *> 0) + gl.glVertexPointer(3, gl.GL_FLOAT, sizeof(VertPC), <gl.GLvoid *> 0) + gl.glColorPointer (3, gl.GL_FLOAT, sizeof(VertPC), <gl.GLvoid *> 0+12) gl.glDisable(gl.GL_CULL_FACE) gl.glDisable(gl.GL_DEPTH_TEST) gl.glDisable(gl.GL_LIGHTING) - gl.glDrawElements(gl.GL_LINES, 2, gl.GL_UNSIGNED_BYTE, <gl.GLvoid *> 0) + gl.glDrawElements(gl.GL_LINES, 24, gl.GL_UNSIGNED_BYTE, <gl.GLvoid *> 0) gl.glEnable(gl.GL_LIGHTING) gl.glEnable(gl.GL_DEPTH_TEST) gl.glEnable(gl.GL_CULL_FACE) gl.glDisableClientState(gl.GL_COLOR_ARRAY) - #gl.glEnableClientState(gl.GL_TEXTURE_COORD_ARRAY) - #gl.glEnableClientState(gl.GL_NORMAL_ARRAY) + gl.glEnableClientState(gl.GL_TEXTURE_COORD_ARRAY) + gl.glEnableClientState(gl.GL_NORMAL_ARRAY) # ###################################### # # return to camera matrix # - #gl.glPopMatrix() + gl.glPopMatrix() # ###################################### _______________________________________________ PySoy-SVN mailing list PySoy-SVN@pysoy.org http://www.pysoy.org/mailman/listinfo/pysoy-svn