gzz-commits
[Top][All Lists]
Advanced

[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 {
                
 




reply via email to

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