[Top][All Lists]
[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]);
}