Author: JaroslawTworek
Date: 2008-01-20 06:23:19 +0000 (Sun, 20 Jan 2008)
New Revision: 793

Modified:
   trunk/pysoy/examples/sun_example.py
   trunk/pysoy/include/gl.pxd
   trunk/pysoy/src/materials/Material.pxi
   trunk/pysoy/src/materials/soy.materials.pxd
   trunk/pysoy/src/meshes/Sun.pxi
Log:
Few material enhancements and bug fixes


Modified: trunk/pysoy/examples/sun_example.py
===================================================================
--- trunk/pysoy/examples/sun_example.py 2008-01-20 03:19:15 UTC (rev 792)
+++ trunk/pysoy/examples/sun_example.py 2008-01-20 06:23:19 UTC (rev 793)
@@ -24,11 +24,19 @@
     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())
+    spike_mat=soy.materials.StainlessSteel()
+    spike_mat.shadeless = True
+
+    aura_mat=soy.materials.Copper()
+    aura_mat.shadeless = True
+
+    center_mat = soy.materials.VelvetyRed()
+    center_mat.shadeless = True
+
+    sun = soy.meshes.Sun(spike_mat=spike_mat,
+            aura_mat=aura_mat, circle_verts=32,
+            center_mat = center_mat)
+
     sun_b = soy.bodies.Body(sce, mesh= sun )
 
     sun.aura_size = (sun.aura_size[0]/2, sun.aura_size[1]/2)

Modified: trunk/pysoy/include/gl.pxd
===================================================================
--- trunk/pysoy/include/gl.pxd  2008-01-20 03:19:15 UTC (rev 792)
+++ trunk/pysoy/include/gl.pxd  2008-01-20 06:23:19 UTC (rev 793)
@@ -1025,6 +1025,7 @@
   cdef void glEnd()
   cdef void glVertex2f( GLfloat, GLfloat y )
   cdef void glVertex3f( GLfloat, GLfloat, GLfloat z )
+  cdef void glTexCoord1f( GLfloat x)
   cdef void glTexCoord2f( GLfloat x, GLfloat y)
   cdef void glNormal3f( GLfloat, GLfloat, GLfloat z )
   cdef void glColor3f(  GLfloat r, GLfloat g, GLfloat b )

Modified: trunk/pysoy/src/materials/Material.pxi
===================================================================
--- trunk/pysoy/src/materials/Material.pxi      2008-01-20 03:19:15 UTC (rev 
792)
+++ trunk/pysoy/src/materials/Material.pxi      2008-01-20 06:23:19 UTC (rev 
793)
@@ -17,8 +17,6 @@
 #
 # $Id$
 
