Author: JaroslawTworek
Date: 2008-01-19 18:12:08 +0000 (Sat, 19 Jan 2008)
New Revision: 786
Modified:
trunk/pysoy/examples/liquid_example.py
trunk/pysoy/src/meshes/Liquid.pxi
trunk/pysoy/src/meshes/soy.meshes.pxd
Log:
Wrapped texture around water in soy.meshes.Liquid
Modified: trunk/pysoy/examples/liquid_example.py
===================================================================
--- trunk/pysoy/examples/liquid_example.py 2008-01-19 16:38:13 UTC (rev
785)
+++ trunk/pysoy/examples/liquid_example.py 2008-01-19 18:12:08 UTC (rev
786)
@@ -36,7 +36,9 @@
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)
+ lava = soy.transports.File('media/lava.soy')['gimp']
+
+ liquid = soy.meshes.Liquid(liquid_col=soy.colors.Red(),
liquid_opacity=0.5, two_sided=True, liquid_tex = lava)
liquid_b = soy.bodies.Body(sce, mesh=liquid)
liquid_b.position = (0, -1, 0)
Modified: trunk/pysoy/src/meshes/Liquid.pxi
===================================================================
--- trunk/pysoy/src/meshes/Liquid.pxi 2008-01-19 16:38:13 UTC (rev 785)
+++ trunk/pysoy/src/meshes/Liquid.pxi 2008-01-19 18:12:08 UTC (rev 786)
@@ -7,6 +7,11 @@
else:
self._background_mat = soy.materials.StainlessSteel()
+ if kwargs.has_key('liquid_tex'):
+ self._liquid_tex = kwargs['liquid_tex']
+ else:
+ self._liquid_tex = None
+
self._liquid_size[0] = liquid_size[0]
self._liquid_size[1] = liquid_size[1]
self._liquid_size[2] = liquid_size[2]
@@ -22,8 +27,8 @@
cdef float ccol[4]
cdef float fcol[4]
- if self._two_sided:
- gl.glDisable(gl.GL_CULL_FACE)
+ #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
@@ -118,6 +123,57 @@
gl.glDisable(gl.GL_FOG)
+ if self.two_sided:
+ gl.glBegin(gl.GL_TRIANGLES)
+
+ gl.glNormal3f(0,-1, 0) #BOTTOM 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.glNormal3f(0, 0,-1) # BACK 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.glNormal3f(0, 0, 1) # FRONT 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.glNormal3f(-1, 0, 0) # LEFT 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.glNormal3f(1, 0, 0) # RIGHT 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()
+
+
self._background_mat._unbind()
#self._liquid_mat.ambient.alpha = self._liquid_opacity
@@ -128,10 +184,16 @@
#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)
+ if self._liquid_tex:
+ (<soy.textures.Texture>self._liquid_tex)._bind()
+ gl.glColor4f(1.0, 1.0, 1.0, self._liquid_opacity)
+ else:
+ 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)
@@ -139,12 +201,18 @@
gl.glNormal3f(0, 1, 0) #LIQUID FACE
+ gl.glTexCoord2f(0,1)
gl.glVertex3f(-half_size[0], half_size[1], half_size[2] )
+ gl.glTexCoord2f(1,1)
gl.glVertex3f( half_size[0], half_size[1], half_size[2] )
+ gl.glTexCoord2f(1,0)
gl.glVertex3f( half_size[0], half_size[1],-half_size[2] )
+ gl.glTexCoord2f(1,0)
gl.glVertex3f( half_size[0], half_size[1],-half_size[2] )
+ gl.glTexCoord2f(0,0)
gl.glVertex3f(-half_size[0], half_size[1],-half_size[2] )
+ gl.glTexCoord2f(0,1)
gl.glVertex3f(-half_size[0], half_size[1], half_size[2] )
gl.glEnd()
@@ -153,10 +221,13 @@
gl.glDisable(gl.GL_BLEND)
gl.glDisable(gl.GL_COLOR_MATERIAL)
+ if self._liquid_tex:
+ (<soy.textures.Texture>self._liquid_tex)._unbind()
+
#self._liquid_mat._unbind()
- if self._two_sided:
- gl.glEnable(gl.GL_CULL_FACE)
+ #if self._two_sided:
+ # gl.glEnable(gl.GL_CULL_FACE)
property size:
def __get__(self):
@@ -190,5 +261,12 @@
def __set__(self, newval):
self._liquid_color = newval
+ property liquid_tex:
+ def __get__(self):
+ return self._liquid_tex
+ def __set__(self, newval):
+ self._liquid_tex = newval
+
+
Modified: trunk/pysoy/src/meshes/soy.meshes.pxd
===================================================================
--- trunk/pysoy/src/meshes/soy.meshes.pxd 2008-01-19 16:38:13 UTC (rev
785)
+++ trunk/pysoy/src/meshes/soy.meshes.pxd 2008-01-19 18:12:08 UTC (rev
786)
@@ -67,6 +67,7 @@
cdef class Liquid(Mesh):
cdef soy.materials.Material _background_mat
+ cdef object _liquid_tex
cdef soy.colors.Color _liquid_color
cdef float _liquid_size[3]
_______________________________________________
PySoy-SVN mailing list
[email protected]
http://www.pysoy.org/mailman/listinfo/pysoy-svn