/[gzz]/gzz/gfx/demo/irregu3.py
ViewVC logotype

Diff of /gzz/gfx/demo/irregu3.py

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.16 by jvk, Thu Oct 24 11:36:25 2002 UTC revision 1.17 by jvk, Thu Oct 24 15:08:29 2002 UTC
# Line 3  from math import sin,cos,sqrt,pi,atan2 Line 3  from math import sin,cos,sqrt,pi,atan2
3  ripple_scale = .25  ripple_scale = .25
4  size = 128  size = 128
5    
6    if (GL.hasExtension("GL_NV_register_combiners") and
7        GL.hasExtension("GL_EXT_secondary_color")):
8    
9        print "Using full displacement resolution textures with GL_NV_register_combiners"
10        
11        from gfx.libutil.nvcode import combinercode
12        texenv_outer = combinercode("""
13        SecondaryColorEXT %(dotvec)s
14    
15        Enable REGISTER_COMBINERS_NV
16        CombinerParameterNV NUM_GENERAL_COMBINERS_NV 2
17        
18        # Compute TEXTURE . SECONDARY_COLOR dot product
19        CI0 RGB A TEXTURE0 UNSIGNED_IDENTITY_NV RGB
20        CI0 RGB B SECONDARY_COLOR_NV UNSIGNED_IDENTITY_NV RGB
21        CO0 RGB SPARE0_NV DISCARD_NV DISCARD_NV NONE NONE TRUE FALSE FALSE
22    
23        # Add PRIMARY_COLOR
24        CI1 RGB A SPARE0_NV UNSIGNED_IDENTITY_NV RGB
25        CI1 RGB B ZERO UNSIGNED_INVERT_NV RGB
26        CI1 RGB C PRIMARY_COLOR_NV UNSIGNED_IDENTITY_NV RGB
27        CI1 RGB D ZERO UNSIGNED_INVERT_NV RGB
28        CO1 RGB DISCARD_NV DISCARD_NV SPARE0_NV NONE NONE FALSE FALSE FALSE
29    
30        # Use as alpha
31        FCI G SPARE0_NV UNSIGNED_IDENTITY_NV BLUE
32        """)
33    
34        texenv_inner = combinercode("""
35        SecondaryColorEXT 0 0 0
36    
37        Enable REGISTER_COMBINERS_NV
38        CombinerParameterNV NUM_GENERAL_COMBINERS_NV 1
39    
40        CI0 ALPHA A TEXTURE0 UNSIGNED_IDENTITY_NV ALPHA
41        CI0 ALPHA B ZERO UNSIGNED_INVERT_NV ALPHA
42        CI0 ALPHA C PRIMARY_COLOR_NV UNSIGNED_IDENTITY_NV BLUE
43        CI0 ALPHA D ZERO UNSIGNED_INVERT_NV ALPHA
44        CO0 ALPHA DISCARD_NV DISCARD_NV SPARE0_NV NONE NONE FALSE FALSE FALSE
45    
46        FCI G SPARE0_NV UNSIGNED_IDENTITY_NV ALPHA
47        """)
48    
49        tex_scale = 1
50        tex_bias = 0
51        alphalevel = 1
52        w0,w1 = 1,1
53    
54        def colmap0(dotvec): return "1 1 1"
55        def colmap1(dotvec): return "0 0 0"
56    
57    elif GL.hasExtension("GL_EXT_texture_env_dot3"):
58    
59        print "Using 1/4 displacement resolution textures with GL_EXT_texture_env_dot3"
60        
61        texenv = """
62        Hint PERSPECTIVE_CORRECTION_HINT NICEST
63        TexEnv TEXTURE_ENV TEXTURE_ENV_MODE COMBINE_EXT
64        TexEnv TEXTURE_ENV COMBINE_RGB_EXT DOT3_RGBA_EXT
65        TexEnv TEXTURE_ENV SOURCE0_RGB_EXT TEXTURE
66        TexEnv TEXTURE_ENV OPERAND0_RGB_EXT %s
67        TexEnv TEXTURE_ENV SOURCE1_RGB_EXT PREVIOUS_EXT
68        TexEnv TEXTURE_ENV OPERAND1_RGB_EXT SRC_COLOR
69        """
70        texenv_inner = texenv % "SRC_ALPHA"
71        texenv_outer = texenv % "SRC_COLOR"
72        
73        tex_scale = .25
74        tex_bias = .75
75        alphalevel = .5
76        w0,w1 = 1,.5
77    
78        def colmap0(dotvec): return js([.5 + .5 * c for c in dotvec])
79        def colmap1(dotvec): return js([.5 + .25 * c for c in dotvec])
80    else:
81        assert(0)
82    
83    
84  args = ["radius", "2", "ripple_scale", str(ripple_scale),  args = ["radius", "2", "ripple_scale", str(ripple_scale),
85          "scale", ".25", "bias", ".75", "eps", ".125"]          "scale", str(tex_scale), "bias", str(tex_bias), "eps", ".125"]
86    
87  tex = GL.createTexture()  tex = GL.createTexture()
88  texinv = GL.createTexture()  texinv = GL.createTexture()
# Line 32  def getIrregu(texid, x0, y0, x1, y1, out Line 110  def getIrregu(texid, x0, y0, x1, y1, out
110      m = 0.5 * ripple_scale * texscale / len      m = 0.5 * ripple_scale * texscale / len
111      vec = (m * (y1 - y0), -m * (x1 - x0), 0, 0) # cw90      vec = (m * (y1 - y0), -m * (x1 - x0), 0, 0) # cw90
112    
113      vert0 = js(vecmul(vecsub((x0,y0,0,1),vec), 1))      vert0 = js(vecmul(vecsub((x0,y0,0,1),vec), w0))
114      vert1 = js(vecmul(vecadd((x0,y0,0,1),vec), .5))      vert1 = js(vecmul(vecadd((x0,y0,0,1),vec), w1))
115      vert2 = js(vecmul(vecsub((x1,y1,0,1),vec), 1))      vert2 = js(vecmul(vecsub((x1,y1,0,1),vec), w0))
116      vert3 = js(vecmul(vecadd((x1,y1,0,1),vec), .5))      vert3 = js(vecmul(vecadd((x1,y1,0,1),vec), w1))
117    
118      tex0 = js(vecmul((x0,y0,0,texscale), 1))      tex0 = js(vecmul((x0,y0,0,texscale), w0))
119      tex1 = js(vecmul((x0,y0,0,texscale), .5))      tex1 = js(vecmul((x0,y0,0,texscale), w1))
120      tex2 = js(vecmul((x1,y1,0,texscale), 1))      tex2 = js(vecmul((x1,y1,0,texscale), w0))
121      tex3 = js(vecmul((x1,y1,0,texscale), .5))      tex3 = js(vecmul((x1,y1,0,texscale), w1))
122    
123      #print "Vertices:"      #print "Vertices:"
124      #print vert0, tex0      #print vert0, tex0
# Line 51  def getIrregu(texid, x0, y0, x1, y1, out Line 129  def getIrregu(texid, x0, y0, x1, y1, out
129      if outer:      if outer:
130          angle = atan2(y1 - y0, x1 - x0) - texangle          angle = atan2(y1 - y0, x1 - x0) - texangle
131    
         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) ]  
   