-#include gl
-
 cdef class Material :
   '''PySoy Material
 
@@ -52,7 +50,9 @@
     self._blend_func_dst = gl.GL_ONE_MINUS_SRC_ALPHA
     self._shadeless      = 0
 
+    self._emissive = soy.colors.Black()
 
+
   def __repr__(self) :
     return '<Material>'
 
@@ -80,19 +80,16 @@
           return 0
 
   cdef void _bind(self) :
-    cdef gl.GLfloat _white[4]
     cdef gl.GLfloat _ambient[4]
     cdef gl.GLfloat _diffuse[4]
     cdef gl.GLfloat _specular[4]
+    cdef gl.GLfloat _emissive[4]
 
-    _white[0] = 1.0
-    _white[1] = 1.0
-    _white[2] = 1.0
-    _white[3] = 1.0
 
     (<soy.colors.Color> self._ambient)._getRGBA(_ambient)
     (<soy.colors.Color> self._diffuse)._getRGBA(_diffuse)
     (<soy.colors.Color> self._specular)._getRGBA(_specular)
+    (<soy.colors.Color> self._emissive)._getRGBA(_emissive)
 
     if self._shades == 0 :
       gl.glShadeModel(gl.GL_SMOOTH)
@@ -100,22 +97,17 @@
       gl.glShadeModel(gl.GL_FLAT)
 
     if self._shadeless:
+        gl.glDisable(gl.GL_LIGHTING)
         gl.glColor4f(_diffuse[0], _diffuse[1], _diffuse[2], _diffuse[3])
     else: 
         gl.glMaterialfv(gl.GL_FRONT, gl.GL_AMBIENT, _ambient)
         gl.glMaterialfv(gl.GL_FRONT, gl.GL_DIFFUSE, _diffuse)
         gl.glMaterialf (gl.GL_FRONT, gl.GL_SHININESS, self._shininess)    
         gl.glMaterialfv(gl.GL_FRONT, gl.GL_SPECULAR, _specular)
+        gl.glMaterialfv(gl.GL_FRONT, gl.GL_EMISSION, _emissive)
 
     if self._color :
-      # for some reason _white works here while _getRGBA does not,
-      # even though it works for non-textured
-      #gl.glMaterialfv(gl.GL_FRONT, gl.GL_AMBIENT_AND_DIFFUSE, _white)
       (<soy.textures.Texture> self._color)._bind()
-    #else :
-    #  gl.glDisable(gl.GL_TEXTURE_1D)
-    #  gl.glDisable(gl.GL_TEXTURE_2D)
-    #  gl.glDisable(gl.GL_TEXTURE_3D)
 
     if self._is_transparent():
         gl.glEnable(gl.GL_BLEND)
@@ -126,8 +118,9 @@
       (<soy.textures.Texture> self._color)._unbind()
     if self._is_transparent():
         gl.glDisable(gl.GL_BLEND)
+    if self._shadeless:
+        gl.glEnable(gl.GL_LIGHTING)
 
-
   property color :
     def __get__(self) :
       return self._color
@@ -199,6 +192,17 @@
     def __del__(self) :
       self._specular=soy.colors.White()
 
+  property emissive :
+    def __get__(self) :
+      return self._emissive
+    def __set__(self, val) :
+      if isinstance(val, soy.colors.Color) :
+        self._emissive=val
+      else :
+        raise TypeError('must be a soy.color')
+    def __del__(self) :
+      self._emissive=soy.colors.Black()
+
   property blend_func_src:
       def __get__(self):
           return self._blend_func_src

Modified: trunk/pysoy/src/materials/soy.materials.pxd
===================================================================
--- trunk/pysoy/src/materials/soy.materials.pxd 2008-01-20 03:19:15 UTC (rev 
792)
+++ trunk/pysoy/src/materials/soy.materials.pxd 2008-01-20 06:23:19 UTC (rev 
793)
@@ -28,6 +28,7 @@
   cdef soy.colors.Color _ambient
   cdef soy.colors.Color _diffuse
   cdef soy.colors.Color _specular
+  cdef soy.colors.Color _emissive
 
   cdef int              _shades
   cdef float            _shininess

Modified: trunk/pysoy/src/meshes/Sun.pxi
===================================================================
--- trunk/pysoy/src/meshes/Sun.pxi      2008-01-20 03:19:15 UTC (rev 792)
+++ trunk/pysoy/src/meshes/Sun.pxi      2008-01-20 06:23:19 UTC (rev 793)
@@ -60,15 +60,17 @@
         PI_S = 3.1415926535897931 / 180.0
 
 
+        gl.glEnable(gl.GL_POLYGON_OFFSET_FILL)
         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)
+        #gl.glDisable(gl.GL_DEPTH_TEST)
 
         if self._spike_mat:
+            gl.glPolygonOffset(0,0)
             self._spike_mat._bind()
 
             angle = 360.0 / self._num_spikes
@@ -82,8 +84,11 @@
 
                 gl.glBegin(gl.GL_TRIANGLES)
                 gl.glNormal3f(0,0,-1)
+                gl.glTexCoord1f(0.0)
                 gl.glVertex3f(x_ssize, y_ssize, 0)
+                gl.glTexCoord1f(1.0)
                 gl.glVertex3f(0, self._spike_size[0], 0)
+                gl.glTexCoord1f(0.0)
                 gl.glVertex3f(-x_ssize, y_ssize, 0)
                 gl.glEnd()
 
@@ -92,13 +97,16 @@
             self._spike_mat._unbind()
 
         if self._aura_mat:
+            gl.glPolygonOffset(0, -1)
             self._aura_mat._bind()
             angle = 360.0 / self._circle_verts
 
             gl.glBegin(gl.GL_TRIANGLE_FAN)
             gl.glNormal3f(0,0,-1)
+            gl.glTexCoord1f(0.0)
             gl.glVertex3f(0,0,0)
 
+            gl.glTexCoord1f(1.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))
@@ -109,13 +117,16 @@
             self._aura_mat._unbind()
 
         if self._center_mat:
+            gl.glPolygonOffset( 0.0, -2)
             self._center_mat._bind()
             angle = 360.0 / self._circle_verts
 
             gl.glBegin(gl.GL_TRIANGLE_FAN)
             gl.glNormal3f(0,0,-1)
+            gl.glTexCoord1f(0.0)
             gl.glVertex3f(0,0,0)
 
+            gl.glTexCoord1f(1.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))
@@ -126,7 +137,8 @@
             self._center_mat._unbind()
 
 
-        gl.glEnable(gl.GL_DEPTH_TEST)
+        gl.glDisable(gl.GL_POLYGON_OFFSET_FILL)
+        #gl.glEnable(gl.GL_DEPTH_TEST)
 
     property center_mat:
         def __get__(self):

_______________________________________________
PySoy-SVN mailing list
[email protected]
http://www.pysoy.org/mailman/listinfo/pysoy-svn

Reply via email to