Author: JaroslawTworek
Date: 2008-01-18 23:13:38 +0000 (Fri, 18 Jan 2008)
New Revision: 784
Added:
trunk/pysoy/examples/sun_example.py
trunk/pysoy/include/stdlib.pxd
trunk/pysoy/src/meshes/Sun.pxi
Modified:
trunk/pysoy/examples/steel_billboard.py
trunk/pysoy/include/gl.pxd
trunk/pysoy/src/bodies._bodies/soy.bodies._bodies.pxd
trunk/pysoy/src/bodies._bodies/soy.bodies._bodies.pyx
trunk/pysoy/src/meshes/soy.meshes.pxd
trunk/pysoy/src/meshes/soy.meshes.pyx
Log:
Implemented soy.meshes.Sun mesh type
Modified: trunk/pysoy/examples/steel_billboard.py
===================================================================
--- trunk/pysoy/examples/steel_billboard.py 2008-01-17 07:20:07 UTC (rev
783)
+++ trunk/pysoy/examples/steel_billboard.py 2008-01-18 23:13:38 UTC (rev
784)
@@ -73,3 +73,4 @@
if __name__=='__main__':
main()
+
Added: trunk/pysoy/examples/sun_example.py
===================================================================
--- trunk/pysoy/examples/sun_example.py (rev 0)
+++ trunk/pysoy/examples/sun_example.py 2008-01-18 23:13:38 UTC (rev 784)
@@ -0,0 +1,85 @@
+#!/usr/bin/env python
+
+import soy
+from time import sleep
+
+def main():
+ sce = soy.Scene()
+
+ cam = soy.bodies.Camera(sce)
+ cam.position = (0.0, 0.0, 10.0)
+
+ def camera_impl_move( vec):
+ def move_camera():
+ cam.position = (cam.position[0] + vec[0], cam.position[1] +
vec[1], cam.position[2] + vec[2])
+ return move_camera
+
+ def camera_set_rot( vec):
+ def rot_camera():
+ cam.rotation = vec
+ return rot_camera
+
+
+
+ lig = soy.bodies.lights.Light(sce)
+ lig.position = (-10.0,10.0,2.0)
+
+ lava = soy.transports.File('media/lava.soy')['gimp']
+ lavam = soy.materials.Material(lava)
+ sun = soy.meshes.Sun(spike_mat=soy.materials.StainlessSteel(),
+ aura_mat=soy.materials.Copper(), circle_verts=32,
+ center_mat = soy.materials.VelvetyRed())
+ sun_b = soy.bodies.Body(sce, mesh= sun )
+
+ sun.aura_size = (sun.aura_size[0]/2, sun.aura_size[1]/2)
+ sun.center_size = (sun.center_size[0]/2, sun.center_size[0]/2)
+
+ sun.num_spikes = 15
+
+
+ #axis_b.rotation = (1.0,0.5,0.2)
+
+ def multiply_size( mul):
+ def m():
+ st = bil.size
+ bil.size = ( st[0]*mul[0], st[1]*mul[1])
+ return m
+
+ scr = soy.Screen()
+ win = soy.Window(scr, 'Sun example', background=soy.colors.Black(),
+ size=(1024,768))
+
+ pro = soy.widgets.Projector(win, camera=cam)
+
+ key = soy.controllers.Keyboard(win)
+ key['q'] = soy.actions.Quit()
+ key[ 1 ] = soy.actions.Quit() # 9 = esc key
+
+
+ key['w'] = camera_impl_move( (0,0,-0.1) )
+ key['s'] = camera_impl_move( (0,0,0.1) )
+
+ key['a'] = camera_impl_move( (-0.1,0,0) )
+ key['d'] = camera_impl_move( (0.1,0,0) )
+
+ key['z'] = camera_set_rot( (0, 0.3, 0))
+ key['x'] = camera_set_rot( (0, 0, 0))
+ key['c'] = camera_set_rot( (0, -0.3, 0))
+
+ key['r'] = multiply_size( (1.1,1.0))
+ key['f'] = multiply_size( (1.0/1.1,1.0))
+
+ key['t'] = multiply_size( (1.0,1.1))
+ key['g'] = multiply_size( (1.0,1.0/1.1))
+
+
+
+ wcn = soy.controllers.Window(win)
+ wcn['close'] = soy.actions.Quit()
+
+ while True:
+ sleep(.1)
+
+if __name__=='__main__':
+ main()
+
Modified: trunk/pysoy/include/gl.pxd
===================================================================
--- trunk/pysoy/include/gl.pxd 2008-01-17 07:20:07 UTC (rev 783)
+++ trunk/pysoy/include/gl.pxd 2008-01-18 23:13:38 UTC (rev 784)
@@ -1011,8 +1011,10 @@
cdef void glLoadIdentity()
cdef void glLoadMatrixf( GLfloat* )
cdef void glMultMatrixf( GLfloat* )
+ cdef void glMultTransposeMatrixf( GLfloat* )
cdef void glScalef( GLfloat, GLfloat, GLfloat )
cdef void glTranslatef( GLfloat, GLfloat, GLfloat )
+ cdef void glRotatef(GLfloat, GLfloat, GLfloat, GLfloat)
# Legacy Functions
cdef void glBegin( GLenum )
Added: trunk/pysoy/include/stdlib.pxd
===================================================================
--- trunk/pysoy/include/stdlib.pxd (rev 0)
+++ trunk/pysoy/include/stdlib.pxd 2008-01-18 23:13:38 UTC (rev 784)
@@ -0,0 +1,4 @@
+
+cdef extern from "math.h" :
+ float sinf(float)
+ float cosf(float)
Modified: trunk/pysoy/src/bodies._bodies/soy.bodies._bodies.pxd
===================================================================
--- trunk/pysoy/src/bodies._bodies/soy.bodies._bodies.pxd 2008-01-17
07:20:07 UTC (rev 783)
+++ trunk/pysoy/src/bodies._bodies/soy.bodies._bodies.pxd 2008-01-18
23:13:38 UTC (rev 784)
@@ -52,3 +52,6 @@
cdef int _wire
cdef float _fovy
cdef void _project(self)
+
+
+
Modified: trunk/pysoy/src/bodies._bodies/soy.bodies._bodies.pyx
===================================================================
--- trunk/pysoy/src/bodies._bodies/soy.bodies._bodies.pyx 2008-01-17
07:20:07 UTC (rev 783)
+++ trunk/pysoy/src/bodies._bodies/soy.bodies._bodies.pyx 2008-01-18
23:13:38 UTC (rev 784)
@@ -36,3 +36,4 @@
include "Body.pxi"
include "Camera.pxi"
+
Added: trunk/pysoy/src/meshes/Sun.pxi
===================================================================
--- trunk/pysoy/src/meshes/Sun.pxi (rev 0)
+++ trunk/pysoy/src/meshes/Sun.pxi 2008-01-18 23:13:38 UTC (rev 784)
@@ -0,0 +1,181 @@
+import soy.materials
+
+cdef class Sun(Mesh):
+ def __cinit__(self, **kwargs ):
+ if kwargs.has_key('center_mat'):
+ self._center_mat = kwargs['center_mat']
+ else:
+ self._center_mat = soy.materials.StainlessSteel()
+
+ if kwargs.has_key('aura_mat'):
+ self._aura_mat = kwargs['aura_mat']
+ else:
+ self._aura_mat = soy.materials.StainlessSteel()
+
+ if kwargs.has_key('spike_mat'):
+ self._spike_mat = kwargs['spike_mat']
+ else:
+ self._spike_mat = soy.materials.StainlessSteel()
+
+ if kwargs.has_key('num_spikes'):
+ self._num_spikes = kwargs['num_spikes']
+ else:
+ self._num_spikes = 4
+
+ if kwargs.has_key('circle_verts'):
+ self._circle_verts = kwargs['circle_verts']
+ else:
+ self._circle_verts = 32
+
+ if kwargs.has_key('center_size'):
+ self._center_size[0] = kwargs['center_size'][0]
+ self._center_size[1] = kwargs['center_size'][1]
+ else:
+ self._center_size[0] = 1
+ self._center_size[1] = 1
+
+ if kwargs.has_key('aura_size'):
+ self._aura_size[0] = kwargs['aura_size'][0]
+ self._aura_size[1] = kwargs['aura_size'][1]
+ else:
+ self._aura_size[0] = 2
+ self._aura_size[1] = 2
+
+ if kwargs.has_key('spike_size'):
+ self._spike_size[0] = kwargs['spike_size'][0]
+ self._spike_size[1] = kwargs['spike_size'][1]
+ else:
+ self._spike_size[0] = 4
+ self._spike_size[1] = 4
+
+
+ cdef void _render(self, void* body):
+ cdef float mmat[16]
+ cdef float x_ssize
+ cdef float y_ssize
+ cdef float angle
+ cdef int i
+ cdef float PI_S
+
+ PI_S = 3.1415926535897931 / 180.0
+
+
+ gl.glGetFloatv(gl.GL_MODELVIEW_MATRIX, mmat)
+ mmat[12] = mmat[13] = mmat[14] = 0
+ gl.glMultTransposeMatrixf(mmat)
+
+ #UP = (mmat[0], mmat[4], mmat[8])
+ #RIGHT = (mmat[1], mmat[5], mmat[9])
+ gl.glDisable(gl.GL_DEPTH_TEST)
+
+ if self._spike_mat:
+ self._spike_mat._bind()
+
+ angle = 360.0 / self._num_spikes
+
+ for i from 0 <= i < self._num_spikes:
+ gl.glPushMatrix()
+ gl.glRotatef( i * angle, 0.0,0.0,1.0)
+
+ x_ssize = self._center_size[0]/5.0
+ y_ssize = self._center_size[1]/5.0
+
+ gl.glBegin(gl.GL_TRIANGLES)
+ gl.glNormal3f(0,0,-1)
+ gl.glVertex3f(x_ssize, y_ssize, 0)
+ gl.glVertex3f(0, self._spike_size[0], 0)
+ gl.glVertex3f(-x_ssize, y_ssize, 0)
+ gl.glEnd()
+
+ gl.glPopMatrix()
+
+ self._spike_mat._unbind()
+
+ if self._aura_mat:
+ self._aura_mat._bind()
+ angle = 360.0 / self._circle_verts
+
+ gl.glBegin(gl.GL_TRIANGLE_FAN)
+ gl.glNormal3f(0,0,-1)
+ gl.glVertex3f(0,0,0)
+
+ for i from 0 <= i <= self._circle_verts:
+ x_ssize = self._aura_size[0] * stdlib.sinf( - PI_S * (<float>i
* angle))
+ y_ssize = self._aura_size[1] * stdlib.cosf( PI_S * (<float>i *
angle))
+ gl.glVertex3f(x_ssize, y_ssize, 0.0)
+
+ gl.glEnd()
+
+ self._aura_mat._unbind()
+
+ if self._center_mat:
+ self._center_mat._bind()
+ angle = 360.0 / self._circle_verts
+
+ gl.glBegin(gl.GL_TRIANGLE_FAN)
+ gl.glNormal3f(0,0,-1)
+ gl.glVertex3f(0,0,0)
+
+ for i from 0 <= i <= self._circle_verts:
+ x_ssize = self._center_size[0] * stdlib.sinf( - PI_S *
(<float>i * angle))
+ y_ssize = self._center_size[1] * stdlib.cosf( PI_S * (<float>i
* angle))
+ gl.glVertex3f(x_ssize, y_ssize, 0.0)
+
+ gl.glEnd()
+
+ self._center_mat._unbind()
+
+
+ gl.glEnable(gl.GL_DEPTH_TEST)
+
+ property center_mat:
+ def __get__(self):
+ return self._center_mat
+ def __set__(self, newmat):
+ self._center_mat = newmat
+
+ property aura_mat:
+ def __get__(self):
+ return self._aura_mat
+ def __set__(self, newmat):
+ self._aura_mat = newmat
+
+ property spike_mat:
+ def __get__(self):
+ return self._spike_mat
+ def __set__(self, newmat):
+ self._spike_mat = newmat
+
+ property num_spikes:
+ def __get__(self):
+ return self._num_spikes
+ def __set__(self, newmat):
+ self._num_spikes = newmat
+
+ property circle_verts:
+ def __get__(self):
+ return self._circle_verts
+ def __set__(self, newmat):
+ self._circle_verts = newmat
+
+ property center_size:
+ def __get__(self):
+ return (self._center_size[0], self._center_size[1])
+ def __set__(self, newsize):
+ self._center_size[0] = newsize[0]
+ self._center_size[1] = newsize[1]
+
+ property aura_size:
+ def __get__(self):
+ return (self._aura_size[0], self._aura_size[1])
+ def __set__(self, newsize):
+ self._aura_size[0] = newsize[0]
+ self._aura_size[1] = newsize[1]
+
+ property spike_size:
+ def __get__(self):
+ return (self._spike_size[0], self._spike_size[1])
+ def __set__(self, newsize):
+ self._spike_size[0] = newsize[0]
+ self._spike_size[1] = newsize[1]
+
Modified: trunk/pysoy/src/meshes/soy.meshes.pxd
===================================================================
--- trunk/pysoy/src/meshes/soy.meshes.pxd 2008-01-17 07:20:07 UTC (rev
783)
+++ trunk/pysoy/src/meshes/soy.meshes.pxd 2008-01-18 23:13:38 UTC (rev
784)
@@ -20,6 +20,7 @@
cimport gl
cimport py
cimport stdio
+cimport stdlib
cimport soy._datatypes
cimport soy._internals
cimport soy.materials
@@ -50,3 +51,17 @@
cdef float _size[2]
cdef void _render (self, void* )
+cdef class Sun (Mesh) :
+ cdef soy.materials.Material _center_mat
+ cdef soy.materials.Material _aura_mat
+ cdef soy.materials.Material _spike_mat
+
+ cdef int _num_spikes
+ cdef int _circle_verts
+
+ cdef float _center_size[2]
+ cdef float _aura_size[2]
+ cdef float _spike_size[2]
+
+ cdef void _render(self, void*)
+
Modified: trunk/pysoy/src/meshes/soy.meshes.pyx
===================================================================
--- trunk/pysoy/src/meshes/soy.meshes.pyx 2008-01-17 07:20:07 UTC (rev
783)
+++ trunk/pysoy/src/meshes/soy.meshes.pyx 2008-01-18 23:13:38 UTC (rev
784)
@@ -28,4 +28,5 @@
include "Axis.pxi"
include "Camera.pxi"
include "Billboard.pxi"
+include "Sun.pxi"
_______________________________________________
PySoy-SVN mailing list
[email protected]
http://www.pysoy.org/mailman/listinfo/pysoy-svn