gzz-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Gzz-commits] gzz/gfx demo/irregu3.py librenderables/renderab...


From: Janne V. Kujala
Subject: [Gzz-commits] gzz/gfx demo/irregu3.py librenderables/renderab...
Date: Tue, 22 Oct 2002 09:23:18 -0400

CVSROOT:        /cvsroot/gzz
Module name:    gzz
Changes by:     Janne V. Kujala <address@hidden>        02/10/22 09:23:17

Modified files:
        gfx/demo       : irregu3.py 
        gfx/librenderables: renderables.py 

Log message:
        Draw four irregular sides using "linear time" stencil in irregu3; also 
add TextureMatrix renderable for "moving" inside the distortion texture

CVSWeb URLs:
http://savannah.gnu.org/cgi-bin/viewcvs/gzz/gzz/gfx/demo/irregu3.py.diff?tr1=1.12&tr2=1.13&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gzz/gzz/gfx/librenderables/renderables.py.diff?tr1=1.109&tr2=1.110&r1=text&r2=text

Patches:
Index: gzz/gfx/demo/irregu3.py
diff -u gzz/gfx/demo/irregu3.py:1.12 gzz/gfx/demo/irregu3.py:1.13
--- gzz/gfx/demo/irregu3.py:1.12        Tue Oct 22 04:21:50 2002
+++ gzz/gfx/demo/irregu3.py     Tue Oct 22 09:23:17 2002
@@ -1,7 +1,7 @@
-from math import sin,cos,sqrt,pi
+from math import sin,cos,sqrt,pi,atan2
 
 ripple_scale = .25
-size = 256
+size = 128
 
 args = ["radius", "2", "ripple_scale", str(ripple_scale),
         "scale", ".25", "bias", ".75", "eps", ".125"]
@@ -20,192 +20,116 @@
 
 
 def lerp(a, b, f):
-    return [ (1-f) * a[i] + f * b[i] for i in range(0, len(a)) ]
-    
-def getirr(texid, angle, pos):
+    return [ (1-f) * a[i] + f * b[i] for i in range(0, len(a)) ]    
 
-    texmat = js([
-        cos(angle), sin(angle), 0, 0,
-        -sin(angle), cos(angle), 0, 0,
-        0, 0, 1, 0,
-        -sin(angle)*pos, cos(angle)*pos, 0, 1,
-        ])
+def vecmul(v, m): return [ a * m for a in v ]
+def vecadd(u, v): return [ u[i] + v[i] for i in range(0, len(u)) ]
+def vecsub(u, v): return [ u[i] - v[i] for i in range(0, len(u)) ]
 
-    col0l = [ (1.0,0.5,0.5), (0.5,0.5,1.0), (0.5,1.0,0.5), (1.0,0.5,0.5) ]
-    col1l = [ (.75,0.5,0.5), (0.5,0.5,.75), (0.5,.75,0.5), (.75,0.5,0.5) ]
+def getIrregu(texid, x0, y0, x1, y1, outer = 0, texscale = 1, texangle = 0):
+    len =  sqrt((x1 - x0)**2 + (y1 - y0)**2)
 
-    a = angle * 6 / (2 * pi)
-    while a < 0: a+=3
-    i = int(a) % 3
-    f = a - int(a)
+    m = 0.5 * ripple_scale * texscale / len
+    vec = (m * (y1 - y0), -m * (x1 - x0), 0, 0) # cw90
 
-    col0 = js(lerp(col0l[i], col0l[i+1], f))
-    col1 = js(lerp(col1l[i], col1l[i+1], f))
+    vert0 = js(vecmul(vecsub((x0,y0,0,1),vec), 1))
+    vert1 = js(vecmul(vecadd((x0,y0,0,1),vec), .5))
+    vert2 = js(vecmul(vecsub((x1,y1,0,1),vec), 1))
+    vert3 = js(vecmul(vecadd((x1,y1,0,1),vec), .5))
+
+    tex0 = js(vecmul((x0,y0,0,texscale), 1))
+    tex1 = js(vecmul((x0,y0,0,texscale), .5))
+    tex2 = js(vecmul((x1,y1,0,texscale), 1))
+    tex3 = js(vecmul((x1,y1,0,texscale), .5))
+
+    #print "Vertices:"
+    #print vert0, tex0
+    #print vert1, tex1
+    #print vert2, tex2
+    #print vert3, tex3
+
+    if outer:
+        angle = atan2(y1 - y0, x1 - x0) - texangle
+
+        col0l = [ (1.0,0.5,0.5), (0.5,0.5,1.0), (0.5,1.0,0.5), (1.0,0.5,0.5) ]
+        col1l = [ (.75,0.5,0.5), (0.5,0.5,.75), (0.5,.75,0.5), (.75,0.5,0.5) ]
+
+        a = angle * 6 / (2 * pi)
+        while a < 0: a+=3
+        i = int(a) % 3
+        f = a - int(a)
+        
+        col0 = js(lerp(col0l[i], col0l[i+1], f))
+        col1 = js(lerp(col1l[i], col1l[i+1], f))
 
