132001f49Smrg 232001f49Smrg/* 332001f49Smrg * Copyright (c) 1991, 1992, 1993 Silicon Graphics, Inc. 432001f49Smrg * 532001f49Smrg * Permission to use, copy, modify, distribute, and sell this software and 632001f49Smrg * its documentation for any purpose is hereby granted without fee, provided 732001f49Smrg * that (i) the above copyright notices and this permission notice appear in 832001f49Smrg * all copies of the software and related documentation, and (ii) the name of 932001f49Smrg * Silicon Graphics may not be used in any advertising or 1032001f49Smrg * publicity relating to the software without the specific, prior written 1132001f49Smrg * permission of Silicon Graphics. 1232001f49Smrg * 1332001f49Smrg * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF 1432001f49Smrg * ANY KIND, 1532001f49Smrg * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY 1632001f49Smrg * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. 1732001f49Smrg * 1832001f49Smrg * IN NO EVENT SHALL SILICON GRAPHICS BE LIABLE FOR 1932001f49Smrg * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, 2032001f49Smrg * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, 2132001f49Smrg * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF 2232001f49Smrg * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE 2332001f49Smrg * OF THIS SOFTWARE. 2432001f49Smrg */ 2532001f49Smrg 2632001f49Smrg#include <stdio.h> 2732001f49Smrg#include <string.h> 2832001f49Smrg#include <stdlib.h> 2932001f49Smrg#include "glut_wrap.h" 3032001f49Smrg 3132001f49Smrg 3232001f49Smrg#define PI 3.141592654 3332001f49Smrg 3432001f49Smrg#define BLACK 0 3532001f49Smrg#define GRAY 128 3632001f49Smrg#define WHITE 255 3732001f49Smrg#define BL 0x00 3832001f49Smrg#define WH 0xFF 3932001f49Smrg#define RD 0xA4,0x00,0x00,0xFF 4032001f49Smrg#define WT 0xFF,0xFF,0xFF,0xFF 4132001f49Smrg 4232001f49Smrg#define CHECKIMAGEWIDTH 8 4332001f49Smrg#define CHECKIMAGEHEIGHT 8 4432001f49Smrg#define BRICKIMAGEWIDTH 16 4532001f49Smrg#define BRICKIMAGEHEIGHT 16 4632001f49Smrg 4732001f49Smrg 4832001f49SmrgGLenum rgb, doubleBuffer; 4932001f49Smrg 5032001f49Smrg#include "tkmap.c" 5132001f49Smrg 5232001f49Smrgfloat black[3] = {0.0, 0.0, 0.0}; 5332001f49Smrgfloat white[3] = {1.0, 1.0, 1.0}; 5432001f49Smrgfloat gray[3] = {0.5, 0.5, 0.5}; 5532001f49Smrgfloat blue[3] = {0.0, 0.0, 1.0}; 5632001f49SmrgGLint colorIndexes[3] = {0, 200, 255}; 5732001f49Smrg 5832001f49SmrgGLenum polyMode; 5932001f49SmrgGLboolean dithering; 6032001f49SmrgGLboolean shade; 6132001f49SmrgGLboolean doStipple; 6232001f49SmrgGLboolean noDraw = 0; 6332001f49SmrgGLboolean LineSmooth = GL_FALSE; 6432001f49Smrg 6532001f49Smrgdouble plane[4] = {1.0, 0.0, -1.0, 0.0}; 6632001f49Smrgfloat xRotation = 30.0, yRotation = 30.0; 6732001f49Smrgfloat zTranslation = -15.0; 6832001f49Smrg 6932001f49SmrgGLint singleCylinder; 7032001f49SmrgGLint doubleCylinder; 7132001f49SmrgGLint elbow, logo; 7232001f49Smrg 7332001f49SmrgGLubyte checkImage[3*CHECKIMAGEWIDTH*CHECKIMAGEHEIGHT] = { 7432001f49Smrg BL, BL, BL, WH, WH, WH, BL, BL, BL, WH, WH, WH, BL, BL, BL, WH, 7532001f49Smrg WH, WH, BL, BL, BL, WH, WH, WH, WH, WH, WH, BL, BL, BL, WH, WH, 7632001f49Smrg WH, BL, BL, BL, WH, WH, WH, BL, BL, BL, WH, WH, WH, BL, BL, BL, 7732001f49Smrg BL, BL, BL, WH, WH, WH, BL, BL, BL, WH, WH, WH, BL, BL, BL, WH, 7832001f49Smrg WH, WH, BL, BL, BL, WH, WH, WH, WH, WH, WH, BL, BL, BL, WH, WH, 7932001f49Smrg WH, BL, BL, BL, WH, WH, WH, BL, BL, BL, WH, WH, WH, BL, BL, BL, 8032001f49Smrg BL, BL, BL, WH, WH, WH, BL, BL, BL, WH, WH, WH, BL, BL, BL, WH, 8132001f49Smrg WH, WH, BL, BL, BL, WH, WH, WH, WH, WH, WH, BL, BL, BL, WH, WH, 8232001f49Smrg WH, BL, BL, BL, WH, WH, WH, BL, BL, BL, WH, WH, WH, BL, BL, BL, 8332001f49Smrg BL, BL, BL, WH, WH, WH, BL, BL, BL, WH, WH, WH, BL, BL, BL, WH, 8432001f49Smrg WH, WH, BL, BL, BL, WH, WH, WH, WH, WH, WH, BL, BL, BL, WH, WH, 8532001f49Smrg WH, BL, BL, BL, WH, WH, WH, BL, BL, BL, WH, WH, WH, BL, BL, BL, 8632001f49Smrg}; 8732001f49SmrgGLubyte brickImage[4*BRICKIMAGEWIDTH*BRICKIMAGEHEIGHT] = { 8832001f49Smrg RD, RD, RD, RD, RD, RD, RD, RD, RD, WT, RD, RD, RD, RD, RD, RD, 8932001f49Smrg RD, RD, RD, RD, RD, RD, RD, RD, RD, WT, RD, RD, RD, RD, RD, RD, 9032001f49Smrg RD, RD, RD, RD, RD, RD, RD, RD, RD, WT, RD, RD, RD, RD, RD, RD, 9132001f49Smrg RD, RD, RD, RD, RD, RD, RD, RD, RD, WT, RD, RD, RD, RD, RD, RD, 9232001f49Smrg WT, WT, WT, WT, WT, WT, WT, WT, WT, WT, WT, WT, WT, WT, WT, WT, 9332001f49Smrg RD, RD, RD, WT, RD, RD, RD, RD, RD, RD, RD, RD, RD, WT, RD, RD, 9432001f49Smrg RD, RD, RD, WT, RD, RD, RD, RD, RD, RD, RD, RD, RD, WT, RD, RD, 9532001f49Smrg RD, RD, RD, WT, RD, RD, RD, RD, RD, RD, RD, RD, RD, WT, RD, RD, 9632001f49Smrg RD, RD, RD, WT, RD, RD, RD, RD, RD, RD, RD, RD, RD, WT, RD, RD, 9732001f49Smrg WT, WT, WT, WT, WT, WT, WT, WT, WT, WT, WT, WT, WT, WT, WT, WT, 9832001f49Smrg RD, RD, RD, RD, RD, RD, RD, WT, RD, RD, RD, RD, RD, RD, RD, RD, 9932001f49Smrg RD, RD, RD, RD, RD, RD, RD, WT, RD, RD, RD, RD, RD, RD, RD, RD, 10032001f49Smrg RD, RD, RD, RD, RD, RD, RD, WT, RD, RD, RD, RD, RD, RD, RD, RD, 10132001f49Smrg RD, RD, RD, RD, RD, RD, RD, WT, RD, RD, RD, RD, RD, RD, RD, RD, 10232001f49Smrg WT, WT, WT, WT, WT, WT, WT, WT, WT, WT, WT, WT, WT, WT, WT, WT, 10332001f49Smrg RD, RD, RD, RD, WT, RD, RD, RD, RD, RD, RD, RD, RD, RD, WT, RD 10432001f49Smrg}; 10532001f49Smrg 10632001f49SmrgGLubyte *image = checkImage; 10732001f49SmrgGLint imageHeight = CHECKIMAGEHEIGHT; 10832001f49SmrgGLint imageWidth = CHECKIMAGEWIDTH; 10932001f49Smrg 11032001f49Smrgstatic float decal[] = { 11132001f49Smrg GL_DECAL, 11232001f49Smrg}; 11332001f49Smrgstatic float modulate[] = { 11432001f49Smrg GL_MODULATE, 11532001f49Smrg}; 11632001f49Smrgstatic float repeat[] = { 11732001f49Smrg GL_REPEAT, 11832001f49Smrg}; 11932001f49Smrgstatic float nearest[] = { 12032001f49Smrg GL_NEAREST, 12132001f49Smrg}; 12232001f49Smrg 12332001f49SmrgGLubyte stipple[4*32] = { 12432001f49Smrg 0x00, 0x00, 0x00, 0x00, 12532001f49Smrg 0x00, 0x00, 0x00, 0x00, 12632001f49Smrg 0x00, 0x00, 0x00, 0x00, 12732001f49Smrg 0x00, 0x00, 0x00, 0x00, 12832001f49Smrg 0x00, 0x00, 0x00, 0x00, 12932001f49Smrg 0x00, 0x00, 0x00, 0x00, 13032001f49Smrg 0x00, 0x00, 0x00, 0x00, 13132001f49Smrg 0x00, 0x00, 0x00, 0x00, 13232001f49Smrg 13332001f49Smrg 0x00, 0x0F, 0xF0, 0x00, 13432001f49Smrg 0x00, 0x0F, 0xF0, 0x00, 13532001f49Smrg 0x00, 0x0F, 0xF0, 0x00, 13632001f49Smrg 0x00, 0x0F, 0xF0, 0x00, 13732001f49Smrg 0x00, 0x0F, 0xF0, 0x00, 13832001f49Smrg 0x00, 0x0F, 0xF0, 0x00, 13932001f49Smrg 0x00, 0x0F, 0xF0, 0x00, 14032001f49Smrg 0x00, 0x0F, 0xF0, 0x00, 14132001f49Smrg 14232001f49Smrg 0x00, 0x0F, 0xF0, 0x00, 14332001f49Smrg 0x00, 0x0F, 0xF0, 0x00, 14432001f49Smrg 0x00, 0x0F, 0xF0, 0x00, 14532001f49Smrg 0x00, 0x0F, 0xF0, 0x00, 14632001f49Smrg 0x00, 0x0F, 0xF0, 0x00, 14732001f49Smrg 0x00, 0x0F, 0xF0, 0x00, 14832001f49Smrg 0x00, 0x0F, 0xF0, 0x00, 14932001f49Smrg 0x00, 0x0F, 0xF0, 0x00, 15032001f49Smrg 15132001f49Smrg 0x00, 0x00, 0x00, 0x00, 15232001f49Smrg 0x00, 0x00, 0x00, 0x00, 15332001f49Smrg 0x00, 0x00, 0x00, 0x00, 15432001f49Smrg 0x00, 0x00, 0x00, 0x00, 15532001f49Smrg 0x00, 0x00, 0x00, 0x00, 15632001f49Smrg 0x00, 0x00, 0x00, 0x00, 15732001f49Smrg 0x00, 0x00, 0x00, 0x00, 15832001f49Smrg 0x00, 0x00, 0x00, 0x00, 15932001f49Smrg}; 16032001f49Smrg 16132001f49Smrgfloat tscp[18][2] = { 16232001f49Smrg { 16332001f49Smrg 0.0, 0.0 16432001f49Smrg }, 16532001f49Smrg { 16632001f49Smrg 1.0, 0.0 16732001f49Smrg }, 16832001f49Smrg { 16932001f49Smrg 0.0, 0.125 17032001f49Smrg }, 17132001f49Smrg { 17232001f49Smrg 1.0, 0.125 17332001f49Smrg }, 17432001f49Smrg { 17532001f49Smrg 0.0, 0.250 17632001f49Smrg }, 17732001f49Smrg { 17832001f49Smrg 1.0, 0.25 17932001f49Smrg }, 18032001f49Smrg { 18132001f49Smrg 0.0, 0.375 18232001f49Smrg }, 18332001f49Smrg { 18432001f49Smrg 1.0, 0.375 18532001f49Smrg }, 18632001f49Smrg { 18732001f49Smrg 0.0, 0.50 18832001f49Smrg }, 18932001f49Smrg { 19032001f49Smrg 1.0, 0.50 19132001f49Smrg }, 19232001f49Smrg { 19332001f49Smrg 0.0, 0.625 19432001f49Smrg }, 19532001f49Smrg { 19632001f49Smrg 1.0, 0.625 19732001f49Smrg }, 19832001f49Smrg { 19932001f49Smrg 0.0, 0.75 20032001f49Smrg }, 20132001f49Smrg { 20232001f49Smrg 1.0, 0.75 20332001f49Smrg }, 20432001f49Smrg { 20532001f49Smrg 0.0, 0.875 20632001f49Smrg }, 20732001f49Smrg { 20832001f49Smrg 1.0, 0.875 20932001f49Smrg }, 21032001f49Smrg { 21132001f49Smrg 0.0, 1.0 21232001f49Smrg }, 21332001f49Smrg { 21432001f49Smrg 1.0, 1.0 21532001f49Smrg } 21632001f49Smrg}; 21732001f49Smrgfloat scp[18][3] = { 21832001f49Smrg { 21932001f49Smrg 1.000000, 0.000000, 0.000000 22032001f49Smrg }, 22132001f49Smrg { 22232001f49Smrg 1.000000, 0.000000, 5.000000 22332001f49Smrg }, 22432001f49Smrg { 22532001f49Smrg 0.707107, 0.707107, 0.000000 22632001f49Smrg }, 22732001f49Smrg { 22832001f49Smrg 0.707107, 0.707107, 5.000000 22932001f49Smrg }, 23032001f49Smrg { 23132001f49Smrg 0.000000, 1.000000, 0.000000 23232001f49Smrg }, 23332001f49Smrg { 23432001f49Smrg 0.000000, 1.000000, 5.000000 23532001f49Smrg }, 23632001f49Smrg { 23732001f49Smrg -0.707107, 0.707107, 0.000000 23832001f49Smrg }, 23932001f49Smrg { 24032001f49Smrg -0.707107, 0.707107, 5.000000 24132001f49Smrg }, 24232001f49Smrg { 24332001f49Smrg -1.000000, 0.000000, 0.000000 24432001f49Smrg }, 24532001f49Smrg { 24632001f49Smrg -1.000000, 0.000000, 5.000000 24732001f49Smrg }, 24832001f49Smrg { 24932001f49Smrg -0.707107, -0.707107, 0.000000 25032001f49Smrg }, 25132001f49Smrg { 25232001f49Smrg -0.707107, -0.707107, 5.000000 25332001f49Smrg }, 25432001f49Smrg { 25532001f49Smrg 0.000000, -1.000000, 0.000000 25632001f49Smrg }, 25732001f49Smrg { 25832001f49Smrg 0.000000, -1.000000, 5.000000 25932001f49Smrg }, 26032001f49Smrg { 26132001f49Smrg 0.707107, -0.707107, 0.000000 26232001f49Smrg }, 26332001f49Smrg { 26432001f49Smrg 0.707107, -0.707107, 5.000000 26532001f49Smrg }, 26632001f49Smrg { 26732001f49Smrg 1.000000, 0.000000, 0.000000 26832001f49Smrg }, 26932001f49Smrg { 27032001f49Smrg 1.000000, 0.000000, 5.000000 27132001f49Smrg } 27232001f49Smrg}; 27332001f49Smrgfloat dcp[18][3] = { 27432001f49Smrg { 27532001f49Smrg 1.000000, 0.000000, 0.000000 27632001f49Smrg }, 27732001f49Smrg { 27832001f49Smrg 1.000000, 0.000000, 7.000000 27932001f49Smrg }, 28032001f49Smrg { 28132001f49Smrg 0.707107, 0.707107, 0.000000 28232001f49Smrg }, 28332001f49Smrg { 28432001f49Smrg 0.707107, 0.707107, 7.000000 28532001f49Smrg }, 28632001f49Smrg { 28732001f49Smrg 0.000000, 1.000000, 0.000000 28832001f49Smrg }, 28932001f49Smrg { 29032001f49Smrg 0.000000, 1.000000, 7.000000 29132001f49Smrg }, 29232001f49Smrg { 29332001f49Smrg -0.707107, 0.707107, 0.000000 29432001f49Smrg }, 29532001f49Smrg { 29632001f49Smrg -0.707107, 0.707107, 7.000000 29732001f49Smrg }, 29832001f49Smrg { 29932001f49Smrg -1.000000, 0.000000, 0.000000 30032001f49Smrg }, 30132001f49Smrg { 30232001f49Smrg -1.000000, 0.000000, 7.000000 30332001f49Smrg }, 30432001f49Smrg { 30532001f49Smrg -0.707107, -0.707107, 0.000000 30632001f49Smrg }, 30732001f49Smrg { 30832001f49Smrg -0.707107, -0.707107, 7.000000 30932001f49Smrg }, 31032001f49Smrg { 31132001f49Smrg 0.000000, -1.000000, 0.000000 31232001f49Smrg }, 31332001f49Smrg { 31432001f49Smrg 0.000000, -1.000000, 7.000000 31532001f49Smrg }, 31632001f49Smrg { 31732001f49Smrg 0.707107, -0.707107, 0.000000 31832001f49Smrg }, 31932001f49Smrg { 32032001f49Smrg 0.707107, -0.707107, 7.000000 32132001f49Smrg }, 32232001f49Smrg { 32332001f49Smrg 1.000000, 0.000000, 0.000000 32432001f49Smrg }, 32532001f49Smrg { 32632001f49Smrg 1.000000, 0.000000, 7.000000 32732001f49Smrg } 32832001f49Smrg}; 32932001f49Smrgfloat ep[7][9][3] = { 33032001f49Smrg { 33132001f49Smrg { 33232001f49Smrg 1.000000, 0.000000, 0.000000 33332001f49Smrg }, 33432001f49Smrg { 33532001f49Smrg 0.707107, 0.707107, 0.000000 33632001f49Smrg }, 33732001f49Smrg { 33832001f49Smrg 0.000000, 1.000000, 0.000000 33932001f49Smrg }, 34032001f49Smrg { 34132001f49Smrg -0.707107, 0.707107, 0.000000 34232001f49Smrg }, 34332001f49Smrg { 34432001f49Smrg -1.000000, 0.000000, 0.000000 34532001f49Smrg }, 34632001f49Smrg { 34732001f49Smrg -0.707107, -0.707107, 0.000000 34832001f49Smrg }, 34932001f49Smrg { 35032001f49Smrg 0.000000, -1.000000, 0.000000 35132001f49Smrg }, 35232001f49Smrg { 35332001f49Smrg 0.707107, -0.707107, 0.000000 35432001f49Smrg }, 35532001f49Smrg { 35632001f49Smrg 1.000000, 0.000000, 0.000000 35732001f49Smrg } 35832001f49Smrg }, 35932001f49Smrg { 36032001f49Smrg { 36132001f49Smrg 1.000000, 0.034074, 0.258819 36232001f49Smrg }, 36332001f49Smrg { 36432001f49Smrg 0.707107, 0.717087, 0.075806 36532001f49Smrg }, 36632001f49Smrg { 36732001f49Smrg 0.000000, 1.000000, 0.000000 36832001f49Smrg }, 36932001f49Smrg { 37032001f49Smrg -0.707107, 0.717087, 0.075806 37132001f49Smrg }, 37232001f49Smrg { 37332001f49Smrg -1.000000, 0.034074, 0.258819 37432001f49Smrg }, 37532001f49Smrg { 37632001f49Smrg -0.707107, -0.648939, 0.441832 37732001f49Smrg }, 37832001f49Smrg { 37932001f49Smrg 0.000000, -0.931852, 0.517638 38032001f49Smrg }, 38132001f49Smrg { 38232001f49Smrg 0.707107, -0.648939, 0.441832 38332001f49Smrg }, 38432001f49Smrg { 38532001f49Smrg 1.000000, 0.034074, 0.258819 38632001f49Smrg } 38732001f49Smrg }, 38832001f49Smrg { 38932001f49Smrg { 39032001f49Smrg 1.000000, 0.133975, 0.500000 39132001f49Smrg }, 39232001f49Smrg { 39332001f49Smrg 0.707107, 0.746347, 0.146447 39432001f49Smrg }, 39532001f49Smrg { 39632001f49Smrg 0.000000, 1.000000, 0.000000 39732001f49Smrg }, 39832001f49Smrg { 39932001f49Smrg -0.707107, 0.746347, 0.146447 40032001f49Smrg }, 40132001f49Smrg { 40232001f49Smrg -1.000000, 0.133975, 0.500000 40332001f49Smrg }, 40432001f49Smrg { 40532001f49Smrg -0.707107, -0.478398, 0.853553 40632001f49Smrg }, 40732001f49Smrg { 40832001f49Smrg 0.000000, -0.732051, 1.000000 40932001f49Smrg }, 41032001f49Smrg { 41132001f49Smrg 0.707107, -0.478398, 0.853553 41232001f49Smrg }, 41332001f49Smrg { 41432001f49Smrg 1.000000, 0.133975, 0.500000 41532001f49Smrg } 41632001f49Smrg }, 41732001f49Smrg { 41832001f49Smrg { 41932001f49Smrg 1.000000, 0.292893, 0.707107 42032001f49Smrg }, 42132001f49Smrg { 42232001f49Smrg 0.707107, 0.792893, 0.207107 42332001f49Smrg }, 42432001f49Smrg { 42532001f49Smrg 0.000000, 1.000000, 0.000000 42632001f49Smrg }, 42732001f49Smrg { 42832001f49Smrg -0.707107, 0.792893, 0.207107 42932001f49Smrg }, 43032001f49Smrg { 43132001f49Smrg -1.000000, 0.292893, 0.707107 43232001f49Smrg }, 43332001f49Smrg { 43432001f49Smrg -0.707107, -0.207107, 1.207107 43532001f49Smrg }, 43632001f49Smrg { 43732001f49Smrg 0.000000, -0.414214, 1.414214 43832001f49Smrg }, 43932001f49Smrg { 44032001f49Smrg 0.707107, -0.207107, 1.207107 44132001f49Smrg }, 44232001f49Smrg { 44332001f49Smrg 1.000000, 0.292893, 0.707107 44432001f49Smrg } 44532001f49Smrg }, 44632001f49Smrg { 44732001f49Smrg { 44832001f49Smrg 1.000000, 0.500000, 0.866025 44932001f49Smrg }, 45032001f49Smrg { 45132001f49Smrg 0.707107, 0.853553, 0.253653 45232001f49Smrg }, 45332001f49Smrg { 45432001f49Smrg 0.000000, 1.000000, 0.000000 45532001f49Smrg }, 45632001f49Smrg { 45732001f49Smrg -0.707107, 0.853553, 0.253653 45832001f49Smrg }, 45932001f49Smrg { 46032001f49Smrg -1.000000, 0.500000, 0.866025 46132001f49Smrg }, 46232001f49Smrg { 46332001f49Smrg -0.707107, 0.146447, 1.478398 46432001f49Smrg }, 46532001f49Smrg { 46632001f49Smrg 0.000000, 0.000000, 1.732051 46732001f49Smrg }, 46832001f49Smrg { 46932001f49Smrg 0.707107, 0.146447, 1.478398 47032001f49Smrg }, 47132001f49Smrg { 47232001f49Smrg 1.000000, 0.500000, 0.866025 47332001f49Smrg } 47432001f49Smrg }, 47532001f49Smrg { 47632001f49Smrg { 47732001f49Smrg 1.000000, 0.741181, 0.965926 47832001f49Smrg }, 47932001f49Smrg { 48032001f49Smrg 0.707107, 0.924194, 0.282913 48132001f49Smrg }, 48232001f49Smrg { 48332001f49Smrg 0.000000, 1.000000, 0.000000 48432001f49Smrg }, 48532001f49Smrg { 48632001f49Smrg -0.707107, 0.924194, 0.282913 48732001f49Smrg }, 48832001f49Smrg { 48932001f49Smrg -1.000000, 0.741181, 0.965926 49032001f49Smrg }, 49132001f49Smrg { 49232001f49Smrg -0.707107, 0.558168, 1.648939 49332001f49Smrg }, 49432001f49Smrg { 49532001f49Smrg 0.000000, 0.482362, 1.931852 49632001f49Smrg }, 49732001f49Smrg { 49832001f49Smrg 0.707107, 0.558168, 1.648939 49932001f49Smrg }, 50032001f49Smrg { 50132001f49Smrg 1.000000, 0.741181, 0.965926 50232001f49Smrg } 50332001f49Smrg }, 50432001f49Smrg { 50532001f49Smrg { 50632001f49Smrg 1.000000, 1.000000, 1.000000 50732001f49Smrg }, 50832001f49Smrg { 50932001f49Smrg 0.707107, 1.000000, 0.292893 51032001f49Smrg }, 51132001f49Smrg { 51232001f49Smrg 0.000000, 1.000000, 0.000000 51332001f49Smrg }, 51432001f49Smrg { 51532001f49Smrg -0.707107, 1.000000, 0.292893 51632001f49Smrg }, 51732001f49Smrg { 51832001f49Smrg -1.000000, 1.000000, 1.000000 51932001f49Smrg }, 52032001f49Smrg { 52132001f49Smrg -0.707107, 1.000000, 1.707107 52232001f49Smrg }, 52332001f49Smrg { 52432001f49Smrg 0.000000, 1.000000, 2.000000 52532001f49Smrg }, 52632001f49Smrg { 52732001f49Smrg 0.707107, 1.000000, 1.707107 52832001f49Smrg }, 52932001f49Smrg { 53032001f49Smrg 1.000000, 1.000000, 1.000000 53132001f49Smrg } 53232001f49Smrg } 53332001f49Smrg}; 53432001f49Smrgfloat en[7][9][3] = { 53532001f49Smrg { 53632001f49Smrg { 53732001f49Smrg 1.000000, 0.000000, 0.000000 53832001f49Smrg }, 53932001f49Smrg { 54032001f49Smrg 0.707107, 0.707107, 0.000000 54132001f49Smrg }, 54232001f49Smrg { 54332001f49Smrg 0.000000, 1.000000, 0.000000 54432001f49Smrg }, 54532001f49Smrg { 54632001f49Smrg -0.707107, 0.707107, 0.000000 54732001f49Smrg }, 54832001f49Smrg { 54932001f49Smrg -1.000000, 0.000000, 0.000000 55032001f49Smrg }, 55132001f49Smrg { 55232001f49Smrg -0.707107, -0.707107, 0.000000 55332001f49Smrg }, 55432001f49Smrg { 55532001f49Smrg 0.000000, -1.000000, 0.000000 55632001f49Smrg }, 55732001f49Smrg { 55832001f49Smrg 0.707107, -0.707107, 0.000000 55932001f49Smrg }, 56032001f49Smrg { 56132001f49Smrg 1.000000, 0.000000, 0.000000 56232001f49Smrg } 56332001f49Smrg }, 56432001f49Smrg { 56532001f49Smrg { 56632001f49Smrg 1.000000, 0.000000, 0.000000 56732001f49Smrg }, 56832001f49Smrg { 56932001f49Smrg 0.707107, 0.683013, -0.183013 57032001f49Smrg }, 57132001f49Smrg { 57232001f49Smrg 0.000000, 0.965926, -0.258819 57332001f49Smrg }, 57432001f49Smrg { 57532001f49Smrg -0.707107, 0.683013, -0.183013 57632001f49Smrg }, 57732001f49Smrg { 57832001f49Smrg -1.000000, 0.000000, 0.000000 57932001f49Smrg }, 58032001f49Smrg { 58132001f49Smrg -0.707107, -0.683013, 0.183013 58232001f49Smrg }, 58332001f49Smrg { 58432001f49Smrg 0.000000, -0.965926, 0.258819 58532001f49Smrg }, 58632001f49Smrg { 58732001f49Smrg 0.707107, -0.683013, 0.183013 58832001f49Smrg }, 58932001f49Smrg { 59032001f49Smrg 1.000000, 0.000000, 0.000000 59132001f49Smrg } 59232001f49Smrg }, 59332001f49Smrg { 59432001f49Smrg { 59532001f49Smrg 1.000000, 0.000000, 0.000000 59632001f49Smrg }, 59732001f49Smrg { 59832001f49Smrg 0.707107, 0.612372, -0.353553 59932001f49Smrg }, 60032001f49Smrg { 60132001f49Smrg 0.000000, 0.866025, -0.500000 60232001f49Smrg }, 60332001f49Smrg { 60432001f49Smrg -0.707107, 0.612372, -0.353553 60532001f49Smrg }, 60632001f49Smrg { 60732001f49Smrg -1.000000, 0.000000, 0.000000 60832001f49Smrg }, 60932001f49Smrg { 61032001f49Smrg -0.707107, -0.612372, 0.353553 61132001f49Smrg }, 61232001f49Smrg { 61332001f49Smrg 0.000000, -0.866025, 0.500000 61432001f49Smrg }, 61532001f49Smrg { 61632001f49Smrg 0.707107, -0.612372, 0.353553 61732001f49Smrg }, 61832001f49Smrg { 61932001f49Smrg 1.000000, 0.000000, 0.000000 62032001f49Smrg } 62132001f49Smrg }, 62232001f49Smrg { 62332001f49Smrg { 62432001f49Smrg 1.000000, 0.000000, 0.000000 62532001f49Smrg }, 62632001f49Smrg { 62732001f49Smrg /* These 3 lines added by BEP */ 62832001f49Smrg 0.707107, 0.500000, -0.500000 62932001f49Smrg }, 63032001f49Smrg { 63132001f49Smrg 0.000000, 0.707107, -0.707107 63232001f49Smrg }, 63332001f49Smrg { 63432001f49Smrg -0.707107, 0.500000, -0.500000 63532001f49Smrg }, 63632001f49Smrg { 63732001f49Smrg -1.000000, 0.000000, 0.000000 63832001f49Smrg }, 63932001f49Smrg { 64032001f49Smrg -0.707107, -0.500000, 0.500000 64132001f49Smrg }, 64232001f49Smrg { 64332001f49Smrg 0.000000, -0.707107, 0.707107 64432001f49Smrg }, 64532001f49Smrg { 64632001f49Smrg 0.707107, -0.500000, 0.500000 64732001f49Smrg }, 64832001f49Smrg { 64932001f49Smrg 1.000000, 0.000000, 0.000000 65032001f49Smrg } 65132001f49Smrg }, 65232001f49Smrg { 65332001f49Smrg { 65432001f49Smrg 1.000000, 0.000000, 0.000000 65532001f49Smrg }, 65632001f49Smrg { 65732001f49Smrg 0.707107, 0.353553, -0.612372 65832001f49Smrg }, 65932001f49Smrg { 66032001f49Smrg 0.000000, 0.500000, -0.866025 66132001f49Smrg }, 66232001f49Smrg { 66332001f49Smrg -0.707107, 0.353553, -0.612372 66432001f49Smrg }, 66532001f49Smrg { 66632001f49Smrg -1.000000, 0.000000, 0.000000 66732001f49Smrg }, 66832001f49Smrg { 66932001f49Smrg -0.707107, -0.353553, 0.612372 67032001f49Smrg }, 67132001f49Smrg { 67232001f49Smrg 0.000000, -0.500000, 0.866025 67332001f49Smrg }, 67432001f49Smrg { 67532001f49Smrg 0.707107, -0.353553, 0.612372 67632001f49Smrg }, 67732001f49Smrg { 67832001f49Smrg 1.000000, 0.000000, 0.000000 67932001f49Smrg } 68032001f49Smrg }, 68132001f49Smrg { 68232001f49Smrg { 68332001f49Smrg 1.000000, 0.000000, 0.000000 68432001f49Smrg }, 68532001f49Smrg { 68632001f49Smrg 0.707107, 0.183013, -0.683013 68732001f49Smrg }, 68832001f49Smrg { 68932001f49Smrg 0.000000, 0.258819, -0.965926 69032001f49Smrg }, 69132001f49Smrg { 69232001f49Smrg -0.707107, 0.183013, -0.683013 69332001f49Smrg }, 69432001f49Smrg { 69532001f49Smrg -1.000000, 0.000000, 0.000000 69632001f49Smrg }, 69732001f49Smrg { 69832001f49Smrg -0.707107, -0.183013, 0.683013 69932001f49Smrg }, 70032001f49Smrg { 70132001f49Smrg 0.000000, -0.258819, 0.965926 70232001f49Smrg }, 70332001f49Smrg { 70432001f49Smrg 0.707107, -0.183013, 0.683013 70532001f49Smrg }, 70632001f49Smrg { 70732001f49Smrg 1.000000, 0.000000, 0.000000 70832001f49Smrg } 70932001f49Smrg }, 71032001f49Smrg { 71132001f49Smrg { 71232001f49Smrg 1.000000, 0.000000, 0.000000 71332001f49Smrg }, 71432001f49Smrg { 71532001f49Smrg 0.707107, 0.000000, -0.707107 71632001f49Smrg }, 71732001f49Smrg { 71832001f49Smrg 0.000000, 0.000000, -1.000000 71932001f49Smrg }, 72032001f49Smrg { 72132001f49Smrg -0.707107, 0.000000, -0.707107 72232001f49Smrg }, 72332001f49Smrg { 72432001f49Smrg -1.000000, 0.000000, 0.000000 72532001f49Smrg }, 72632001f49Smrg { 72732001f49Smrg -0.707107, 0.000000, 0.707107 72832001f49Smrg }, 72932001f49Smrg { 73032001f49Smrg 0.000000, 0.000000, 1.000000 73132001f49Smrg }, 73232001f49Smrg { 73332001f49Smrg 0.707107, 0.000000, 0.707107 73432001f49Smrg }, 73532001f49Smrg { 73632001f49Smrg 1.000000, 0.000000, 0.000000 73732001f49Smrg } 73832001f49Smrg } 73932001f49Smrg}; 74032001f49Smrgfloat tep[7][9][2] = { 74132001f49Smrg { 74232001f49Smrg { 74332001f49Smrg 0, 0.0 74432001f49Smrg }, 74532001f49Smrg { 74632001f49Smrg 0.125, 0.0 74732001f49Smrg }, 74832001f49Smrg { 74932001f49Smrg 0.25, 0.0 75032001f49Smrg }, 75132001f49Smrg { 75232001f49Smrg 0.375, 0.0 75332001f49Smrg }, 75432001f49Smrg { 75532001f49Smrg 0.5, 0.0 75632001f49Smrg }, 75732001f49Smrg { 75832001f49Smrg 0.625, 0.0 75932001f49Smrg }, 76032001f49Smrg { 76132001f49Smrg 0.75, 0.0 76232001f49Smrg }, 76332001f49Smrg { 76432001f49Smrg 0.875, 0.0 76532001f49Smrg }, 76632001f49Smrg { 76732001f49Smrg 1.0, 0.0 76832001f49Smrg } 76932001f49Smrg }, 77032001f49Smrg { 77132001f49Smrg { 77232001f49Smrg 0, 0.16667 77332001f49Smrg }, 77432001f49Smrg { 77532001f49Smrg 0.125, 0.16667 77632001f49Smrg }, 77732001f49Smrg { 77832001f49Smrg 0.25, 0.16667 77932001f49Smrg }, 78032001f49Smrg { 78132001f49Smrg 0.375, 0.16667 78232001f49Smrg }, 78332001f49Smrg { 78432001f49Smrg 0.5, 0.16667 78532001f49Smrg }, 78632001f49Smrg { 78732001f49Smrg 0.625, 0.16667 78832001f49Smrg }, 78932001f49Smrg { 79032001f49Smrg 0.75, 0.16667 79132001f49Smrg }, 79232001f49Smrg { 79332001f49Smrg 0.875, 0.16667 79432001f49Smrg }, 79532001f49Smrg { 79632001f49Smrg 1.0, 0.16667 79732001f49Smrg } 79832001f49Smrg }, 79932001f49Smrg { 80032001f49Smrg { 80132001f49Smrg 0, 0.33333 80232001f49Smrg }, 80332001f49Smrg { 80432001f49Smrg 0.125, 0.33333 80532001f49Smrg }, 80632001f49Smrg { 80732001f49Smrg 0.25, 0.33333 80832001f49Smrg }, 80932001f49Smrg { 81032001f49Smrg 0.375, 0.33333 81132001f49Smrg }, 81232001f49Smrg { 81332001f49Smrg 0.5, 0.33333 81432001f49Smrg }, 81532001f49Smrg { 81632001f49Smrg 0.625, 0.33333 81732001f49Smrg }, 81832001f49Smrg { 81932001f49Smrg 0.75, 0.33333 82032001f49Smrg }, 82132001f49Smrg { 82232001f49Smrg 0.875, 0.33333 82332001f49Smrg }, 82432001f49Smrg { 82532001f49Smrg 1.0, 0.33333 82632001f49Smrg } 82732001f49Smrg }, 82832001f49Smrg { 82932001f49Smrg { 83032001f49Smrg 0, 0.5 83132001f49Smrg }, 83232001f49Smrg { 83332001f49Smrg 0.125, 0.5 83432001f49Smrg }, 83532001f49Smrg { 83632001f49Smrg 0.25, 0.5 83732001f49Smrg }, 83832001f49Smrg { 83932001f49Smrg 0.375, 0.5 84032001f49Smrg }, 84132001f49Smrg { 84232001f49Smrg 0.5, 0.5 84332001f49Smrg }, 84432001f49Smrg { 84532001f49Smrg 0.625, 0.5 84632001f49Smrg }, 84732001f49Smrg { 84832001f49Smrg 0.75, 0.5 84932001f49Smrg }, 85032001f49Smrg { 85132001f49Smrg 0.875, 0.5 85232001f49Smrg }, 85332001f49Smrg { 85432001f49Smrg 1.0, 0.5 85532001f49Smrg } 85632001f49Smrg }, 85732001f49Smrg { 85832001f49Smrg { 85932001f49Smrg 0, 0.6667 86032001f49Smrg }, 86132001f49Smrg { 86232001f49Smrg 0.125, 0.6667 86332001f49Smrg }, 86432001f49Smrg { 86532001f49Smrg 0.25, 0.6667 86632001f49Smrg }, 86732001f49Smrg { 86832001f49Smrg 0.375, 0.6667 86932001f49Smrg }, 87032001f49Smrg { 87132001f49Smrg 0.5, 0.6667 87232001f49Smrg }, 87332001f49Smrg { 87432001f49Smrg 0.625, 0.6667 87532001f49Smrg }, 87632001f49Smrg { 87732001f49Smrg 0.75, 0.6667 87832001f49Smrg }, 87932001f49Smrg { 88032001f49Smrg 0.875, 0.6667 88132001f49Smrg }, 88232001f49Smrg { 88332001f49Smrg 1.0, 0.6667 88432001f49Smrg } 88532001f49Smrg }, 88632001f49Smrg { 88732001f49Smrg { 88832001f49Smrg 0, 0.83333 88932001f49Smrg }, 89032001f49Smrg { 89132001f49Smrg 0.125, 0.83333 89232001f49Smrg }, 89332001f49Smrg { 89432001f49Smrg 0.25, 0.83333 89532001f49Smrg }, 89632001f49Smrg { 89732001f49Smrg 0.375, 0.83333 89832001f49Smrg }, 89932001f49Smrg { 90032001f49Smrg 0.5, 0.83333 90132001f49Smrg }, 90232001f49Smrg { 90332001f49Smrg 0.625, 0.83333 90432001f49Smrg }, 90532001f49Smrg { 90632001f49Smrg 0.75, 0.83333 90732001f49Smrg }, 90832001f49Smrg { 90932001f49Smrg 0.875, 0.83333 91032001f49Smrg }, 91132001f49Smrg { 91232001f49Smrg 1.0, 0.83333 91332001f49Smrg } 91432001f49Smrg }, 91532001f49Smrg { 91632001f49Smrg { 91732001f49Smrg 0, 1.0 91832001f49Smrg }, 91932001f49Smrg { 92032001f49Smrg 0.125, 1.0 92132001f49Smrg }, 92232001f49Smrg { 92332001f49Smrg 0.25, 1.0 92432001f49Smrg }, 92532001f49Smrg { 92632001f49Smrg 0.375, 1.0 92732001f49Smrg }, 92832001f49Smrg { 92932001f49Smrg 0.5, 1.0 93032001f49Smrg }, 93132001f49Smrg { 93232001f49Smrg 0.625, 1.0 93332001f49Smrg }, 93432001f49Smrg { 93532001f49Smrg 0.75, 1.0 93632001f49Smrg }, 93732001f49Smrg { 93832001f49Smrg 0.875, 1.0 93932001f49Smrg }, 94032001f49Smrg { 94132001f49Smrg 1.0, 1.0 94232001f49Smrg } 94332001f49Smrg } 94432001f49Smrg}; 94532001f49Smrg 94632001f49Smrg 94732001f49Smrgstatic void SetUpAntiAliasedGrayScale(void) 94832001f49Smrg{ 94932001f49Smrg float color; 95032001f49Smrg GLint i, j; 95132001f49Smrg 95232001f49Smrg for (i = 0; i < 16; i++) { 95332001f49Smrg color = (2 * i + 1) / 32.0; 95432001f49Smrg for (j = 0; j < 16; j++) { 95532001f49Smrg glutSetColor(i*16+j, color*j/15.0, color*j/15.0, color*j/15.0); 95632001f49Smrg } 95732001f49Smrg } 95832001f49Smrg} 95932001f49Smrg 96032001f49Smrgstatic void BendForward(void) 96132001f49Smrg{ 96232001f49Smrg 96332001f49Smrg glTranslatef(0.0, 1.0, 0.0); 96432001f49Smrg glRotatef(90.0, 1, 0, 0); 96532001f49Smrg glTranslatef(0.0, -1.0, 0.0); 96632001f49Smrg} 96732001f49Smrg 96832001f49Smrgstatic void BendLeft(void) 96932001f49Smrg{ 97032001f49Smrg 97132001f49Smrg glRotatef(-90.0, 0, 0, 1); 97232001f49Smrg glTranslatef(0.0, 1.0, 0.0); 97332001f49Smrg glRotatef(90.0, 1, 0, 0); 97432001f49Smrg glTranslatef(0.0, -1.0, 0.0); 97532001f49Smrg} 97632001f49Smrg 97732001f49Smrgstatic void BendRight(void) 97832001f49Smrg{ 97932001f49Smrg 98032001f49Smrg glRotatef(90.0, 0, 0, 1); 98132001f49Smrg glTranslatef(0.0, 1.0, 0.0); 98232001f49Smrg glRotatef(90.0, 1, 0, 0); 98332001f49Smrg glTranslatef(0.0, -1.0, 0.0); 98432001f49Smrg} 98532001f49Smrg 98632001f49Smrgstatic void BuildSingleCylinder(void) 98732001f49Smrg{ 98832001f49Smrg 98932001f49Smrg glNewList(singleCylinder, GL_COMPILE); 99032001f49Smrg 99132001f49Smrg glBegin(GL_TRIANGLE_STRIP); 99232001f49Smrg glNormal3fv(scp[0]); glTexCoord2fv(tscp[0]); glVertex3fv(scp[0]); 99332001f49Smrg glNormal3fv(scp[0]); glTexCoord2fv(tscp[1]); glVertex3fv(scp[1]); 99432001f49Smrg glNormal3fv(scp[2]); glTexCoord2fv(tscp[2]); glVertex3fv(scp[2]); 99532001f49Smrg glNormal3fv(scp[2]); glTexCoord2fv(tscp[3]); glVertex3fv(scp[3]); 99632001f49Smrg glNormal3fv(scp[4]); glTexCoord2fv(tscp[4]); glVertex3fv(scp[4]); 99732001f49Smrg glNormal3fv(scp[4]); glTexCoord2fv(tscp[5]); glVertex3fv(scp[5]); 99832001f49Smrg glNormal3fv(scp[6]); glTexCoord2fv(tscp[6]); glVertex3fv(scp[6]); 99932001f49Smrg glNormal3fv(scp[6]); glTexCoord2fv(tscp[7]); glVertex3fv(scp[7]); 100032001f49Smrg glNormal3fv(scp[8]); glTexCoord2fv(tscp[8]); glVertex3fv(scp[8]); 100132001f49Smrg glNormal3fv(scp[8]); glTexCoord2fv(tscp[9]); glVertex3fv(scp[9]); 100232001f49Smrg glNormal3fv(scp[10]); glTexCoord2fv(tscp[10]); glVertex3fv(scp[10]); 100332001f49Smrg glNormal3fv(scp[10]); glTexCoord2fv(tscp[11]); glVertex3fv(scp[11]); 100432001f49Smrg glNormal3fv(scp[12]); glTexCoord2fv(tscp[12]); glVertex3fv(scp[12]); 100532001f49Smrg glNormal3fv(scp[12]); glTexCoord2fv(tscp[13]); glVertex3fv(scp[13]); 100632001f49Smrg glNormal3fv(scp[14]); glTexCoord2fv(tscp[14]); glVertex3fv(scp[14]); 100732001f49Smrg glNormal3fv(scp[14]); glTexCoord2fv(tscp[15]); glVertex3fv(scp[15]); 100832001f49Smrg glNormal3fv(scp[16]); glTexCoord2fv(tscp[16]); glVertex3fv(scp[16]); 100932001f49Smrg glNormal3fv(scp[16]); glTexCoord2fv(tscp[17]); glVertex3fv(scp[17]); 101032001f49Smrg glEnd(); 101132001f49Smrg 101232001f49Smrg glEndList(); 101332001f49Smrg} 101432001f49Smrg 101532001f49Smrgstatic void BuildDoubleCylinder(void) 101632001f49Smrg{ 101732001f49Smrg 101832001f49Smrg glNewList(doubleCylinder, GL_COMPILE); 101932001f49Smrg 102032001f49Smrg glBegin(GL_TRIANGLE_STRIP); 102132001f49Smrg glNormal3fv(dcp[0]); glTexCoord2fv(tscp[0]); glVertex3fv(dcp[0]); 102232001f49Smrg glNormal3fv(dcp[0]); glTexCoord2fv(tscp[1]); glVertex3fv(dcp[1]); 102332001f49Smrg glNormal3fv(dcp[2]); glTexCoord2fv(tscp[2]); glVertex3fv(dcp[2]); 102432001f49Smrg glNormal3fv(dcp[2]); glTexCoord2fv(tscp[3]); glVertex3fv(dcp[3]); 102532001f49Smrg glNormal3fv(dcp[4]); glTexCoord2fv(tscp[4]); glVertex3fv(dcp[4]); 102632001f49Smrg glNormal3fv(dcp[4]); glTexCoord2fv(tscp[5]); glVertex3fv(dcp[5]); 102732001f49Smrg glNormal3fv(dcp[6]); glTexCoord2fv(tscp[6]); glVertex3fv(dcp[6]); 102832001f49Smrg glNormal3fv(dcp[6]); glTexCoord2fv(tscp[7]); glVertex3fv(dcp[7]); 102932001f49Smrg glNormal3fv(dcp[8]); glTexCoord2fv(tscp[8]); glVertex3fv(dcp[8]); 103032001f49Smrg glNormal3fv(dcp[8]); glTexCoord2fv(tscp[9]); glVertex3fv(dcp[9]); 103132001f49Smrg glNormal3fv(dcp[10]); glTexCoord2fv(tscp[10]); glVertex3fv(dcp[10]); 103232001f49Smrg glNormal3fv(dcp[10]); glTexCoord2fv(tscp[11]); glVertex3fv(dcp[11]); 103332001f49Smrg glNormal3fv(dcp[12]); glTexCoord2fv(tscp[12]); glVertex3fv(dcp[12]); 103432001f49Smrg glNormal3fv(dcp[12]); glTexCoord2fv(tscp[13]); glVertex3fv(dcp[13]); 103532001f49Smrg glNormal3fv(dcp[14]); glTexCoord2fv(tscp[14]); glVertex3fv(dcp[14]); 103632001f49Smrg glNormal3fv(dcp[14]); glTexCoord2fv(tscp[15]); glVertex3fv(dcp[15]); 103732001f49Smrg glNormal3fv(dcp[16]); glTexCoord2fv(tscp[16]); glVertex3fv(dcp[16]); 103832001f49Smrg glNormal3fv(dcp[16]); glTexCoord2fv(tscp[17]); glVertex3fv(dcp[17]); 103932001f49Smrg glEnd(); 104032001f49Smrg 104132001f49Smrg glEndList(); 104232001f49Smrg} 104332001f49Smrg 104432001f49Smrgstatic void BuildElbow(void) 104532001f49Smrg{ 104632001f49Smrg 104732001f49Smrg glNewList(elbow, GL_COMPILE); 104832001f49Smrg 104932001f49Smrg glBegin(GL_TRIANGLE_STRIP); 105032001f49Smrg glNormal3fv(en[0][0]); glTexCoord2fv(tep[0][0]); glVertex3fv(ep[0][0]); 105132001f49Smrg glNormal3fv(en[1][0]); glTexCoord2fv(tep[1][0]); glVertex3fv(ep[1][0]); 105232001f49Smrg glNormal3fv(en[0][1]); glTexCoord2fv(tep[0][1]); glVertex3fv(ep[0][1]); 105332001f49Smrg glNormal3fv(en[1][1]); glTexCoord2fv(tep[1][1]); glVertex3fv(ep[1][1]); 105432001f49Smrg glNormal3fv(en[0][2]); glTexCoord2fv(tep[0][2]); glVertex3fv(ep[0][2]); 105532001f49Smrg glNormal3fv(en[1][2]); glTexCoord2fv(tep[1][2]); glVertex3fv(ep[1][2]); 105632001f49Smrg glNormal3fv(en[0][3]); glTexCoord2fv(tep[0][3]); glVertex3fv(ep[0][3]); 105732001f49Smrg glNormal3fv(en[1][3]); glTexCoord2fv(tep[1][3]); glVertex3fv(ep[1][3]); 105832001f49Smrg glNormal3fv(en[0][4]); glTexCoord2fv(tep[0][4]); glVertex3fv(ep[0][4]); 105932001f49Smrg glNormal3fv(en[1][4]); glTexCoord2fv(tep[1][4]); glVertex3fv(ep[1][4]); 106032001f49Smrg glNormal3fv(en[0][5]); glTexCoord2fv(tep[0][5]); glVertex3fv(ep[0][5]); 106132001f49Smrg glNormal3fv(en[1][5]); glTexCoord2fv(tep[1][5]); glVertex3fv(ep[1][5]); 106232001f49Smrg glNormal3fv(en[0][6]); glTexCoord2fv(tep[0][6]); glVertex3fv(ep[0][6]); 106332001f49Smrg glNormal3fv(en[1][6]); glTexCoord2fv(tep[1][6]); glVertex3fv(ep[1][6]); 106432001f49Smrg glNormal3fv(en[0][7]); glTexCoord2fv(tep[0][7]); glVertex3fv(ep[0][7]); 106532001f49Smrg glNormal3fv(en[1][7]); glTexCoord2fv(tep[1][7]); glVertex3fv(ep[1][7]); 106632001f49Smrg glNormal3fv(en[0][8]); glTexCoord2fv(tep[0][8]); glVertex3fv(ep[0][8]); 106732001f49Smrg glNormal3fv(en[1][8]); glTexCoord2fv(tep[1][8]); glVertex3fv(ep[1][8]); 106832001f49Smrg glEnd(); 106932001f49Smrg glBegin(GL_TRIANGLE_STRIP); 107032001f49Smrg glNormal3fv(en[1][0]); glTexCoord2fv(tep[1][0]); glVertex3fv(ep[1][0]); 107132001f49Smrg glNormal3fv(en[2][0]); glTexCoord2fv(tep[2][0]); glVertex3fv(ep[2][0]); 107232001f49Smrg glNormal3fv(en[1][1]); glTexCoord2fv(tep[1][1]); glVertex3fv(ep[1][1]); 107332001f49Smrg glNormal3fv(en[2][1]); glTexCoord2fv(tep[2][1]); glVertex3fv(ep[2][1]); 107432001f49Smrg glNormal3fv(en[1][2]); glTexCoord2fv(tep[1][2]); glVertex3fv(ep[1][2]); 107532001f49Smrg glNormal3fv(en[2][2]); glTexCoord2fv(tep[2][2]); glVertex3fv(ep[2][2]); 107632001f49Smrg glNormal3fv(en[1][3]); glTexCoord2fv(tep[1][3]); glVertex3fv(ep[1][3]); 107732001f49Smrg glNormal3fv(en[2][3]); glTexCoord2fv(tep[2][3]); glVertex3fv(ep[2][3]); 107832001f49Smrg glNormal3fv(en[1][4]); glTexCoord2fv(tep[1][4]); glVertex3fv(ep[1][4]); 107932001f49Smrg glNormal3fv(en[2][4]); glTexCoord2fv(tep[2][4]); glVertex3fv(ep[2][4]); 108032001f49Smrg glNormal3fv(en[1][5]); glTexCoord2fv(tep[1][5]); glVertex3fv(ep[1][5]); 108132001f49Smrg glNormal3fv(en[2][5]); glTexCoord2fv(tep[2][5]); glVertex3fv(ep[2][5]); 108232001f49Smrg glNormal3fv(en[1][6]); glTexCoord2fv(tep[1][6]); glVertex3fv(ep[1][6]); 108332001f49Smrg glNormal3fv(en[2][6]); glTexCoord2fv(tep[2][6]); glVertex3fv(ep[2][6]); 108432001f49Smrg glNormal3fv(en[1][7]); glTexCoord2fv(tep[1][7]); glVertex3fv(ep[1][7]); 108532001f49Smrg glNormal3fv(en[2][7]); glTexCoord2fv(tep[2][7]); glVertex3fv(ep[2][7]); 108632001f49Smrg glNormal3fv(en[1][8]); glTexCoord2fv(tep[1][8]); glVertex3fv(ep[1][8]); 108732001f49Smrg glNormal3fv(en[2][8]); glTexCoord2fv(tep[2][8]); glVertex3fv(ep[2][8]); 108832001f49Smrg glEnd(); 108932001f49Smrg glBegin(GL_TRIANGLE_STRIP); 109032001f49Smrg glNormal3fv(en[2][0]); glTexCoord2fv(tep[2][0]); glVertex3fv(ep[2][0]); 109132001f49Smrg glNormal3fv(en[3][0]); glTexCoord2fv(tep[3][0]); glVertex3fv(ep[3][0]); 109232001f49Smrg glNormal3fv(en[2][1]); glTexCoord2fv(tep[2][1]); glVertex3fv(ep[2][1]); 109332001f49Smrg glNormal3fv(en[3][1]); glTexCoord2fv(tep[3][1]); glVertex3fv(ep[3][1]); 109432001f49Smrg glNormal3fv(en[2][2]); glTexCoord2fv(tep[2][2]); glVertex3fv(ep[2][2]); 109532001f49Smrg glNormal3fv(en[3][2]); glTexCoord2fv(tep[3][2]); glVertex3fv(ep[3][2]); 109632001f49Smrg glNormal3fv(en[2][3]); glTexCoord2fv(tep[2][3]); glVertex3fv(ep[2][3]); 109732001f49Smrg glNormal3fv(en[3][3]); glTexCoord2fv(tep[3][3]); glVertex3fv(ep[3][3]); 109832001f49Smrg glNormal3fv(en[2][4]); glTexCoord2fv(tep[2][4]); glVertex3fv(ep[2][4]); 109932001f49Smrg glNormal3fv(en[3][4]); glTexCoord2fv(tep[3][4]); glVertex3fv(ep[3][4]); 110032001f49Smrg glNormal3fv(en[2][5]); glTexCoord2fv(tep[2][5]); glVertex3fv(ep[2][5]); 110132001f49Smrg glNormal3fv(en[3][5]); glTexCoord2fv(tep[3][5]); glVertex3fv(ep[3][5]); 110232001f49Smrg glNormal3fv(en[2][6]); glTexCoord2fv(tep[2][6]); glVertex3fv(ep[2][6]); 110332001f49Smrg glNormal3fv(en[3][6]); glTexCoord2fv(tep[3][6]); glVertex3fv(ep[3][6]); 110432001f49Smrg glNormal3fv(en[2][7]); glTexCoord2fv(tep[2][7]); glVertex3fv(ep[2][7]); 110532001f49Smrg glNormal3fv(en[3][7]); glTexCoord2fv(tep[3][7]); glVertex3fv(ep[3][7]); 110632001f49Smrg glNormal3fv(en[2][8]); glTexCoord2fv(tep[2][8]); glVertex3fv(ep[2][8]); 110732001f49Smrg glNormal3fv(en[3][8]); glTexCoord2fv(tep[3][8]); glVertex3fv(ep[3][8]); 110832001f49Smrg glEnd(); 110932001f49Smrg glBegin(GL_TRIANGLE_STRIP); 111032001f49Smrg glNormal3fv(en[3][0]); glTexCoord2fv(tep[3][0]); glVertex3fv(ep[3][0]); 111132001f49Smrg glNormal3fv(en[4][0]); glTexCoord2fv(tep[4][0]); glVertex3fv(ep[4][0]); 111232001f49Smrg glNormal3fv(en[3][1]); glTexCoord2fv(tep[3][1]); glVertex3fv(ep[3][1]); 111332001f49Smrg glNormal3fv(en[4][1]); glTexCoord2fv(tep[4][1]); glVertex3fv(ep[4][1]); 111432001f49Smrg glNormal3fv(en[3][2]); glTexCoord2fv(tep[3][2]); glVertex3fv(ep[3][2]); 111532001f49Smrg glNormal3fv(en[4][2]); glTexCoord2fv(tep[4][2]); glVertex3fv(ep[4][2]); 111632001f49Smrg glNormal3fv(en[3][3]); glTexCoord2fv(tep[3][3]); glVertex3fv(ep[3][3]); 111732001f49Smrg glNormal3fv(en[4][3]); glTexCoord2fv(tep[4][3]); glVertex3fv(ep[4][3]); 111832001f49Smrg glNormal3fv(en[3][4]); glTexCoord2fv(tep[3][4]); glVertex3fv(ep[3][4]); 111932001f49Smrg glNormal3fv(en[4][4]); glTexCoord2fv(tep[4][4]); glVertex3fv(ep[4][4]); 112032001f49Smrg glNormal3fv(en[3][5]); glTexCoord2fv(tep[3][5]); glVertex3fv(ep[3][5]); 112132001f49Smrg glNormal3fv(en[4][5]); glTexCoord2fv(tep[4][5]); glVertex3fv(ep[4][5]); 112232001f49Smrg glNormal3fv(en[3][6]); glTexCoord2fv(tep[3][6]); glVertex3fv(ep[3][6]); 112332001f49Smrg glNormal3fv(en[4][6]); glTexCoord2fv(tep[4][6]); glVertex3fv(ep[4][6]); 112432001f49Smrg glNormal3fv(en[3][7]); glTexCoord2fv(tep[3][7]); glVertex3fv(ep[3][7]); 112532001f49Smrg glNormal3fv(en[4][7]); glTexCoord2fv(tep[4][7]); glVertex3fv(ep[4][7]); 112632001f49Smrg glNormal3fv(en[3][8]); glTexCoord2fv(tep[3][8]); glVertex3fv(ep[3][8]); 112732001f49Smrg glNormal3fv(en[4][8]); glTexCoord2fv(tep[4][8]); glVertex3fv(ep[4][8]); 112832001f49Smrg glEnd(); 112932001f49Smrg glBegin(GL_TRIANGLE_STRIP); 113032001f49Smrg glNormal3fv(en[4][0]); glTexCoord2fv(tep[4][0]); glVertex3fv(ep[4][0]); 113132001f49Smrg glNormal3fv(en[5][0]); glTexCoord2fv(tep[5][0]); glVertex3fv(ep[5][0]); 113232001f49Smrg glNormal3fv(en[4][1]); glTexCoord2fv(tep[4][1]); glVertex3fv(ep[4][1]); 113332001f49Smrg glNormal3fv(en[5][1]); glTexCoord2fv(tep[5][1]); glVertex3fv(ep[5][1]); 113432001f49Smrg glNormal3fv(en[4][2]); glTexCoord2fv(tep[4][2]); glVertex3fv(ep[4][2]); 113532001f49Smrg glNormal3fv(en[5][2]); glTexCoord2fv(tep[5][2]); glVertex3fv(ep[5][2]); 113632001f49Smrg glNormal3fv(en[4][3]); glTexCoord2fv(tep[4][3]); glVertex3fv(ep[4][3]); 113732001f49Smrg glNormal3fv(en[5][3]); glTexCoord2fv(tep[5][3]); glVertex3fv(ep[5][3]); 113832001f49Smrg glNormal3fv(en[4][4]); glTexCoord2fv(tep[4][4]); glVertex3fv(ep[4][4]); 113932001f49Smrg glNormal3fv(en[5][4]); glTexCoord2fv(tep[5][4]); glVertex3fv(ep[5][4]); 114032001f49Smrg glNormal3fv(en[4][5]); glTexCoord2fv(tep[4][5]); glVertex3fv(ep[4][5]); 114132001f49Smrg glNormal3fv(en[5][5]); glTexCoord2fv(tep[5][5]); glVertex3fv(ep[5][5]); 114232001f49Smrg glNormal3fv(en[4][6]); glTexCoord2fv(tep[4][6]); glVertex3fv(ep[4][6]); 114332001f49Smrg glNormal3fv(en[5][6]); glTexCoord2fv(tep[5][6]); glVertex3fv(ep[5][6]); 114432001f49Smrg glNormal3fv(en[4][7]); glTexCoord2fv(tep[4][7]); glVertex3fv(ep[4][7]); 114532001f49Smrg glNormal3fv(en[5][7]); glTexCoord2fv(tep[5][7]); glVertex3fv(ep[5][7]); 114632001f49Smrg glNormal3fv(en[4][8]); glTexCoord2fv(tep[4][8]); glVertex3fv(ep[4][8]); 114732001f49Smrg glNormal3fv(en[5][8]); glTexCoord2fv(tep[5][8]); glVertex3fv(ep[5][8]); 114832001f49Smrg glEnd(); 114932001f49Smrg glBegin(GL_TRIANGLE_STRIP); 115032001f49Smrg glNormal3fv(en[5][0]); glTexCoord2fv(tep[5][0]); glVertex3fv(ep[5][0]); 115132001f49Smrg glNormal3fv(en[6][0]); glTexCoord2fv(tep[6][0]); glVertex3fv(ep[6][0]); 115232001f49Smrg glNormal3fv(en[5][1]); glTexCoord2fv(tep[5][1]); glVertex3fv(ep[5][1]); 115332001f49Smrg glNormal3fv(en[6][1]); glTexCoord2fv(tep[6][1]); glVertex3fv(ep[6][1]); 115432001f49Smrg glNormal3fv(en[5][2]); glTexCoord2fv(tep[5][2]); glVertex3fv(ep[5][2]); 115532001f49Smrg glNormal3fv(en[6][2]); glTexCoord2fv(tep[6][2]); glVertex3fv(ep[6][2]); 115632001f49Smrg glNormal3fv(en[5][3]); glTexCoord2fv(tep[5][3]); glVertex3fv(ep[5][3]); 115732001f49Smrg glNormal3fv(en[6][3]); glTexCoord2fv(tep[6][3]); glVertex3fv(ep[6][3]); 115832001f49Smrg glNormal3fv(en[5][4]); glTexCoord2fv(tep[5][4]); glVertex3fv(ep[5][4]); 115932001f49Smrg glNormal3fv(en[6][4]); glTexCoord2fv(tep[6][4]); glVertex3fv(ep[6][4]); 116032001f49Smrg glNormal3fv(en[5][5]); glTexCoord2fv(tep[5][5]); glVertex3fv(ep[5][5]); 116132001f49Smrg glNormal3fv(en[6][5]); glTexCoord2fv(tep[6][5]); glVertex3fv(ep[6][5]); 116232001f49Smrg glNormal3fv(en[5][6]); glTexCoord2fv(tep[5][6]); glVertex3fv(ep[5][6]); 116332001f49Smrg glNormal3fv(en[6][6]); glTexCoord2fv(tep[6][6]); glVertex3fv(ep[6][6]); 116432001f49Smrg glNormal3fv(en[5][7]); glTexCoord2fv(tep[5][7]); glVertex3fv(ep[5][7]); 116532001f49Smrg glNormal3fv(en[6][7]); glTexCoord2fv(tep[6][7]); glVertex3fv(ep[6][7]); 116632001f49Smrg glNormal3fv(en[5][8]); glTexCoord2fv(tep[5][8]); glVertex3fv(ep[5][8]); 116732001f49Smrg glNormal3fv(en[6][8]); glTexCoord2fv(tep[6][8]); glVertex3fv(ep[6][8]); 116832001f49Smrg glEnd(); 116932001f49Smrg 117032001f49Smrg glEndList(); 117132001f49Smrg} 117232001f49Smrg 117332001f49Smrgstatic void BuildLogo(void) 117432001f49Smrg{ 117532001f49Smrg 117632001f49Smrg glNewList(logo, GL_COMPILE); 117732001f49Smrg 117832001f49Smrg glTranslatef(5.5, -3.5, 4.5); 117932001f49Smrg glTranslatef(0.0, 0.0, -7.0); 118032001f49Smrg glCallList(doubleCylinder); 118132001f49Smrg BendForward(); 118232001f49Smrg glCallList(elbow); 118332001f49Smrg glTranslatef(0.0, 0.0, -7.0); 118432001f49Smrg glCallList(doubleCylinder); 118532001f49Smrg BendForward(); 118632001f49Smrg glCallList(elbow); 118732001f49Smrg glTranslatef(0.0, 0.0, -5.0); 118832001f49Smrg glCallList(singleCylinder); 118932001f49Smrg BendRight(); 119032001f49Smrg glCallList(elbow); 119132001f49Smrg glTranslatef(0.0, 0.0, -7.0); 119232001f49Smrg glCallList(doubleCylinder); 119332001f49Smrg BendForward(); 119432001f49Smrg glCallList(elbow); 119532001f49Smrg glTranslatef(0.0, 0.0, -7.0); 119632001f49Smrg glCallList(doubleCylinder); 119732001f49Smrg BendForward(); 119832001f49Smrg glCallList(elbow); 119932001f49Smrg glTranslatef(0.0, 0.0, -5.0); 120032001f49Smrg glCallList(singleCylinder); 120132001f49Smrg BendLeft(); 120232001f49Smrg glCallList(elbow); 120332001f49Smrg glTranslatef(0.0, 0.0, -7.0); 120432001f49Smrg glCallList(doubleCylinder); 120532001f49Smrg BendForward(); 120632001f49Smrg glCallList(elbow); 120732001f49Smrg glTranslatef(0.0, 0.0, -7.0); 120832001f49Smrg glCallList(doubleCylinder); 120932001f49Smrg BendForward(); 121032001f49Smrg glCallList(elbow); 121132001f49Smrg glTranslatef(0.0, 0.0, -5.0); 121232001f49Smrg glCallList(singleCylinder); 121332001f49Smrg BendRight(); 121432001f49Smrg glCallList(elbow); 121532001f49Smrg glTranslatef(0.0, 0.0, -7.0); 121632001f49Smrg glCallList(doubleCylinder); 121732001f49Smrg BendForward(); 121832001f49Smrg glCallList(elbow); 121932001f49Smrg glTranslatef(0.0, 0.0, -7.0); 122032001f49Smrg glCallList(doubleCylinder); 122132001f49Smrg BendForward(); 122232001f49Smrg glCallList(elbow); 122332001f49Smrg glTranslatef(0.0, 0.0, -5.0); 122432001f49Smrg glCallList(singleCylinder); 122532001f49Smrg BendLeft(); 122632001f49Smrg glCallList(elbow); 122732001f49Smrg glTranslatef(0.0, 0.0, -7.0); 122832001f49Smrg glCallList(doubleCylinder); 122932001f49Smrg BendForward(); 123032001f49Smrg glCallList(elbow); 123132001f49Smrg glTranslatef(0.0, 0.0, -7.0); 123232001f49Smrg glCallList(doubleCylinder); 123332001f49Smrg BendForward(); 123432001f49Smrg glCallList(elbow); 123532001f49Smrg glTranslatef(0.0, 0.0, -5.0); 123632001f49Smrg glCallList(singleCylinder); 123732001f49Smrg BendRight(); 123832001f49Smrg glCallList(elbow); 123932001f49Smrg glTranslatef(0.0, 0.0, -7.0); 124032001f49Smrg glCallList(doubleCylinder); 124132001f49Smrg BendForward(); 124232001f49Smrg glCallList(elbow); 124332001f49Smrg glTranslatef(0.0, 0.0, -7.0); 124432001f49Smrg glCallList(doubleCylinder); 124532001f49Smrg BendForward(); 124632001f49Smrg glCallList(elbow); 124732001f49Smrg glTranslatef(0.0, 0.0, -5.0); 124832001f49Smrg glCallList(singleCylinder); 124932001f49Smrg BendLeft(); 125032001f49Smrg glCallList(elbow); 125132001f49Smrg 125232001f49Smrg glEndList(); 125332001f49Smrg} 125432001f49Smrg 125532001f49Smrgstatic void BuildLists(void) 125632001f49Smrg{ 125732001f49Smrg 125832001f49Smrg singleCylinder = glGenLists(1); 125932001f49Smrg doubleCylinder = glGenLists(1); 126032001f49Smrg elbow = glGenLists(1); 126132001f49Smrg logo = glGenLists(1); 126232001f49Smrg 126332001f49Smrg BuildSingleCylinder(); 126432001f49Smrg BuildDoubleCylinder(); 126532001f49Smrg BuildElbow(); 126632001f49Smrg BuildLogo(); 126732001f49Smrg} 126832001f49Smrg 126932001f49Smrgstatic void Init(void) 127032001f49Smrg{ 127132001f49Smrg static float ambient[] = {0.1, 0.1, 0.1, 1.0}; 127232001f49Smrg static float diffuse[] = {0.5, 1.0, 1.0, 1.0}; 127332001f49Smrg static float position[] = {90.0, 90.0, 150.0, 0.0}; 127432001f49Smrg static float front_mat_shininess[] = {30.0}; 127532001f49Smrg static float front_mat_specular[] = {0.2, 0.2, 0.2, 1.0}; 127632001f49Smrg static float front_mat_diffuse[] = {0.5, 0.28, 0.38, 1.0}; 127732001f49Smrg static float back_mat_shininess[] = {50.0}; 127832001f49Smrg static float back_mat_specular[] = {0.5, 0.5, 0.2, 1.0}; 127932001f49Smrg static float back_mat_diffuse[] = {1.0, 1.0, 0.2, 1.0}; 128032001f49Smrg static float lmodel_ambient[] = {1.0, 1.0, 1.0, 1.0}; 128132001f49Smrg static float lmodel_twoside[] = {GL_TRUE}; 128232001f49Smrg 128332001f49Smrg glClearColor(0.0, 0.0, 0.0, 0.0); 128432001f49Smrg 128532001f49Smrg glFrontFace(GL_CW); 128632001f49Smrg 128732001f49Smrg glEnable(GL_DEPTH_TEST); 128832001f49Smrg 128932001f49Smrg glLightModelfv(GL_LIGHT_MODEL_AMBIENT, lmodel_ambient); 129032001f49Smrg glLightModelfv(GL_LIGHT_MODEL_TWO_SIDE, lmodel_twoside); 129132001f49Smrg glLightfv(GL_LIGHT0, GL_AMBIENT, ambient); 129232001f49Smrg glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuse); 129332001f49Smrg glLightfv(GL_LIGHT0, GL_POSITION, position); 129432001f49Smrg glEnable(GL_LIGHTING); 129532001f49Smrg glEnable(GL_LIGHT0); 129632001f49Smrg 129732001f49Smrg glMaterialfv(GL_FRONT, GL_SHININESS, front_mat_shininess); 129832001f49Smrg glMaterialfv(GL_FRONT, GL_SPECULAR, front_mat_specular); 129932001f49Smrg glMaterialfv(GL_FRONT, GL_DIFFUSE, front_mat_diffuse); 130032001f49Smrg glMaterialfv(GL_BACK, GL_SHININESS, back_mat_shininess); 130132001f49Smrg glMaterialfv(GL_BACK, GL_SPECULAR, back_mat_specular); 130232001f49Smrg glMaterialfv(GL_BACK, GL_DIFFUSE, back_mat_diffuse); 130332001f49Smrg 130432001f49Smrg glEnable(GL_CLIP_PLANE0); 130532001f49Smrg 130632001f49Smrg if (rgb) { 130732001f49Smrg glTexEnvfv(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, decal); 130832001f49Smrg glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, repeat); 130932001f49Smrg glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, repeat); 131032001f49Smrg glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, nearest); 131132001f49Smrg glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, nearest); 131232001f49Smrg glTexImage2D(GL_TEXTURE_2D, 0, 3, CHECKIMAGEWIDTH, CHECKIMAGEHEIGHT, 0, 131332001f49Smrg GL_RGB, GL_UNSIGNED_BYTE, (GLvoid *)checkImage); 131432001f49Smrg glEnable(GL_TEXTURE_2D); 131532001f49Smrg 131632001f49Smrg glCullFace(GL_BACK); 131732001f49Smrg glEnable(GL_CULL_FACE); 131832001f49Smrg } else { 131932001f49Smrg SetGreyRamp(); 132032001f49Smrg /* commented out by BrianP because it's the wrong way to handle a 4-bit visual! 132132001f49Smrg if (doubleBuffer) { 132232001f49Smrg colorIndexes[1] = 10; 132332001f49Smrg colorIndexes[2] = 15; 132432001f49Smrg } 132532001f49Smrg */ 132632001f49Smrg glMaterialiv(GL_FRONT_AND_BACK, GL_COLOR_INDEXES, colorIndexes); 132732001f49Smrg } 132832001f49Smrg 132932001f49Smrg BuildLists(); 133032001f49Smrg 133132001f49Smrg dithering = GL_TRUE; 133232001f49Smrg shade = GL_TRUE; 133332001f49Smrg doStipple = GL_FALSE; 133432001f49Smrg polyMode = GL_BACK; 133532001f49Smrg} 133632001f49Smrg 133732001f49Smrgstatic void Reshape(int width, int height) 133832001f49Smrg{ 133932001f49Smrg glViewport(0, 0, (GLint)width, (GLint)height); 134032001f49Smrg 134132001f49Smrg glMatrixMode(GL_PROJECTION); 134232001f49Smrg glLoadIdentity(); 134332001f49Smrg gluPerspective(90, 1.0, 1.0, 200.0); 134432001f49Smrg glMatrixMode(GL_MODELVIEW); 134532001f49Smrg} 134632001f49Smrg 134732001f49Smrgstatic void Key2(int key, int x, int y) 134832001f49Smrg{ 134932001f49Smrg (void) x; 135032001f49Smrg (void) y; 135132001f49Smrg switch (key) { 135232001f49Smrg case GLUT_KEY_LEFT: 135332001f49Smrg yRotation += 0.5; 135432001f49Smrg break; 135532001f49Smrg case GLUT_KEY_RIGHT: 135632001f49Smrg yRotation -= 0.5; 135732001f49Smrg break; 135832001f49Smrg case GLUT_KEY_UP: 135932001f49Smrg plane[3] += 2.0; 136032001f49Smrg break; 136132001f49Smrg case GLUT_KEY_DOWN: 136232001f49Smrg plane[3] -= 2.0; 136332001f49Smrg break; 136432001f49Smrg default: 136532001f49Smrg return; 136632001f49Smrg } 136732001f49Smrg 136832001f49Smrg glutPostRedisplay(); 136932001f49Smrg} 137032001f49Smrg 137132001f49Smrgstatic void Key(unsigned char key, int x, int y) 137232001f49Smrg{ 137332001f49Smrg (void) x; 137432001f49Smrg (void) y; 137532001f49Smrg switch (key) { 137632001f49Smrg case 27: 137732001f49Smrg exit(1); 137832001f49Smrg 137932001f49Smrg case 'Z': 138032001f49Smrg zTranslation -= 1.0; 138132001f49Smrg break; 138232001f49Smrg case 'z': 138332001f49Smrg zTranslation += 1.0; 138432001f49Smrg break; 138532001f49Smrg 138632001f49Smrg case '1': 138732001f49Smrg glPolygonMode(polyMode, GL_POINT); 138832001f49Smrg break; 138932001f49Smrg case '2': 139032001f49Smrg glPolygonMode(polyMode, GL_LINE); 139132001f49Smrg break; 139232001f49Smrg case '3': 139332001f49Smrg glPolygonMode(polyMode, GL_FILL); 139432001f49Smrg break; 139532001f49Smrg case 'p': 139632001f49Smrg switch (polyMode) { 139732001f49Smrg case GL_BACK: 139832001f49Smrg polyMode = GL_FRONT; 139932001f49Smrg printf("PolygonMode GL_FRONT\n"); 140032001f49Smrg break; 140132001f49Smrg case GL_FRONT: 140232001f49Smrg polyMode = GL_FRONT_AND_BACK; 140332001f49Smrg printf("PolygonMode GL_FRONT_AND_BACK\n"); 140432001f49Smrg break; 140532001f49Smrg case GL_FRONT_AND_BACK: 140632001f49Smrg polyMode = GL_BACK; 140732001f49Smrg printf("PolygonMode GL_BACK\n"); 140832001f49Smrg break; 140932001f49Smrg default: 141032001f49Smrg break; 141132001f49Smrg } 141232001f49Smrg break; 141332001f49Smrg 141432001f49Smrg case '4': 141532001f49Smrg glHint(GL_POLYGON_SMOOTH_HINT, GL_NICEST); 141632001f49Smrg break; 141732001f49Smrg case '5': 141832001f49Smrg glEnable(GL_POLYGON_SMOOTH); 141932001f49Smrg if (rgb) { 142032001f49Smrg glBlendFunc(GL_SRC_ALPHA, GL_ONE); 142132001f49Smrg glEnable(GL_BLEND); 142232001f49Smrg glDisable(GL_DEPTH_TEST); 142332001f49Smrg } else { 142432001f49Smrg SetUpAntiAliasedGrayScale(); 142532001f49Smrg } 142632001f49Smrg break; 142732001f49Smrg case '6': 142832001f49Smrg glDisable(GL_POLYGON_SMOOTH); 142932001f49Smrg if (rgb) { 143032001f49Smrg glBlendFunc(GL_ONE, GL_ZERO); 143132001f49Smrg glDisable(GL_BLEND); 143232001f49Smrg glEnable(GL_DEPTH_TEST); 143332001f49Smrg } else { 143432001f49Smrg SetGreyRamp(); 143532001f49Smrg } 143632001f49Smrg break; 143732001f49Smrg 143832001f49Smrg case '8': 143932001f49Smrg dithering = !dithering; 144032001f49Smrg (dithering) ? glEnable(GL_DITHER) : glDisable(GL_DITHER); 144132001f49Smrg break; 144232001f49Smrg 144332001f49Smrg case '9': 144432001f49Smrg doStipple = !doStipple; 144532001f49Smrg if (doStipple) { 144632001f49Smrg glPolygonStipple(stipple); 144732001f49Smrg glEnable(GL_POLYGON_STIPPLE); 144832001f49Smrg } else { 144932001f49Smrg glDisable(GL_POLYGON_STIPPLE); 145032001f49Smrg } 145132001f49Smrg break; 145232001f49Smrg 145332001f49Smrg case '0': 145432001f49Smrg shade = !shade; 145532001f49Smrg (shade) ? glShadeModel(GL_SMOOTH) : glShadeModel(GL_FLAT); 145632001f49Smrg break; 145732001f49Smrg 145832001f49Smrg case 'q': 145932001f49Smrg glDisable(GL_CULL_FACE); 146032001f49Smrg printf("disable culling\n"); 146132001f49Smrg break; 146232001f49Smrg case 'w': 146332001f49Smrg glEnable(GL_CULL_FACE); 146432001f49Smrg glCullFace(GL_FRONT); 146532001f49Smrg printf("enable front face culling\n"); 146632001f49Smrg break; 146732001f49Smrg case 'e': 146832001f49Smrg glEnable(GL_CULL_FACE); 146932001f49Smrg glCullFace(GL_BACK); 147032001f49Smrg printf("enable back face culling\n"); 147132001f49Smrg break; 147232001f49Smrg 147332001f49Smrg case 'r': 147432001f49Smrg glFrontFace(GL_CW); 147532001f49Smrg break; 147632001f49Smrg case 't': 147732001f49Smrg glFrontFace(GL_CCW); 147832001f49Smrg break; 147932001f49Smrg case 'y': 148032001f49Smrg glPixelStorei(GL_UNPACK_ALIGNMENT, 1); 148132001f49Smrg glPixelStorei(GL_UNPACK_LSB_FIRST, 0); 148232001f49Smrg glPolygonStipple(stipple); 148332001f49Smrg break; 148432001f49Smrg case 'u': 148532001f49Smrg glPixelStorei(GL_UNPACK_ALIGNMENT, 1); 148632001f49Smrg glPixelStorei(GL_UNPACK_LSB_FIRST, 1); 148732001f49Smrg glPolygonStipple(stipple); 148832001f49Smrg break; 148932001f49Smrg 149032001f49Smrg case 'a': 149132001f49Smrg glEnable(GL_TEXTURE_2D); 149232001f49Smrg glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, repeat); 149332001f49Smrg glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, repeat); 149432001f49Smrg glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, nearest); 149532001f49Smrg glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, nearest); 149632001f49Smrg glTexImage2D(GL_TEXTURE_2D, 0, 4, BRICKIMAGEWIDTH, 149732001f49Smrg BRICKIMAGEHEIGHT, 0, GL_RGBA, GL_UNSIGNED_BYTE, 149832001f49Smrg (GLvoid *)brickImage); 149932001f49Smrg break; 150032001f49Smrg case 's': 150132001f49Smrg glEnable(GL_TEXTURE_2D); 150232001f49Smrg glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, repeat); 150332001f49Smrg glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, repeat); 150432001f49Smrg glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, nearest); 150532001f49Smrg glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, nearest); 150632001f49Smrg glTexImage2D(GL_TEXTURE_2D, 0, 3, CHECKIMAGEWIDTH, 150732001f49Smrg CHECKIMAGEHEIGHT, 0, GL_RGB, GL_UNSIGNED_BYTE, 150832001f49Smrg (GLvoid *)checkImage); 150932001f49Smrg break; 151032001f49Smrg case 'd': 151132001f49Smrg glDisable(GL_TEXTURE_2D); 151232001f49Smrg break; 151332001f49Smrg 151432001f49Smrg case 'f': 151532001f49Smrg glTexEnvfv(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, decal); 151632001f49Smrg break; 151732001f49Smrg case 'g': 151832001f49Smrg glTexEnvfv(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, modulate); 151932001f49Smrg break; 152032001f49Smrg 152132001f49Smrg case 'n': 152232001f49Smrg /* added by BrianP */ 152332001f49Smrg noDraw = !noDraw; 152432001f49Smrg if (noDraw) { 152532001f49Smrg glDrawBuffer( GL_NONE ); 152632001f49Smrg } 152732001f49Smrg else { 152832001f49Smrg if (doubleBuffer) { 152932001f49Smrg glDrawBuffer( GL_BACK ); 153032001f49Smrg } 153132001f49Smrg else { 153232001f49Smrg glDrawBuffer( GL_FRONT ); 153332001f49Smrg } 153432001f49Smrg } 153532001f49Smrg break; 153632001f49Smrg 153732001f49Smrg case 'l': 153832001f49Smrg /* Line Smooth - added by BrianP */ 153932001f49Smrg LineSmooth = !LineSmooth; 154032001f49Smrg if (LineSmooth) { 154132001f49Smrg glEnable(GL_LINE_SMOOTH); 154232001f49Smrg glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 154332001f49Smrg glEnable(GL_BLEND); 154432001f49Smrg } 154532001f49Smrg else { 154632001f49Smrg glDisable(GL_LINE_SMOOTH); 154732001f49Smrg glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 154832001f49Smrg glDisable(GL_BLEND); 154932001f49Smrg } 155032001f49Smrg break; 155132001f49Smrg default: 155232001f49Smrg return; 155332001f49Smrg } 155432001f49Smrg 155532001f49Smrg glutPostRedisplay(); 155632001f49Smrg} 155732001f49Smrg 155832001f49Smrgstatic void Draw(void) 155932001f49Smrg{ 156032001f49Smrg 156132001f49Smrg glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); 156232001f49Smrg 156332001f49Smrg glPushMatrix(); 156432001f49Smrg 156532001f49Smrg glTranslatef(0, 0, zTranslation); 156632001f49Smrg glRotatef(30.0, 1, 0, 0); 156732001f49Smrg glRotatef(yRotation, 0, 1, 0); 156832001f49Smrg glClipPlane(GL_CLIP_PLANE0, plane); 156932001f49Smrg glCallList(logo); 157032001f49Smrg 157132001f49Smrg glPopMatrix(); 157232001f49Smrg 157332001f49Smrg glFlush(); 157432001f49Smrg 157532001f49Smrg if (doubleBuffer) { 157632001f49Smrg glutSwapBuffers(); 157732001f49Smrg } 157832001f49Smrg} 157932001f49Smrg 158032001f49Smrgstatic GLenum Args(int argc, char **argv) 158132001f49Smrg{ 158232001f49Smrg GLint i; 158332001f49Smrg 158432001f49Smrg rgb = GL_TRUE; 158532001f49Smrg doubleBuffer = GL_FALSE; 158632001f49Smrg 158732001f49Smrg for (i = 1; i < argc; i++) { 158832001f49Smrg if (strcmp(argv[i], "-ci") == 0) { 158932001f49Smrg rgb = GL_FALSE; 159032001f49Smrg } else if (strcmp(argv[i], "-rgb") == 0) { 159132001f49Smrg rgb = GL_TRUE; 159232001f49Smrg } else if (strcmp(argv[i], "-sb") == 0) { 159332001f49Smrg doubleBuffer = GL_FALSE; 159432001f49Smrg } else if (strcmp(argv[i], "-db") == 0) { 159532001f49Smrg doubleBuffer = GL_TRUE; 159632001f49Smrg } else { 159732001f49Smrg printf("%s (Bad option).\n", argv[i]); 159832001f49Smrg return GL_FALSE; 159932001f49Smrg } 160032001f49Smrg } 160132001f49Smrg return GL_TRUE; 160232001f49Smrg} 160332001f49Smrg 160432001f49Smrgint main(int argc, char **argv) 160532001f49Smrg{ 160632001f49Smrg unsigned int type; 160732001f49Smrg 160832001f49Smrg glutInit(&argc, argv); 160932001f49Smrg 161032001f49Smrg if (Args(argc, argv) == GL_FALSE) { 161132001f49Smrg exit(1); 161232001f49Smrg } 161332001f49Smrg 161432001f49Smrg glutInitWindowPosition(0, 0); glutInitWindowSize( 300, 300); 161532001f49Smrg 161632001f49Smrg type = GLUT_DEPTH; 161732001f49Smrg type |= (rgb) ? GLUT_RGB : GLUT_INDEX; 161832001f49Smrg type |= (doubleBuffer) ? GLUT_DOUBLE : GLUT_SINGLE; 161932001f49Smrg glutInitDisplayMode(type); 162032001f49Smrg 162132001f49Smrg if (glutCreateWindow("Logo Test") == GL_FALSE) { 162232001f49Smrg exit(1); 162332001f49Smrg } 162432001f49Smrg 162532001f49Smrg InitMap(); 162632001f49Smrg 162732001f49Smrg Init(); 162832001f49Smrg 162932001f49Smrg glutReshapeFunc(Reshape); 163032001f49Smrg glutKeyboardFunc(Key); 163132001f49Smrg glutSpecialFunc(Key2); 163232001f49Smrg glutDisplayFunc(Draw); 163332001f49Smrg glutMainLoop(); 163432001f49Smrg return 0; 163532001f49Smrg} 1636