132          a = angle * 6 / (2 * pi)          a = angle * 6 / (2 * pi)
133          while a < 0: a+=3          while a < 0: a+=3
134          i = int(a) % 3          i = int(a) % 3
135          f = a - int(a)          f = a - int(a)
           
         col0 = js(lerp(col0l[i], col0l[i+1], f))  
         col1 = js(lerp(col1l[i], col1l[i+1], f))  
136    
137          src = "SRC_COLOR"          vecs = [ (1,0,0),  (0,0,1),  (0,1,0),  (1,0,0) ]
138            vec = lerp(vecs[i], vecs[i+1], f)
139      else:      else:
140          col0 = "1 .5 .5 1"          vec = (1,0,0)
         col1 = ".75 .5 .5 1"  
141    
142          src = "SRC_ALPHA"      col0 = colmap0(vec)
143        col1 = colmap1(vec)
144        dotvec = js(vec)
145    
146      code = """      code = """
147      PushAttrib ENABLE_BIT      PushAttrib ENABLE_BIT
# Line 75  def getIrregu(texid, x0, y0, x1, y1, out Line 149  def getIrregu(texid, x0, y0, x1, y1, out
149      BindTexture TEXTURE_2D %(texid)s      BindTexture TEXTURE_2D %(texid)s
150      TexParameter TEXTURE_2D TEXTURE_MIN_FILTER LINEAR_MIPMAP_LINEAR      TexParameter TEXTURE_2D TEXTURE_MIN_FILTER LINEAR_MIPMAP_LINEAR
151      TexParameter TEXTURE_2D TEXTURE_MAG_FILTER LINEAR      TexParameter TEXTURE_2D TEXTURE_MAG_FILTER LINEAR
     Hint PERSPECTIVE_CORRECTION_HINT NICEST  
152      Enable TEXTURE_2D      Enable TEXTURE_2D
153      """ % locals()      """ % locals()
154            
# Line 84  def getIrregu(texid, x0, y0, x1, y1, out Line 157  def getIrregu(texid, x0, y0, x1, y1, out
157          TexEnv TEXTURE_FILTER_CONTROL_EXT TEXTURE_LOD_BIAS_EXT %s          TexEnv TEXTURE_FILTER_CONTROL_EXT TEXTURE_LOD_BIAS_EXT %s
158          """ % lodbias          """ % lodbias
159    
160      code += """      if outer:
161      TexEnv TEXTURE_ENV TEXTURE_ENV_MODE COMBINE_EXT          code += texenv_outer % locals()
162      TexEnv TEXTURE_ENV COMBINE_RGB_EXT DOT3_RGBA_EXT      else:
163      TexEnv TEXTURE_ENV SOURCE0_RGB_EXT TEXTURE          code += texenv_inner % locals()
     TexEnv TEXTURE_ENV OPERAND0_RGB_EXT %(src)s  
     TexEnv TEXTURE_ENV SOURCE1_RGB_EXT PREVIOUS_EXT  
     TexEnv TEXTURE_ENV OPERAND1_RGB_EXT SRC_COLOR  
164    
165        alpha = alphalevel
166        code += """
167      # Create edge stencil      # Create edge stencil
168    
169      Enable ALPHA_TEST      Enable ALPHA_TEST
170      AlphaFunc LESS 0.5      AlphaFunc LESS %(alpha)s
171      ColorMask 0 0 0 0      ColorMask 0 0 0 0
172    
173      StencilMask 255      StencilMask 255

Legend:
Removed from v.1.16  
changed lines
  Added in v.1.17

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26