-    #print col0, col1
+        src = "SRC_COLOR"
+    else:
+        col0 = "1 .5 .5 1"
+        col1 = ".75 .5 .5 1"
+
+        src = "SRC_ALPHA"
 
-    e = 0.5
     code = """
     PushAttrib ENABLE_BIT
 
     BindTexture TEXTURE_2D %(texid)s
-    """
-
+    TexParameter TEXTURE_2D TEXTURE_MIN_FILTER LINEAR_MIPMAP_LINEAR
+    TexParameter TEXTURE_2D TEXTURE_MAG_FILTER LINEAR
+    Hint PERSPECTIVE_CORRECTION_HINT NICEST
+    Enable TEXTURE_2D
+    """ % locals()
+    
     if GL.hasExtension("GL_EXT_texture_lod_bias"):
         code += """
         TexEnv TEXTURE_FILTER_CONTROL_EXT TEXTURE_LOD_BIAS_EXT %s
         """ % lodbias
-    
-    code += """
-    PushMatrix
-    Translate -.5 -.75 0
-
-    # Try to convince the GL implementation to do
-    # perspective correct color interpolation
-    Hint PERSPECTIVE_CORRECTION_HINT NICEST
 
-    #Debug mountains
-    #TexImage2D TEXTURE_2D 0 LUMINANCE_ALPHA 8 1 0 LUMINANCE_ALPHA \
-    .5 .5 1 1 .5 .5 .85 .85 .5 .5 .7 .7 .5 .5 .55 .55
-    #TexParameter TEXTURE_2D TEXTURE_BASE_LEVEL 0
-    #TexParameter TEXTURE_2D TEXTURE_MAX_LEVEL 0
-    TexParameter TEXTURE_2D TEXTURE_MIN_FILTER LINEAR_MIPMAP_LINEAR
-    TexParameter TEXTURE_2D TEXTURE_MAG_FILTER LINEAR
-    
-    Enable TEXTURE_2D
-    Enable ALPHA_TEST
-    AlphaFunc GEQUAL %(e)s
-
-    #Disable ALPHA_TEST
-    #BlendFunc SRC_ALPHA ONE_MINUS_SRC_ALPHA
-    #Enable BLEND
-    #Disable TEXTURE_2D
-
-    Color 1 1 1 1
-
-    TexEnv TEXTURE_ENV TEXTURE_ENV_MODE MODULATE
-
-    # Debug strip
-    #Begin QUAD_STRIP
-    #TexCoord 0 0 0 1
-    #Vertex 0 %(e)s 0 1
-    #TexCoord 0 0 0 %(e)s
-    #Vertex 0 %(e)s 0 %(e)s
-    #TexCoord 1 0 0 1
-    #Vertex 1 %(e)s 0 1
-    #TexCoord %(e)s 0 0 %(e)s
-    #Vertex %(e)s %(e)s 0 %(e)s
-    #End
-
-    BlendFunc ZERO ZERO
-    Enable BLEND
-
-    # Draw outer edge
-    
+    code += """
     TexEnv TEXTURE_ENV TEXTURE_ENV_MODE COMBINE_ARB
     TexEnv TEXTURE_ENV COMBINE_RGB_ARB DOT3_RGBA_ARB
     TexEnv TEXTURE_ENV SOURCE0_RGB_ARB TEXTURE
-    TexEnv TEXTURE_ENV OPERAND0_RGB_ARB SRC_COLOR
+    TexEnv TEXTURE_ENV OPERAND0_RGB_ARB %(src)s
     TexEnv TEXTURE_ENV SOURCE1_RGB_ARB PREVIOUS_ARB
     TexEnv TEXTURE_ENV OPERAND1_RGB_ARB SRC_COLOR
 
-    # Ignored with dot3:
-    #TexEnv TEXTURE_ENV COMBINE_ALPHA_ARB REPLACE
-    #TexEnv TEXTURE_ENV SOURCE0_ALPHA_ARB TEXTURE
-    #TexEnv TEXTURE_ENV OPERAND0_ALPHA_ARB SRC_ALPHA
-    #TexEnv TEXTURE_ENV SOURCE1_ALPHA_ARB TEXTURE
-    #TexEnv TEXTURE_ENV OPERAND1_ALPHA_ARB SRC_ALPHA
-
-    MatrixMode TEXTURE
-    LoadMatrix %(texmat)s
-    MatrixMode MODELVIEW
-       
-    Begin QUAD_STRIP
-
-    TexCoord 0 0 0 1
-    Color %(col0)s
-    Vertex 0 %(e)s 0 1
-
-    TexCoord 0 0 0 %(e)s
-    Color %(col1)s
-    Vertex 0 %(e)s 0 %(e)s
-
-    TexCoord 1 0 0 1
-    Color %(col0)s
-    Vertex 1 %(e)s 0 1
-
-    TexCoord %(e)s 0 0 %(e)s
-    Color %(col1)s
-    Vertex %(e)s %(e)s 0 %(e)s
-
-    End
-
-    Disable BLEND
+    # Create edge stencil
 
-    # Create inner edge stencil
+    Enable ALPHA_TEST
+    AlphaFunc LESS 0.5
+    ColorMask 0 0 0 0
 
     StencilMask 255
-    
     Enable STENCIL_TEST
-    ColorMask 0 0 0 0
     StencilFunc ALWAYS 0 255
     StencilOp INCR INCR INCR
     
-    TexEnv TEXTURE_ENV OPERAND0_RGB_ARB SRC_ALPHA
-
     Begin QUAD_STRIP
 
-    TexCoord 0 0 0 1
-    Color 1 .5 .5 
-    Vertex 0 %(e)s 0 1
-
-    TexCoord 0 0 0 %(e)s
-    Color .75 .5 .5
-    Vertex 0 %(e)s 0 %(e)s
-
-    TexCoord 1 0 0 1
-    Color 1 .5 .5
-    Vertex 1 %(e)s 0 1
-
-    TexCoord %(e)s 0 0 %(e)s
-    Color .75 .5 .5
-    Vertex %(e)s %(e)s 0 %(e)s
-
-    End
+    Color %(col0)s
+    TexCoord %(tex0)s
+    Vertex %(vert0)s
 
-    # Draw white using the stencil
+    Color %(col1)s
+    TexCoord %(tex1)s
+    Vertex %(vert1)s
 
-    StencilFunc LESS 0 255
-    StencilOp ZERO ZERO ZERO
-    ColorMask 1 1 1 1
+    Color %(col0)s
+    TexCoord %(tex2)s
+    Vertex %(vert2)s
 
-    Disable TEXTURE_2D
-    Color 1 1 1 1
+    Color %(col1)s
+    TexCoord %(tex3)s
+    Vertex %(vert3)s
 
-    Begin QUAD_STRIP
-    Vertex 0 .5 
-    Vertex 0 1
-    Vertex 1 .5
-    Vertex 1 1
-    End 
+    End
 
+    ColorMask 1 1 1 1
     Disable STENCIL_TEST
+    PopAttrib
     
-    PopMatrix
-
-    PopAttrib 
-    """
-
-    return getDList(code % vars())
-
-
-
-
-
-def getIrregu(x0, y0, x1, y1, s0, t0, s1, t1):
-    tlen = sqrt((s1 - s0)**2 + (t1 - t0)**2)
-    len =  sqrt((x1 - x0)**2 + (y1 - y0)**2)
+    """ % locals()
 
+    return code
 
 class IrreguScene:
     def __init__(self):
@@ -213,6 +137,8 @@
         self.dist = 1
         self.angle = 0
         self.pos = 0
+
+        self.tx, self.ty = 0, 0
         
     def scene(self, vs):
         putnoc(vs, background((0.7,0.7,1.0)))
@@ -222,24 +148,75 @@
        vs.matcher.add(cs1, "1")
        vs.matcher.add(cs2, "2")
 
-        irr = getirr(tex.getTexId(), self.angle, self.pos)
-        irrinv = getirr(texinv.getTexId(), self.angle, self.pos)
+        cs3 = vs.coords.affineCoordsys(0, 0, 512, 384, self.scale, 0, 0, 
self.scale)
+       vs.matcher.add(cs3, "3")
+
+        texscale = 1
+
+        x0 = -1 - 0.5 * ripple_scale * texscale
+        x1 = 1 + 0.5 * ripple_scale * texscale
+        y0 = x0
+        y1 = x1
 
-        vs.map.put(irr, cs1)
-        vs.map.put(irrinv, cs2)
+        
+        cs4 = vs.coords.affineCoordsys(0, 0,
+                                       self.tx * cos(self.angle) +
+                                       self.ty * sin(self.angle),
+                                       self.tx * -sin(self.angle) +
+                                       self.ty * cos(self.angle),
+                                       cos(self.angle), sin(self.angle),
+                                       -sin(self.angle), cos(self.angle))
+        vs.matcher.add(cs4, "4")
+        vs.map.put(GLRen.createTextureMatrix(), cs4)
+
+        paint = """
+            PushAttrib ENABLE_BIT
+            Enable STENCIL_TEST
+            Disable ALPHA_TEST
+            StencilFunc EQUAL 0 255
+            StencilOp ZERO ZERO ZERO
+            Disable TEXTURE_2D
+            Begin QUAD_STRIP
+            Vertex %(x0)s %(y0)s
+            Vertex %(x1)s %(y0)s
+            Vertex %(x0)s %(y1)s
+            Vertex %(x1)s %(y1)s
+            End 
+            PopAttrib
+        """ % locals()
+
+        i0 = tex.getTexId()
+        i1 = texinv.getTexId()
+
+        vs.map.put(getDList(getIrregu(i0,x0,-1,x1,-1,1, texscale, self.angle) +
+                            getIrregu(i0,+1,y0,+1,y1,1, texscale, self.angle) +
+                            getIrregu(i1,x1,+1,x0,+1,1, texscale, self.angle) +
+                            getIrregu(i1,-1,y1,-1,y0,1, texscale, self.angle) +
+                            "Color 0 0 0" + paint), cs3)
+
+        vs.map.put(getDList(getIrregu(i0,x0,-1,x1,-1,0, texscale, self.angle) +
+                            getIrregu(i0,+1,y0,+1,y1,0, texscale, self.angle) +
+                            getIrregu(i1,x1,+1,x0,+1,0, texscale, self.angle) +
+                            getIrregu(i1,-1,y1,-1,y0,0, texscale, self.angle) +
+                            "Color 1 1 1" + paint), cs3)
 
     def key(self, k):
         if k == "+": self.scale *= 1.4142135623731; print round(self.scale)
         if k == "-": self.scale /= 1.4142135623731; print round(self.scale)
-        if k == "Prior": self.dist *= 1.1
-        if k == "Next": self.dist /= 1.1
-        if k == "Up": self.pos -= 1./128
-        if k == "Down": self.pos += 1./128
-        if k == "Left": self.angle -= pi/180
-        if k == "Right": self.angle += pi/180
+
+        if k == "Prior":
+            self.angle -= pi/180; print "angle",round(self.angle / pi * 180)
+        if k == "Next":
+            self.angle += pi/180; print "angle",round(self.angle / pi * 180)
+            
+        if k == "Up": self.ty -= .1
+        if k == "Down": self.ty += .1
+        if k == "Left": self.tx -= .1
+        if k == "Right": self.tx += .1
+        
         global lodbias
         if k == "b": lodbias += .25; print "lodbias", lodbias
         if k == "B": lodbias -= .25; print "lodbias", lodbias
-        print "angle",round(self.angle / pi * 180)
+        
 
 currentScene = IrreguScene()        
Index: gzz/gfx/librenderables/renderables.py
diff -u gzz/gfx/librenderables/renderables.py:1.109 
gzz/gfx/librenderables/renderables.py:1.110
--- gzz/gfx/librenderables/renderables.py:1.109 Sat Oct 19 04:13:55 2002
+++ gzz/gfx/librenderables/renderables.py       Tue Oct 22 09:23:17 2002
@@ -105,6 +105,20 @@
 
 {
     "Type": "1",
+    "Name" : "TextureMatrix",
+    "RenderCode" : """
+           DBG(dbg) << "Apply TextureMatrix\\n";
+            glPushAttrib(GL_TRANSFORM_BIT);
+            glMatrixMode(GL_TEXTURE);
+            glLoadIdentity();
+           coords1.performGL();
+            glPopAttrib();
+           GLERR
+           """,
+},
+
+{
+    "Type": "1",
     "Name" : "LABSlice",
     "Data" : "int axis; float value;",
     "Params" : "int axis, float value",
@@ -1288,6 +1302,9 @@
 
 for r in rs:
     ExtraClass = None
+    Params = ""
+    ParamCode = ""
+    Data = ""
     for k in r.keys() : locals()[k] = r[k]
     params = [param.strip().split(" ") for param in Params.split(",") if 
param.strip() != ""]
     idparams = [param for param in params if param[0] in idded]




reply via email to

[Prev in Thread] Current Thread [Next in Thread]