[Top][All Lists]
[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]
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Gzz-commits] gzz/gfx demo/irregu3.py librenderables/renderab...,
Janne V. Kujala <=