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