Author: JaroslawTworek
Date: 2008-01-19 16:38:13 +0000 (Sat, 19 Jan 2008)
New Revision: 785
Added:
trunk/pysoy/examples/liquid_example.py
trunk/pysoy/src/controllers/Keyboard2.pxi
trunk/pysoy/src/meshes/Liquid.pxi
Modified:
trunk/pysoy/examples/sun_example.py
trunk/pysoy/include/gl.pxd
trunk/pysoy/src/bodies._bodies/Camera.pxi
trunk/pysoy/src/controllers/soy.controllers.pxd
trunk/pysoy/src/controllers/soy.controllers.pyx
trunk/pysoy/src/meshes/soy.meshes.pxd
trunk/pysoy/src/meshes/soy.meshes.pyx
Log:
Created soy.meses.Liquid volumetric for mesh + written a bit improved second
keyboard controller
Added: trunk/pysoy/examples/liquid_example.py
===================================================================
--- trunk/pysoy/examples/liquid_example.py (rev 0)
+++ trunk/pysoy/examples/liquid_example.py 2008-01-19 16:38:13 UTC (rev
785)
@@ -0,0 +1,125 @@
+#!/usr/bin/env python
+
+import soy
+from time import sleep
+
+class T: #empty class to hold camera data by-reference
+ def __init__(self):
+ self.move_forward = False
+ self.move_backward = False
+ self.move_left = False
+ self.move_right = False
+ self.move_up = False
+ self.move_down = False
+
+ self.forward_vel = 0.5
+ self.side_vel = 0.3
+
+def set_variable_field(var, field, val):
+ def mth():
+ setattr(var,field,val)
+ return mth
+
+def main():
+ sce = soy.Scene()
+
+ cam = soy.bodies.Camera(sce)
+ cam.position = (0.0, 0.0, 10.0)
+
+ camera_data = T()
+
+ def camera_add_rot( vec):
+ def rot_camera():
+ cam.rotation = (cam.rotation[0] + vec[0], cam.rotation[1]+vec[1],
cam.rotation[2]+vec[2])
+ return rot_camera
+
+ lig = soy.bodies.lights.Light(sce)
+ lig.position = (-10.0,1.0,-2.0)
+
+ liquid = soy.meshes.Liquid(liquid_col=soy.colors.Blue(),
liquid_opacity=0.7, two_sided=True)
+ liquid_b = soy.bodies.Body(sce, mesh=liquid)
+ liquid_b.position = (0, -1, 0)
+
+ liquid.size = (1, 0.5, 1)
+
+ scr = soy.Screen()
+ win = soy.Window(scr, 'Liquid example', background=soy.colors.Black(),
+ size=(1024,768))
+
+ pro = soy.widgets.Projector(win, camera=cam)
+
+ key = soy.controllers.Keyboard(win)
+ key[ 1 ] = soy.actions.Quit() # 9 = esc key
+
+
+ key2 = soy.controllers.Keyboard2(win)
+
+ key2['w'] = ( set_variable_field(camera_data, 'move_forward', True),
+ set_variable_field(camera_data, 'move_forward', False))
+ key2['s'] = ( set_variable_field(camera_data, 'move_backward', True),
+ set_variable_field(camera_data, 'move_backward', False))
+
+ key2['q'] = ( set_variable_field(camera_data, 'move_left', True),
+ set_variable_field(camera_data, 'move_left', False))
+ key2['e'] = ( set_variable_field(camera_data, 'move_right', True),
+ set_variable_field(camera_data, 'move_right', False))
+
+ key2['r'] = ( set_variable_field(camera_data, 'move_up', True),
+ set_variable_field(camera_data, 'move_up', False))
+ key2['f'] = ( set_variable_field(camera_data, 'move_down', True),
+ set_variable_field(camera_data, 'move_down', False))
+
+ key2['a'] = ( camera_add_rot( (0, 0.9, 0)), camera_add_rot( (0,-0.9, 0)) )
+ key2['d'] = ( camera_add_rot( (0,-0.9, 0)), camera_add_rot( (0, 0.9, 0)) )
+
+ key2['z'] = ( camera_add_rot( ( 0.9, 0, 0)), camera_add_rot( (-0.9, 0,
0)) )
+ key2['x'] = ( camera_add_rot( (-0.9, 0, 0)), camera_add_rot( ( 0.9, 0,
0)) )
+
+
+ wcn = soy.controllers.Window(win)
+ wcn['close'] = soy.actions.Quit()
+
+
+ while True:
+ sleep(.03)
+ if camera_data.move_forward:
+ cam.position = (
+ cam.position[0] - camera_data.forward_vel *
cam.direction[0],
+ cam.position[1] - camera_data.forward_vel *
cam.direction[1],
+ cam.position[2] - camera_data.forward_vel *
cam.direction[2],
+ )
+ if camera_data.move_backward:
+ cam.position = (
+ cam.position[0] + camera_data.forward_vel *
cam.direction[0],
+ cam.position[1] + camera_data.forward_vel *
cam.direction[1],
+ cam.position[2] + camera_data.forward_vel *
cam.direction[2],
+ )
+ if camera_data.move_left:
+ cam.position = (
+ cam.position[0] - camera_data.side_vel * cam.right[0],
+ cam.position[1] - camera_data.side_vel * cam.right[1],
+ cam.position[2] - camera_data.side_vel * cam.right[2],
+ )
+ if camera_data.move_right:
+ cam.position = (
+ cam.position[0] + camera_data.side_vel * cam.right[0],
+ cam.position[1] + camera_data.side_vel * cam.right[1],
+ cam.position[2] + camera_data.side_vel * cam.right[2],
+ )
+
+ if camera_data.move_down:
+ cam.position = (
+ cam.position[0] - camera_data.side_vel * cam.up[0],
+ cam.position[1] - camera_data.side_vel * cam.up[1],
+ cam.position[2] - camera_data.side_vel * cam.up[2],
+ )
+ if camera_data.move_up:
+ cam.position = (
+ cam.position[0] + camera_data.side_vel * cam.up[0],
+ cam.position[1] + camera_data.side_vel * cam.up[1],
+ cam.position[2] + camera_data.side_vel * cam.up[2],
+ )
+
+if __name__=='__main__':
+ main()
+
Modified: trunk/pysoy/examples/sun_example.py
===================================================================
--- trunk/pysoy/examples/sun_example.py 2008-01-18 23:13:38 UTC (rev 784)
+++ trunk/pysoy/examples/sun_example.py 2008-01-19 16:38:13 UTC (rev 785)
@@ -39,11 +39,6 @@
#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(),
@@ -66,14 +61,7 @@
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()
Modified: trunk/pysoy/include/gl.pxd
===================================================================
--- trunk/pysoy/include/gl.pxd 2008-01-18 23:13:38 UTC (rev 784)
+++ trunk/pysoy/include/gl.pxd 2008-01-19 16:38:13 UTC (rev 785)
@@ -291,6 +291,9 @@
GL_EXP
GL_EXP2
+ GL_FOG_COORDINATE_SOURCE_EXT
+ GL_FOG_COORDINATE_EXT
+
# Logic Ops
GL_LOGIC_OP
GL_INDEX_LOGIC_OP
@@ -924,6 +927,7 @@
# GLEW rendering flags
GLEW_EXT_vertex_array
+ GLEW_EXT_fog_coord
GLEW_ARB_vertex_buffer_object
# Data types
@@ -1024,6 +1028,7 @@
cdef void glTexCoord2f( GLfloat x, GLfloat y)
cdef void glNormal3f( GLfloat, GLfloat, GLfloat z )
cdef void glColor3f( GLfloat r, GLfloat g, GLfloat b )
+ cdef void glColor4f( GLfloat r, GLfloat g, GLfloat b, GLfloat a )
cdef void glColor3ub( GLubyte r, GLubyte g, GLubyte b )
cdef void glColor4ub( GLubyte r, GLubyte g, GLubyte b, GLubyte a )
@@ -1101,6 +1106,11 @@
GLsizei, GLsizei )
cdef void glCopyTexSubImage3D( GLenum, GLint, GLint, GLint, GLint, GLint,
GLint, GLsizei, GLsizei )
+ #Fog calculations
+ cdef void glFogi(GLenum, GLint)
+ cdef void glFogf(GLenum, GLfloat)
+ cdef void glFogfv(GLenum, GLfloat*)
+ cdef void glFogCoordfEXT(GLfloat)
# GLU
cdef void gluPerspective( GLdouble, GLdouble,
Modified: trunk/pysoy/src/bodies._bodies/Camera.pxi
===================================================================
--- trunk/pysoy/src/bodies._bodies/Camera.pxi 2008-01-18 23:13:38 UTC (rev
784)
+++ trunk/pysoy/src/bodies._bodies/Camera.pxi 2008-01-19 16:38:13 UTC (rev
785)
@@ -93,3 +93,23 @@
return self._fovy
def __set__(self, value) :
self._fovy = value
+ property direction:
+ '''Direction in which camera is looking'''
+ def __get__(self):
+ cdef ode.dReal *rot
+ rot = <ode.dReal *> ode.dBodyGetRotation(self._bodyID)
+ return ( rot[2], rot[6], rot[10] )
+ property right:
+ '''Direction of the 'right' side of the camera'''
+ def __get__(self):
+ cdef ode.dReal *rot
+ rot = <ode.dReal *> ode.dBodyGetRotation(self._bodyID)
+ return ( rot[0], rot[4], rot[8] )
+ property up:
+ '''Direction of the up vector of the camera'''
+ def __get__(self):
+ cdef ode.dReal *rot
+ rot = <ode.dReal *> ode.dBodyGetRotation(self._bodyID)
+ return ( rot[1], rot[5], rot[9] )
+
+
Added: trunk/pysoy/src/controllers/Keyboard2.pxi
===================================================================
--- trunk/pysoy/src/controllers/Keyboard2.pxi (rev 0)
+++ trunk/pysoy/src/controllers/Keyboard2.pxi 2008-01-19 16:38:13 UTC (rev
785)
@@ -0,0 +1,123 @@
+cdef class Keyboard2 (Controller) :
+ '''PySoy controllers.Keyboard2
+
+ This controller responds to selected keyboard input from a soy.Window.
+
+ This controller can be programmed with both keycodes and symbols. This
+ allows you to program for either physical keys, such as when using
+ letters as arrow keys, or the keymapped keys for typing.
+
+ Keycodes are set as type int, symbols are single-character strings.
+ Keycode actions are given priority in the case of overlap. When
+ overlap is possible between keycodes and keymapped symbols it's
+ recommended to use two separate controllers.
+
+ See soy.controllers.Controller for how to program controllers.
+ '''
+ def __cinit__(self, window, *args, **kw) :
+ if not isinstance(window, soy._core.Window) :
+ raise TypeError('first argument must be of type soy.Window')
+ self._window = window
+ self._window._controllers.lock()
+ self._window._controllers.append(<void *>self)
+ self._window._controllers.unlock()
+
+ def __dealloc__(self) :
+ cdef int _i
+
+ if not self._window :
+ return
+
+ self._window._controllers.lock()
+ self._window._controllers.remove(<void *>self)
+ self._window._controllers.unlock()
+
+ for _i from 0 <= _i < 256 :
+ if self._acts_keycde_down[_i] :
+ py.Py_DECREF(<object> self._acts_keycde_down[_i])
+ if self._acts_keysym_down[_i] :
+ py.Py_DECREF(<object> self._acts_keysym_down[_i])
+ if self._acts_keycde_up[_i] :
+ py.Py_DECREF(<object> self._acts_keycde_up[_i])
+ if self._acts_keysym_up[_i] :
+ py.Py_DECREF(<object> self._acts_keysym_up[_i])
+
+
+ def __str__(self) : #XXX: Left for now
+ cdef int _i
+ ret = {}
+ for _i from 0 <= _i < 256 :
+ if self._acts_keycde_down[_i] :
+ ret[_i] = <object> self._acts_keycde_down[_i]
+ for _i from 0 <= _i < 256 :
+ if self._acts_keysym_down[_i] :
+ ret[chr(_i)] = <object> self._acts_keysym_down[_i]
+ return ret.__str__()
+
+ def __repr__(self) :
+ return self.__str__()
+
+ #def __getitem__(self, key) :
+ # if type(key) == str and len(key)==1 :
+ # if self._acts_keysym[ord(key)] :
+ # return <soy.actions.Action> self._acts_keysym[ord(key)]
+ # else :
+ # return None
+ # elif type(key) == int and key>=0 and key<256 :
+ # if self._acts_keycde[key] :
+ # return <soy.actions.Action> self._acts_keycde[key]
+ # else :
+ # return None
+ # else :
+ # raise KeyError(key)
+
+ def __setitem__(self, key, value) :
+ value1 = value[0]
+ value2 = value[1]
+
+ if not isinstance(value1, soy.actions.Action) :
+ if not hasattr(value1, '__call__'):
+ raise TypeError('value1 not either callable or an instance of
soy.actions.Action')
+ value1 = soy.actions.Callback(value1)
+
+ if not isinstance(value2, soy.actions.Action) :
+ if not hasattr(value2, '__call__'):
+ raise TypeError('value2 not either callable or an instance of
soy.actions.Action')
+ value2 = soy.actions.Callback(value2)
+
+ if type(key) == str and len(key)==1 :
+ if self._acts_keysym_down[ord(key)] :
+ py.Py_DECREF(<soy.actions.Action> self._acts_keysym_down[ord(key)])
+ self._acts_keysym_down[ord(key)] = <void *> value1
+ py.Py_INCREF(<soy.actions.Action> self._acts_keysym_down[ord(key)])
+ elif type(key) == int and key>=0 and key<256 :
+ if self._acts_keycde_down[key] :
+ py.Py_DECREF(<soy.actions.Action> self._acts_keycde_down[key])
+ self._acts_keycde_down[key] = <void *> value1
+ py.Py_INCREF(<soy.actions.Action> self._acts_keycde_down[key])
+
+ if type(key) == str and len(key)==1 :
+ if self._acts_keysym_up[ord(key)] :
+ py.Py_DECREF(<soy.actions.Action> self._acts_keysym_up[ord(key)])
+ self._acts_keysym_up[ord(key)] = <void *> value2
+ py.Py_INCREF(<soy.actions.Action> self._acts_keysym_up[ord(key)])
+ elif type(key) == int and key>=0 and key<256 :
+ if self._acts_keycde_up[key] :
+ py.Py_DECREF(<soy.actions.Action> self._acts_keycde_up[key])
+ self._acts_keycde_up[key] = <void *> value2
+ py.Py_INCREF(<soy.actions.Action> self._acts_keycde_up[key])
+
+
+ cdef void _eventKeyDown(self, unsigned char _cde, unsigned char _sym) :
+ if self._acts_keycde_down[_cde] :
+ (<soy.actions.Action> self._acts_keycde_down[_cde])._perform(1)
+ if self._acts_keysym_down[_sym] :
+ (<soy.actions.Action> self._acts_keysym_down[_sym])._perform(1)
+
+
+ cdef void _eventKeyUp(self, unsigned char _cde, unsigned char _sym) :
+ if self._acts_keycde_up[_cde] :
+ (<soy.actions.Action> self._acts_keycde_up[_cde])._perform(1)
+ if self._acts_keysym_up[_sym] :
+ (<soy.actions.Action> self._acts_keysym_up[_sym])._perform(1)
+
Modified: trunk/pysoy/src/controllers/soy.controllers.pxd
===================================================================
--- trunk/pysoy/src/controllers/soy.controllers.pxd 2008-01-18 23:13:38 UTC
(rev 784)
+++ trunk/pysoy/src/controllers/soy.controllers.pxd 2008-01-19 16:38:13 UTC
(rev 785)
@@ -34,3 +34,10 @@
cdef class Window (Controller) :
cdef soy._core.Window _window
cdef void* _acts_close
+
+cdef class Keyboard2 (Controller) :
+ cdef soy._core.Window _window
+ cdef void* _acts_keycde_down[256]
+ cdef void* _acts_keysym_down[256]
+ cdef void* _acts_keycde_up[256]
+ cdef void* _acts_keysym_up[256]
Modified: trunk/pysoy/src/controllers/soy.controllers.pyx
===================================================================
--- trunk/pysoy/src/controllers/soy.controllers.pyx 2008-01-18 23:13:38 UTC
(rev 784)
+++ trunk/pysoy/src/controllers/soy.controllers.pyx 2008-01-19 16:38:13 UTC
(rev 785)
@@ -28,4 +28,5 @@
include "Controller.pxi"
include "Keyboard.pxi"
+include "Keyboard2.pxi"
include "Window.pxi"
Added: trunk/pysoy/src/meshes/Liquid.pxi
===================================================================
--- trunk/pysoy/src/meshes/Liquid.pxi (rev 0)
+++ trunk/pysoy/src/meshes/Liquid.pxi 2008-01-19 16:38:13 UTC (rev 785)
@@ -0,0 +1,194 @@
+import soy.colors
+
+cdef class Liquid(Mesh):
+ def __cinit__(self, liquid_size=(1,1,1), liquid_opacity=0.5, liquid_col =
soy.colors.Red(), two_sided=False, **kwargs ):
+ if kwargs.has_key('background_mat'):
+ self._background_mat = kwargs['background_mat']
+ else:
+ self._background_mat = soy.materials.StainlessSteel()
+
+ self._liquid_size[0] = liquid_size[0]
+ self._liquid_size[1] = liquid_size[1]
+ self._liquid_size[2] = liquid_size[2]
+
+ self._liquid_opacity = liquid_opacity
+
+ self._liquid_color = liquid_col
+
+ self._two_sided = two_sided
+
+ cdef void _render(self, void* body):
+ cdef float half_size[3]
+ cdef float ccol[4]
+ cdef float fcol[4]
+
+ if self._two_sided:
+ gl.glDisable(gl.GL_CULL_FACE)
+
+ half_size[0] = self._liquid_size[0]/2.0
+ half_size[1] = self._liquid_size[1]/2.0
+ half_size[2] = self._liquid_size[2]/2.0
+
+ (<soy.colors.Color> self._liquid_color)._getRGBA(ccol)
+ (<soy.colors.Color> self._liquid_color)._getRGBA(fcol)
+
+ gl.glFogi(gl.GL_FOG_MODE, gl.GL_LINEAR)
+ gl.glFogf(gl.GL_FOG_START, 0.0)
+ gl.glFogf(gl.GL_FOG_END, 1.0)
+ gl.glFogfv(gl.GL_FOG_COLOR, fcol)
+ gl.glFogi(gl.GL_FOG_COORDINATE_SOURCE_EXT, gl.GL_FOG_COORDINATE_EXT);
+
+ if self._background_mat:
+ self._background_mat._bind()
+ gl.glEnable(gl.GL_FOG)
+
+ gl.glBegin(gl.GL_TRIANGLES)
+
+ gl.glNormal3f(0, 1, 0) #BOTTOM FACE
+ gl.glFogCoordfEXT(1.0)
+ gl.glVertex3f(-half_size[0],-half_size[1], half_size[2] )
+ gl.glVertex3f( half_size[0],-half_size[1], half_size[2] )
+ gl.glVertex3f( half_size[0],-half_size[1],-half_size[2] )
+
+ gl.glVertex3f( half_size[0],-half_size[1],-half_size[2] )
+ gl.glVertex3f(-half_size[0],-half_size[1],-half_size[2] )
+ gl.glVertex3f(-half_size[0],-half_size[1], half_size[2] )
+
+ gl.glNormal3f(0, 0, 1) # BACK FACE
+ gl.glFogCoordfEXT(1.0)
+ gl.glVertex3f(-half_size[0],-half_size[1],-half_size[2] )
+ gl.glFogCoordfEXT(1.0)
+ gl.glVertex3f( half_size[0],-half_size[1],-half_size[2] )
+ gl.glFogCoordfEXT(0.0)
+ gl.glVertex3f( half_size[0], half_size[1],-half_size[2] )
+
+ gl.glFogCoordfEXT(0.0)
+ gl.glVertex3f( half_size[0], half_size[1],-half_size[2] )
+ gl.glFogCoordfEXT(0.0)
+ gl.glVertex3f(-half_size[0], half_size[1],-half_size[2] )
+ gl.glFogCoordfEXT(1.0)
+ gl.glVertex3f(-half_size[0],-half_size[1],-half_size[2] )
+
+ gl.glNormal3f(0, 0, -1) # FRONT FACE
+ gl.glFogCoordfEXT(1.0)
+ gl.glVertex3f(-half_size[0],-half_size[1], half_size[2] )
+ gl.glFogCoordfEXT(0.0)
+ gl.glVertex3f( half_size[0], half_size[1], half_size[2] )
+ gl.glFogCoordfEXT(1.0)
+ gl.glVertex3f( half_size[0],-half_size[1], half_size[2] )
+
+ gl.glFogCoordfEXT(0.0)
+ gl.glVertex3f( half_size[0], half_size[1], half_size[2] )
+ gl.glFogCoordfEXT(1.0)
+ gl.glVertex3f(-half_size[0],-half_size[1], half_size[2] )
+ gl.glFogCoordfEXT(0.0)
+ gl.glVertex3f(-half_size[0], half_size[1], half_size[2] )
+
+ gl.glNormal3f(1, 0, 0) # LEFT FACE
+ gl.glFogCoordfEXT(1.0)
+ gl.glVertex3f(-half_size[0],-half_size[1], half_size[2] )
+ gl.glFogCoordfEXT(1.0)
+ gl.glVertex3f(-half_size[0],-half_size[1],-half_size[2] )
+ gl.glFogCoordfEXT(0.0)
+ gl.glVertex3f(-half_size[0], half_size[1],-half_size[2] )
+
+ gl.glFogCoordfEXT(0.0)
+ gl.glVertex3f(-half_size[0], half_size[1],-half_size[2] )
+ gl.glFogCoordfEXT(0.0)
+ gl.glVertex3f(-half_size[0], half_size[1], half_size[2] )
+ gl.glFogCoordfEXT(1.0)
+ gl.glVertex3f(-half_size[0],-half_size[1], half_size[2] )
+
+ gl.glNormal3f(-1, 0, 0) # RIGHT FACE
+ gl.glFogCoordfEXT(1.0)
+ gl.glVertex3f(half_size[0],-half_size[1], half_size[2] )
+ gl.glFogCoordfEXT(0.0)
+ gl.glVertex3f(half_size[0], half_size[1],-half_size[2] )
+ gl.glFogCoordfEXT(1.0)
+ gl.glVertex3f(half_size[0],-half_size[1],-half_size[2] )
+
+ gl.glFogCoordfEXT(0.0)
+ gl.glVertex3f(half_size[0], half_size[1],-half_size[2] )
+ gl.glFogCoordfEXT(1.0)
+ gl.glVertex3f(half_size[0],-half_size[1], half_size[2] )
+ gl.glFogCoordfEXT(0.0)
+ gl.glVertex3f(half_size[0], half_size[1], half_size[2] )
+
+ gl.glEnd()
+
+ gl.glDisable(gl.GL_FOG)
+
+ self._background_mat._unbind()
+
+ #self._liquid_mat.ambient.alpha = self._liquid_opacity
+ #self._liquid_mat.diffuse.alpha = self._liquid_opacity
+ #self._liquid_mat.specular.alpha = self._liquid_opacity
+
+ #self._liquid_mat._bind()
+
+ #gl.glDisable(gl.GL_LIGHTING)
+
+ gl.glEnable(gl.GL_COLOR_MATERIAL)
+ gl.glColorMaterial(gl.GL_FRONT_AND_BACK, gl.GL_AMBIENT_AND_DIFFUSE)
+
+ gl.glColor4f(ccol[0], ccol[1], ccol[2], self._liquid_opacity)
+ gl.glEnable(gl.GL_BLEND)
+ gl.glBlendFunc(gl.GL_SRC_ALPHA, gl.GL_ONE_MINUS_SRC_ALPHA)
+
+ gl.glBegin(gl.GL_TRIANGLES)
+
+ gl.glNormal3f(0, 1, 0) #LIQUID FACE
+
+ gl.glVertex3f(-half_size[0], half_size[1], half_size[2] )
+ gl.glVertex3f( half_size[0], half_size[1], half_size[2] )
+ gl.glVertex3f( half_size[0], half_size[1],-half_size[2] )
+
+ gl.glVertex3f( half_size[0], half_size[1],-half_size[2] )
+ gl.glVertex3f(-half_size[0], half_size[1],-half_size[2] )
+ gl.glVertex3f(-half_size[0], half_size[1], half_size[2] )
+
+ gl.glEnd()
+
+ #gl.glEnable(gl.GL_LIGHTING)
+ gl.glDisable(gl.GL_BLEND)
+ gl.glDisable(gl.GL_COLOR_MATERIAL)
+
+ #self._liquid_mat._unbind()
+
+ if self._two_sided:
+ gl.glEnable(gl.GL_CULL_FACE)
+
+ property size:
+ def __get__(self):
+ return (self._liquid_size[0], self._liquid_size[1],
self._liquid_size[2])
+ def __set__(self, newval):
+ self._liquid_size[0] = newval[0]
+ self._liquid_size[1] = newval[1]
+ self._liquid_size[2] = newval[2]
+
+ property two_sided:
+ def __get__(self):
+ return self._two_sided
+ def __set__(self, newval):
+ self._two_sided = newval
+
+ property background_mat:
+ def __get__(self):
+ return self._background_mat
+ def __set__(self, newval):
+ self._background_mat = newval
+
+ property liquid_opacity:
+ def __get__(self):
+ return self._liquid_opacity
+ def __set__(self, newval):
+ self._liquid_opacity = newval
+
+ property liquid_color:
+ def __get__(self):
+ return self._liquid_color
+ def __set__(self, newval):
+ self._liquid_color = newval
+
+
+
Modified: trunk/pysoy/src/meshes/soy.meshes.pxd
===================================================================
--- trunk/pysoy/src/meshes/soy.meshes.pxd 2008-01-18 23:13:38 UTC (rev
784)
+++ trunk/pysoy/src/meshes/soy.meshes.pxd 2008-01-19 16:38:13 UTC (rev
785)
@@ -65,3 +65,13 @@
cdef void _render(self, void*)
+cdef class Liquid(Mesh):
+ cdef soy.materials.Material _background_mat
+ cdef soy.colors.Color _liquid_color
+
+ cdef float _liquid_size[3]
+ cdef float _liquid_opacity
+ cdef int _two_sided
+
+ cdef void _render(self, void*)
+
Modified: trunk/pysoy/src/meshes/soy.meshes.pyx
===================================================================
--- trunk/pysoy/src/meshes/soy.meshes.pyx 2008-01-18 23:13:38 UTC (rev
784)
+++ trunk/pysoy/src/meshes/soy.meshes.pyx 2008-01-19 16:38:13 UTC (rev
785)
@@ -29,4 +29,5 @@
include "Camera.pxi"
include "Billboard.pxi"
include "Sun.pxi"
+include "Liquid.pxi"
_______________________________________________
PySoy-SVN mailing list
[email protected]
http://www.pysoy.org/mailman/listinfo/pysoy-svn