[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Gzz-commits] libvob/include/vob/vobs Fillet.hxx
From: |
Janne V. Kujala |
Subject: |
[Gzz-commits] libvob/include/vob/vobs Fillet.hxx |
Date: |
Thu, 10 Jul 2003 08:09:36 -0400 |
CVSROOT: /cvsroot/libvob
Module name: libvob
Branch:
Changes by: Janne V. Kujala <address@hidden> 03/07/10 08:09:36
Modified files:
include/vob/vobs: Fillet.hxx
Log message:
proper norms for poles
CVSWeb URLs:
http://savannah.gnu.org/cgi-bin/viewcvs/libvob/libvob/include/vob/vobs/Fillet.hxx.diff?tr1=1.48&tr2=1.49&r1=text&r2=text
Patches:
Index: libvob/include/vob/vobs/Fillet.hxx
diff -u libvob/include/vob/vobs/Fillet.hxx:1.48
libvob/include/vob/vobs/Fillet.hxx:1.49
--- libvob/include/vob/vobs/Fillet.hxx:1.48 Sat Jul 5 09:13:03 2003
+++ libvob/include/vob/vobs/Fillet.hxx Thu Jul 10 08:09:36 2003
@@ -828,14 +828,30 @@
}
- void renderCylinder(const std::vector<ZVec> &pt, int n, int m) const {
+ void renderCylinder(const std::vector<ZVec> &pt, int n, int m,
+ bool pole0 = false, bool pole1 = false) const {
std::vector<ZVec> norm(n * m);
int i, j;
- for (i = 0; i < n; i++) {
+ ZVec sum(0,0,0);
+ for (j = 0; j < m; j++) {
+ ZVec px0 = pt[0 * m + j];
+ ZVec px1 = pt[1 * m + j];
+ ZVec py0 = pt[pole0 * m + (j== 0 ? m-1 : j-1)];
+ ZVec py1 = pt[pole0 * m + (j==m-1 ? 0 : j+1)];
+
+ sum += norm[0 * m + j] = (px1 - px0).crossp(py1 - py0).normalized();
+ }
+ if (pole0) {
+ sum = sum.normalized();
+ for (j = 0; j < m; j++) norm[0 * m + j] = sum;
+ }
+
+ sum = ZVec(0,0,0);
+ for (i = 1; i < n-1; i++) {
for (j = 0; j < m; j++) {
- ZVec px0 = pt[(i== 0 ? 0 : i-1) * m + j];
- ZVec px1 = pt[(i==n-1 ? n-1 : i+1) * m + j];
+ ZVec px0 = pt[(i-1) * m + j];
+ ZVec px1 = pt[(i+1) * m + j];
ZVec py0 = pt[i * m + (j== 0 ? m-1 : j-1)];
ZVec py1 = pt[i * m + (j==m-1 ? 0 : j+1)];
@@ -843,6 +859,19 @@
}
}
+ for (j = 0; j < m; j++) {
+ ZVec px0 = pt[(n-2) * m + j];
+ ZVec px1 = pt[(n-1) * m + j];
+ ZVec py0 = pt[(n-1-pole1) * m + (j== 0 ? m-1 : j-1)];
+ ZVec py1 = pt[(n-1-pole1) * m + (j==m-1 ? 0 : j+1)];
+
+ sum += norm[(n - 1) * m + j] = (px1 - px0).crossp(py1 -
py0).normalized();
+ }
+ if (pole1) {
+ sum = sum.normalized();
+ for (j = 0; j < m; j++) norm[(n-1) * m + j] = sum;
+ }
+
for (i = 0; i < n - 1; i++) {
glBegin(GL_QUAD_STRIP);
for (j = 0; j < m; j++) {
@@ -994,7 +1023,7 @@
}
}
- renderCylinder(pt, ndice + 1, ndice);
+ renderCylinder(pt, ndice + 1, ndice, false, true);
}
}
@@ -1022,7 +1051,7 @@
for (i = 0; i < (ndice + 1) * (ndice * 2); i++)
pt[i] = blend(conns, N, r, pt[i]) + p0;
- renderCylinder(pt, ndice + 1, ndice * 2);
+ renderCylinder(pt, ndice + 1, ndice * 2, true, true);
} else {