home *** CD-ROM | disk | FTP | other *** search
- /******************************************************************************
- * object.c
- ******************************************************************************
- *
- * Purpose:
- * Descriptional text.
- *
- * Authors:
- * Michael Teschner and Christian Henn
- *
- * Note:
- * None.
- *
- * Revisions:
- * 10.11.93 micha Created file.
- *
- ******************************************************************************
- *
- * COPYRIGHT (C) 1992, 1993, 1994
- *
- * BY CHRISTIAN HENN M.E. MUELLER-INSTITUTE FOR MICROSCOPY (MIM)
- * HENN@COMP.BIOZ.UNIBAS.CH CH-4056 BASEL, SWITZERLAND
- *
- * AND MICHAEL WALDHERR-TESCHNER SILICON GRAPHICS INDUSTRIES (SGI)
- * MICHA@BASEL.SGI.COM CH-4125 RIEHEN, SWITZERLAND
- *
- ******************************************************************************
- *
- * PERMISSION TO USE, COPY, MODIFY AND DISTRIBUTE THIS SOFTWARE AND ITS DOCU-
- * MENTATION FOR THE PURPOSE OF RESEARCH, DEVELOPMENT AND EDUCATION IS HEREBY
- * GRANTED FREE OF CHARGE, SUBJECT TO THE FOLLOWING RESTRICTIONS:
- *
- * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, EXPRESS,
- * IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF DESIGN,
- * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, OR ARISING FROM A
- * COURSE OF DEALING, USAGE OR TRADE PRACTICE.
- *
- * IN NO EVENT SHALL SILICON GRAPHICS OR THE M.E. MUELLER-INSTITUTE BE LIABLE
- * FOR ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
- * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
- * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF
- * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
- * THIS SOFTWARE.
- *
- ******************************************************************************
- */
- #include <stdio.h>
- #include <math.h>
- #include <gl/gl.h>
-
- #define PHI_TESS 16
- #define PSI_TESS 8
-
- /* #define PHI_TESS 256
- #define PSI_TESS 128
- */
-
- #define M_PHI (M_PI/(PHI_TESS.0-1.0)*2.0)
- #define M_PSI (M_PI/(PSI_TESS.0-1.0)*1.0)
-
- float coord[PSI_TESS][PHI_TESS][3]; /* coords and normals of a sphere */
-
- int shade_flag;
- int line_flag;
- int solid_flag;
- int mss_flag;
-
- int object_create()
- {
- float r,z;
- float phi_angle,psi_angle;
- int phi,psi;
-
- psi_angle = 0.0;
- for(psi = 0; psi < PSI_TESS; psi++) {
- z = fcos(psi_angle);
- r = fsin(psi_angle);
- phi_angle = 0.0;
- for(phi = 0; phi < PHI_TESS; phi++) {
- coord[psi][phi][2] = z;
- coord[psi][phi][1] = r * fsin(phi_angle);
- coord[psi][phi][0] = r * fcos(phi_angle);
- phi_angle += M_PHI;
- }
- psi_angle += M_PSI;
- }
-
- } /* END object_create */
-
- float tcoord[4][3] = {
- {0.0,0.0,0.0},
- {1.0,0.0,0.0},
- {1.0,1.0,0.0},
- {0.0,1.0,0.0}
- };
-
- float lcoord[4][3] = {
- {-.5,-.5,0.0},
- {0.5,-.5,0.0},
- {0.5,0.5,0.0},
- {-.5,0.5,0.0}
- };
-
- int object_draw()
- {
- int phi,psi; /* we will draw a simple sphere */
-
- /* set the model color */
- zbuffer(TRUE);
- /* RGBcolor(230,210,255); */
-
- RGBcolor(255,255,255);
- /* 0----3->
- * | |
- * | |
- * 1----2->
- */
-
- if( solid_flag ) {
- if( shade_flag == 1 ) { /* phong shading */
- for(psi = 0; psi < (PSI_TESS-1); psi++) {
- bgnqstrip();
- t3f(&coord[psi ][0][0]);
- v3f(&coord[psi ][0][0]);
- t3f(&coord[psi+1][0][0]);
- v3f(&coord[psi+1][0][0]);
- for(phi = 0; phi <= (PHI_TESS-1); phi++) {
- t3f(&coord[psi+1][phi][0]);
- v3f(&coord[psi+1][phi][0]);
- t3f(&coord[psi ][phi][0]);
- v3f(&coord[psi ][phi][0]);
- }
- endqstrip();
- }
- }
- else { /* gouraud shading */
- for(psi = 0; psi < (PSI_TESS-1); psi++) {
- bgnqstrip();
- n3f(&coord[psi ][0][0]);
- v3f(&coord[psi ][0][0]);
- n3f(&coord[psi+1][0][0]);
- v3f(&coord[psi+1][0][0]);
- for(phi = 0; phi <= (PHI_TESS-1); phi++) {
- n3f(&coord[psi+1][phi][0]);
- v3f(&coord[psi+1][phi][0]);
- n3f(&coord[psi ][phi][0]);
- v3f(&coord[psi ][phi][0]);
- }
- endqstrip();
- }
- }
- }
-
- /* */
-
- if( line_flag ) {
- shademodel(FLAT);
- polymode (PYM_LINE);
- sbr_settexture(0);
- RGBcolor(255,255,255);
- scale( 1.005,1.005,1.005);
-
- linesmooth( SML_ON);
- blendfunction (BF_SA, BF_MSA);
-
- for(psi = 0; psi < (PSI_TESS-1); psi++) {
- bgnqstrip();
- v3f(&coord[psi ][0][0]);
- v3f(&coord[psi+1][0][0]);
- for(phi = 0; phi <= (PHI_TESS-1); phi++) {
- v3f(&coord[psi+1][phi][0]);
- v3f(&coord[psi ][phi][0]);
- }
- endqstrip();
- }
-
- shademodel(GOURAUD);
- polymode (PYM_FILL);
-
- linesmooth( SML_OFF );
- blendfunction( BF_ONE, BF_ZERO );
-
- }
-
- } /* END object_draw */
-