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

Reply via email to