home *** CD-ROM | disk | FTP | other *** search
- Newsgroups: comp.sources.misc
- From: Inge Wallin <ingwa@isy.liu.se>
- Subject: v20i021: sipp2.0 - a library for 3D graphics, Patch02
- Message-ID: <1991May29.024950.12943@sparky.IMD.Sterling.COM>
- X-Md4-Signature: 12f353314fabfb3a91a4152920990eb2
- Date: Wed, 29 May 1991 02:49:50 GMT
- Approved: kent@sparky.imd.sterling.com
-
- Submitted-by: Inge Wallin <ingwa@isy.liu.se>
- Posting-number: Volume 20, Issue 21
- Archive-name: sipp2.0/patch02
- Patch-To: sipp2.0: Volume 16, Issue 5-10
-
- The following context diff brings SIPP, the Simple polygon processor
- to version 2.0.2. The diff fixes a bug which sometimes caused
- polygons to erroneously be marked as facing from the viewer although
- they in reality were not.
-
- The patch can also be fetched by anonymous ftp from isy.liu.se
- (130.236.1.3) in the subdirectory pub/sipp.
-
- /Inge and Jonas
-
- O / \ O
- ------------------------- X snip snip X ------------------------------
- O \ / O
-
- Common subdirectories: sipp-2.0.1/demo and sipp-2.0.2/demo
- Common subdirectories: sipp-2.0.1/doc and sipp-2.0.2/doc
- Common subdirectories: sipp-2.0.1/libsipp and sipp-2.0.2/libsipp
- diff -c -r sipp-2.0.1/libsipp/geometric.c sipp-2.0.2/libsipp/geometric.c
- *** sipp-2.0.1/libsipp/geometric.c Mon May 27 22:52:57 1991
- --- sipp-2.0.2/libsipp/geometric.c Mon May 27 22:40:51 1991
- ***************
- *** 103,108 ****
- --- 103,114 ----
-
- cosang = cos(ang);
- sinang = sin(ang);
- + if (fabs(cosang) < 1.0e-15) {
- + cosang = 0.0;
- + }
- + if (fabs(sinang) < 1.0e-15) {
- + sinang = 0.0;
- + }
- for (i = 0; i < 4; ++i) {
- tmp = mat->mat[i][1];
- mat->mat[i][1] = mat->mat[i][1] * cosang
- ***************
- *** 136,141 ****
- --- 142,153 ----
-
- cosang = cos(ang);
- sinang = sin(ang);
- + if (fabs(cosang) < 1.0e-15) {
- + cosang = 0.0;
- + }
- + if (fabs(sinang) < 1.0e-15) {
- + sinang = 0.0;
- + }
- for (i = 0; i < 4; ++i) {
- tmp = mat->mat[i][0];
- mat->mat[i][0] = mat->mat[i][0] * cosang
- ***************
- *** 169,174 ****
- --- 181,192 ----
-
- cosang = cos(ang);
- sinang = sin(ang);
- + if (fabs(cosang) < 1.0e-15) {
- + cosang = 0.0;
- + }
- + if (fabs(sinang) < 1.0e-15) {
- + sinang = 0.0;
- + }
- for (i = 0; i < 4; ++i) {
- tmp = mat->mat[i][0];
- mat->mat[i][0] = mat->mat[i][0] * cosang
- Only in sipp-2.0.2/libsipp: patchlevel.h
- diff -c -r sipp-2.0.1/libsipp/sipp.c sipp-2.0.2/libsipp/sipp.c
- *** sipp-2.0.1/libsipp/sipp.c Mon May 27 22:52:59 1991
- --- sipp-2.0.2/libsipp/sipp.c Mon May 27 22:47:00 1991
- ***************
- *** 19,24 ****
- --- 19,28 ----
- *
- * Revision history:
- *
- + * 910527 Ver. 2.0.2. A major bug in traverse_object_tree() fixed.
- + * The invers transformation of the eyepoint was not correct,
- + * causing polygons erroneously to be marked as backfacing.
- + *
- * 910412 Ver. 2.0.1. Some minor bugfixes. Division by zero in
- * create_edges() if an edge was horizontal in both x and y.
- * Free-list became corrupted since the y_bucket was freed
- ***************
- *** 89,95 ****
- #include <geometric.h>
-
-
- ! #define VERSION "2.0.1"
-
- #define ZCLIPF 100.0 /* Magic number used when defining hither & yon */
-
- --- 93,99 ----
- #include <geometric.h>
-
-
- ! #define VERSION "2.0.2"
-
- #define ZCLIPF 100.0 /* Magic number used when defining hither & yon */
-
- ***************
- *** 1850,1855 ****
- --- 1854,1861 ----
- Polygon *polyref;
- Vector eyepoint, tmp;
- double loc_view_mat[4][4];
- + double m[3][4], dtmp;
- + int i, j;
-
-
- if (object == NULL) {
- ***************
- *** 1873,1884 ****
- tmp.x -= curr_mat.mat[3][0];
- tmp.y -= curr_mat.mat[3][1];
- tmp.z -= curr_mat.mat[3][2];
- ! eyepoint.x = (tmp.x * curr_mat.mat[0][0] + tmp.y * curr_mat.mat[0][1]
- ! + tmp.z * curr_mat.mat[0][2]);
- ! eyepoint.y = (tmp.x * curr_mat.mat[1][0] + tmp.y * curr_mat.mat[1][1]
- ! + tmp.z * curr_mat.mat[1][2]);
- ! eyepoint.z = (tmp.x * curr_mat.mat[2][0] + tmp.y * curr_mat.mat[2][1]
- ! + tmp.z * curr_mat.mat[2][2]);
-
- for (surfref = objref->surfaces; surfref != NULL;
- surfref = surfref->next) {
- --- 1879,1926 ----
- tmp.x -= curr_mat.mat[3][0];
- tmp.y -= curr_mat.mat[3][1];
- tmp.z -= curr_mat.mat[3][2];
- ! m[0][0] = curr_mat.mat[0][0] ; m[0][1] = curr_mat.mat[1][0];
- ! m[0][2] = curr_mat.mat[2][0] ; m[0][3] = tmp.x;
- ! m[1][0] = curr_mat.mat[0][1] ; m[1][1] = curr_mat.mat[1][1];
- ! m[1][2] = curr_mat.mat[2][1] ; m[1][3] = tmp.y;
- ! m[2][0] = curr_mat.mat[0][2] ; m[2][1] = curr_mat.mat[1][2];
- ! m[2][2] = curr_mat.mat[2][2] ; m[2][3] = tmp.z;
- !
- ! if (m[0][0] == 0.0) {
- ! if (m[1][0] != 0.0)
- ! j = 1;
- ! else
- ! j = 2;
- ! for (i = 0; i < 4; i++) {
- ! dtmp = m[0][i];
- ! m[0][i] = m[j][i];
- ! m[j][i] = dtmp;
- ! }
- ! }
- !
- ! for (j = 1; j < 3; j++) {
- ! m[j][0] /= (-m[0][0]);
- ! for (i = 1; i < 4; i++)
- ! m[j][i] += m[0][i] * m[j][0];
- ! }
- !
- ! if (m[1][1] == 0.0)
- ! for (i = 1; i < 4; i++) {
- ! dtmp = m[1][i];
- ! m[1][i] = m[2][i];
- ! m[2][i] = dtmp;
- ! }
- !
- ! if (m[1][1] != 0.0) {
- ! m[2][1] /= (-m[1][1]);
- ! m[2][2] += m[1][2] * m[2][1];
- ! m[2][3] += m[1][3] * m[2][1];
- ! }
- !
- ! eyepoint.z = m[2][3] / m[2][2];
- ! eyepoint.y = (m[1][3] - eyepoint.z * m[1][2]) / m[1][1];
- ! eyepoint.x = (m[0][3] - eyepoint.z * m[0][2]
- ! - eyepoint.y * m[0][1]) / m[0][0];
-
- for (surfref = objref->surfaces; surfref != NULL;
- surfref = surfref->next) {
-
-
- exit 0 # Just in case...
- --
- Kent Landfield INTERNET: kent@sparky.IMD.Sterling.COM
- Sterling Software, IMD UUCP: uunet!sparky!kent
- Phone: (402) 291-8300 FAX: (402) 291-4362
- Please send comp.sources.misc-related mail to kent@uunet.uu.net.
-