gzz-commits
[Top][All Lists]
Advanced

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

[Gzz-commits] gzz/gfx librenderables/renderables.py libutil/I...


From: Janne V. Kujala
Subject: [Gzz-commits] gzz/gfx librenderables/renderables.py libutil/I...
Date: Mon, 11 Nov 2002 07:46:49 -0500

CVSROOT:        /cvsroot/gzz
Module name:    gzz
Changes by:     Janne V. Kujala <address@hidden>        02/11/11 07:46:49

Modified files:
        gfx/librenderables: renderables.py 
        gfx/libutil    : Irregu.hxx 
Added files:
        gfx/demo       : irregu4.py 

Log message:
        more irregulib code

CVSWeb URLs:
http://savannah.gnu.org/cgi-bin/viewcvs/gzz/gzz/gfx/demo/irregu4.py?rev=1.1
http://savannah.gnu.org/cgi-bin/viewcvs/gzz/gzz/gfx/librenderables/renderables.py.diff?tr1=1.135&tr2=1.136&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gzz/gzz/gfx/libutil/Irregu.hxx.diff?tr1=1.2&tr2=1.3&r1=text&r2=text

Patches:
Index: gzz/gfx/librenderables/renderables.py
diff -u gzz/gfx/librenderables/renderables.py:1.135 
gzz/gfx/librenderables/renderables.py:1.136
--- gzz/gfx/librenderables/renderables.py:1.135 Sun Nov 10 11:07:47 2002
+++ gzz/gfx/librenderables/renderables.py       Mon Nov 11 07:46:49 2002
@@ -1270,6 +1270,80 @@
         """,
 }    ,
 
+# coords1: paper => window
+# coords2: frame => paper (assumed to be affine)
+#
+# texscale is paper-texture scaling
+# ripple_scale is the amplitude-period scale of the texture
+{
+    "Type" : "2",
+    "Name": "IrregularEdge",
+    "Data": """float texscale, border0, border1, ripple_scale;
+            float col0[4], col1[4]; int angles, multi, flags;
+            CallGLCode setup;
+           float dicefactor;""",
+    "Params" : """
+           float texscale, float border0, float border1, float ripple_scale,
+            String col0, String col1, int angles, int multi, int flags,
+            String setupcode, float dicefactor
+       """,
+    "ParamCode" : """
+            this->texscale = texscale;
+            this->border0 = border0;
+            this->border1 = border1;
+            this->ripple_scale = ripple_scale;
+            this->col0[0] = this->col0[1] = this->col0[2] = this->col0[3] = 1;
+            this->col1[0] = this->col1[1] = this->col1[2] = this->col1[3] = 1;
+            string foo;
+            foo = string(col0.begin(), col0.end());
+            sscanf(foo.c_str(), "%f %f %f %f",
+                  &this->col0[0], &this->col0[1],
+                  &this->col0[2], &this->col0[3]);
+            foo = string(col1.begin(), col1.end());
+            sscanf(foo.c_str(), "%f %f %f %f",
+                  &this->col1[0], &this->col1[1],
+                  &this->col1[2], &this->col1[3]);
+            this->angles = angles;
+            this->multi = multi;
+            this->flags = flags;
+            foo = string(setupcode.begin(), setupcode.end());
+            setup = CallGLCode(foo.c_str());
+           this->dicefactor = dicefactor;
+       """,
+    "RenderCode" : """
+        DBG(dbg) << "IrregularEdge\\n";
+
+        // XXX: TODO: use coords1.nonlinearity()
+        int n = (int)(36 * dicefactor);
+        std::vector<ZPt> vert(n+1);
+        std::vector<ZVec> norm(n+1);
+
+        for (int i = 0; i <= n; i++) { 
+            float a = i * 2*M_PI / n;
+            vert[i] = coords2.transform(ZPt(cos(a), sin(a), 0));
+        }
+
+        for (int i = 0; i <= n; i++) {
+            norm[i] = (vert[(i+1) % n] - vert[(i+n-1) % n]).cw90().normalize();
+
+            norm[i] *= (ripple_scale * texscale) /
+                   norm[i].dot((vert[(i+1) % n] - vert[i]).cw90().normalize());
+        }
+
+        setup();
+        GLERR;
+        Irregu::draw(coords1, vert, norm, texscale,
+                     border0, border1, col0, col1, angles, multi, flags);
+
+        GLERR;
+        glPopAttrib();
+        GLERR;
+
+        DBG(dbg) << "IrregularEdge done\\n";
+
+        """,
+}    ,
+
 {
     "Type": "2",
     "Name": "CalendarPaper",
Index: gzz/gfx/libutil/Irregu.hxx
diff -u gzz/gfx/libutil/Irregu.hxx:1.2 gzz/gfx/libutil/Irregu.hxx:1.3
--- gzz/gfx/libutil/Irregu.hxx:1.2      Sun Nov 10 11:07:47 2002
+++ gzz/gfx/libutil/Irregu.hxx  Mon Nov 11 07:46:49 2002
@@ -24,6 +24,8 @@
     }
 
     inline void multiTexCoord(GLenum unit, ZPt p, float q) {
+       //std::cout << "multitexcoord" << (unit & 61)
+       //        << " " << p << q << "\n";
        glMultiTexCoord4f(unit, p.x, p.y, p.z, q);
     }
 
@@ -119,22 +121,21 @@
            glBegin(GL_QUADS);
            for (unsigned i = 0, j = 1; j < pt.size(); i++, j++) {
 
-               float d0, d1;
+               ZVec d0, d1;
                float dy;
 
                if (multi > 0) {
-                   ZVec dv0 = vert2[i][0] - vert2[j][0];
-                   ZVec dv1 = vert2[i][1] - vert2[j][1];
+                   ZVec dv0 = vert2[j][0] - vert2[i][0];
+                   ZVec dv1 = vert2[j][1] - vert2[i][1];
                    ZVec dt = pt[j] - pt[i];
-                   float l2v0 = dv0.dot(dv0);
-                   float l2v1 = dv1.dot(dv1);
-                   float l2t = dt.dot(dt);
 
-                   d0 = sqrt(l2t / l2v0);
-                   d1 = sqrt(l2t / l2v1);
+                   // XXX: 1.5 hardcoded
+                   d0 = dt * (1.5 / dv0.length());
+                   d1 = dt * (1.5 / dv1.length());
 
                    dy = 1.0 / 
                        dv0.cw90().normalize().dot(vert2[i][1] - vert2[i][0]);
+                   //std::cout << dy << "\n";
 
                    // XXX: should not be hardcoded
                    glColor4f(0,0,dy,dy);
@@ -162,8 +163,8 @@
                texCoord(a1q, texscale * q1);
                u = GL_TEXTURE1;
                for (int d = 1; d <= multi; d++) {
-                   multiTexCoord(u++, lerp(a1q, b1q, d * d1), texscale * q1);
-                   multiTexCoord(u++, lerp(a1q, b1q, -d * d1), texscale * q1);
+                   multiTexCoord(u++, a1q + d * d1, texscale * q1);
+                   multiTexCoord(u++, a1q - d * d1, texscale * q1);
                }
                vertex(vert2[i][1]);
 
@@ -171,8 +172,8 @@
                texCoord(pt[i], texscale);
                u = GL_TEXTURE1;
                for (int d = 1; d <= multi; d++) {
-                   multiTexCoord(u++, lerp(pt[i], pt[j], d * d0), texscale);
-                   multiTexCoord(u++, lerp(pt[i], pt[j], -d * d0), texscale);
+                   multiTexCoord(u++, pt[i] + d * d0, texscale);
+                   multiTexCoord(u++, pt[i] - d * d0, texscale);
                }
                vertex(vert2[i][0]);
 
@@ -187,8 +188,8 @@
                texCoord(pt[j], texscale);
                u = GL_TEXTURE1;
                for (int d = 1; d <= multi; d++) {
-                   multiTexCoord(u++, lerp(pt[j], pt[i], -d * d0), texscale);
-                   multiTexCoord(u++, lerp(pt[j], pt[i], d * d0), texscale);
+                   multiTexCoord(u++, pt[j] + d * d0, texscale);
+                   multiTexCoord(u++, pt[j] - d * d0, texscale);
                }
                vertex(vert2[j][0]);
                
@@ -196,8 +197,8 @@
                texCoord(b1q, texscale * q1);
                u = GL_TEXTURE1;
                for (int d = 1; d <= multi; d++) {
-                   multiTexCoord(u++, lerp(b1q, a1q, -d * d1), texscale * q1);
-                   multiTexCoord(u++, lerp(b1q, a1q, d * d1), texscale * q1);
+                   multiTexCoord(u++, b1q + d * d1, texscale * q1);
+                   multiTexCoord(u++, b1q - d * d1, texscale * q1);
                }
                vertex(vert2[j][1]);
            }




reply via email to

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