draw_logo_shadow.c
上传用户:xk288cn
上传日期:2007-05-28
资源大小:4876k
文件大小:14k
源码类别:

GIS编程

开发平台:

Visual C++

  1. /*
  2.  * (c) Copyright 1993, Silicon Graphics, Inc.
  3.  * ALL RIGHTS RESERVED 
  4.  * Permission to use, copy, modify, and distribute this software for 
  5.  * any purpose and without fee is hereby granted, provided that the above
  6.  * copyright notice appear in all copies and that both the copyright notice
  7.  * and this permission notice appear in supporting documentation, and that 
  8.  * the name of Silicon Graphics, Inc. not be used in advertising
  9.  * or publicity pertaining to distribution of the software without specific,
  10.  * written prior permission. 
  11.  *
  12.  * THE MATERIAL EMBODIED ON THIS SOFTWARE IS PROVIDED TO YOU "AS-IS"
  13.  * AND WITHOUT WARRANTY OF ANY KIND, EXPRESS, IMPLIED OR OTHERWISE,
  14.  * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY OR
  15.  * FITNESS FOR A PARTICULAR PURPOSE.  IN NO EVENT SHALL SILICON
  16.  * GRAPHICS, INC.  BE LIABLE TO YOU OR ANYONE ELSE FOR ANY DIRECT,
  17.  * SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY
  18.  * KIND, OR ANY DAMAGES WHATSOEVER, INCLUDING WITHOUT LIMITATION,
  19.  * LOSS OF PROFIT, LOSS OF USE, SAVINGS OR REVENUE, OR THE CLAIMS OF
  20.  * THIRD PARTIES, WHETHER OR NOT SILICON GRAPHICS, INC.  HAS BEEN
  21.  * ADVISED OF THE POSSIBILITY OF SUCH LOSS, HOWEVER CAUSED AND ON
  22.  * ANY THEORY OF LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE
  23.  * POSSESSION, USE OR PERFORMANCE OF THIS SOFTWARE.
  24.  * 
  25.  * US Government Users Restricted Rights 
  26.  * Use, duplication, or disclosure by the Government is subject to
  27.  * restrictions set forth in FAR 52.227.19(c)(2) or subparagraph
  28.  * (c)(1)(ii) of the Rights in Technical Data and Computer Software
  29.  * clause at DFARS 252.227-7013 and/or in similar or successor
  30.  * clauses in the FAR or the DOD or NASA FAR Supplement.
  31.  * Unpublished-- rights reserved under the copyright laws of the
  32.  * United States.  Contractor/manufacturer is Silicon Graphics,
  33.  * Inc., 2011 N.  Shoreline Blvd., Mountain View, CA 94039-7311.
  34.  *
  35.  * OpenGL(TM) is a trademark of Silicon Graphics, Inc.
  36.  */
  37. #include <GL/glut.h>
  38. #include "objects.h"
  39. static float scp[18][3] = {
  40.   {1.000000, 0.000000, 0.000000}, {1.000000, 0.000000, 5.000000},
  41.   {0.707107, 0.707107, 0.000000}, {0.707107, 0.707107, 5.000000},
  42.   {0.000000, 1.000000, 0.000000}, {0.000000, 1.000000, 5.000000},
  43.   {-0.707107, 0.707107, 0.000000}, {-0.707107, 0.707107, 5.000000},
  44.   {-1.000000, 0.000000, 0.000000}, {-1.000000, 0.000000, 5.000000},
  45.   {-0.707107, -0.707107, 0.000000}, {-0.707107, -0.707107, 5.000000},
  46.   {0.000000, -1.000000, 0.000000}, {0.000000, -1.000000, 5.000000},
  47.   {0.707107, -0.707107, 0.000000}, {0.707107, -0.707107, 5.000000},
  48.   {1.000000, 0.000000, 0.000000}, {1.000000, 0.000000, 5.000000},
  49. };
  50. static float dcp[18][3] = {
  51.   {1.000000, 0.000000, 0.000000}, {1.000000, 0.000000, 7.000000},
  52.   {0.707107, 0.707107, 0.000000}, {0.707107, 0.707107, 7.000000},
  53.   {0.000000, 1.000000, 0.000000}, {0.000000, 1.000000, 7.000000},
  54.   {-0.707107, 0.707107, 0.000000}, {-0.707107, 0.707107, 7.000000},
  55.   {-1.000000, 0.000000, 0.000000}, {-1.000000, 0.000000, 7.000000},
  56.   {-0.707107, -0.707107, 0.000000}, {-0.707107, -0.707107, 7.000000},
  57.   {0.000000, -1.000000, 0.000000}, {0.000000, -1.000000, 7.000000},
  58.   {0.707107, -0.707107, 0.000000}, {0.707107, -0.707107, 7.000000},
  59.   {1.000000, 0.000000, 0.000000}, {1.000000, 0.000000, 7.000000},
  60. };
  61. static float ep[9][9][3] = {
  62.   {
  63.     {1.000000, 0.000000, 0.000000},
  64.     {0.707107, 0.707107, 0.000000},
  65.     {0.000000, 1.000000, 0.000000},
  66.     {-0.707107, 0.707107, 0.000000},
  67.     {-1.000000, 0.000000, 0.000000},
  68.     {-0.707107, -0.707107, 0.000000},
  69.     {0.000000, -1.000000, 0.000000},
  70.     {0.707107, -0.707107, 0.000000},
  71.     {1.000000, 0.000000, 0.000000},
  72.   },
  73.   
  74.   {
  75.     {1.000000, 0.019215, 0.195090},
  76.     {0.707107, 0.712735, 0.057141},
  77.     {0.000000, 1.000000, 0.000000},
  78.     {-0.707107, 0.712735, 0.057141},
  79.     {-1.000000, 0.019215, 0.195090},
  80.     {-0.707107, -0.674305, 0.333040},
  81.     {0.000000, -0.961571, 0.390181},
  82.     {0.707107, -0.674305, 0.333040},
  83.     {1.000000, 0.019215, 0.195090},
  84.   },
  85.   
  86.   {
  87.     {1.000000, 0.076120, 0.382683},
  88.     {0.707107, 0.729402, 0.112085},
  89.     {0.000000, 1.000000, 0.000000},
  90.     {-0.707107, 0.729402, 0.112085},
  91.     {-1.000000, 0.076120, 0.382683},
  92.     {-0.707107, -0.577161, 0.653282},
  93.     {0.000000, -0.847759, 0.765367},
  94.     {0.707107, -0.577161, 0.653282},
  95.     {1.000000, 0.076120, 0.382683},
  96.   },
  97.   
  98.   {
  99.     {1.000000, 0.168530, 0.555570},
  100.     {0.707107, 0.756468, 0.162723},
  101.     {0.000000, 1.000000, 0.000000},
  102.     {-0.707107, 0.756468, 0.162723},
  103.     {-1.000000, 0.168530, 0.555570},
  104.     {-0.707107, -0.419407, 0.948418},
  105.     {0.000000, -0.662939, 1.111140},
  106.     {0.707107, -0.419407, 0.948418},
  107.     {1.000000, 0.168530, 0.555570},
  108.   },
  109.   
  110.   {
  111.     {1.000000, 0.292893, 0.707107},
  112.     {0.707107, 0.792893, 0.207107},
  113.     {0.000000, 1.000000, 0.000000},
  114.     {-0.707107, 0.792893, 0.207107},
  115.     {-1.000000, 0.292893, 0.707107},
  116.     {-0.707107, -0.207107, 1.207107},
  117.     {0.000000, -0.414214, 1.414214},
  118.     {0.707107, -0.207107, 1.207107},
  119.     {1.000000, 0.292893, 0.707107},
  120.   },
  121.   
  122.   {
  123.     {1.000000, 0.444430, 0.831470},
  124.     {0.707107, 0.837277, 0.243532},
  125.     {0.000000, 1.000000, 0.000000},
  126.     {-0.707107, 0.837277, 0.243532},
  127.     {-1.000000, 0.444430, 0.831470},
  128.     {-0.707107, 0.051582, 1.419407},
  129.     {0.000000, -0.111140, 1.662939},
  130.     {0.707107, 0.051582, 1.419407},
  131.     {1.000000, 0.444430, 0.831470},
  132.   },
  133.   
  134.   {
  135.     {1.000000, 0.617317, 0.923880},
  136.     {0.707107, 0.887915, 0.270598},
  137.     {0.000000, 1.000000, 0.000000},
  138.     {-0.707107, 0.887915, 0.270598},
  139.     {-1.000000, 0.617317, 0.923880},
  140.     {-0.707107, 0.346719, 1.577161},
  141.     {0.000000, 0.234633, 1.847759},
  142.     {0.707107, 0.346719, 1.577161},
  143.     {1.000000, 0.617317, 0.923880},
  144.   },
  145.   
  146.   {
  147.     {1.000000, 0.804910, 0.980785},
  148.     {0.707107, 0.942859, 0.287265},
  149.     {0.000000, 1.000000, 0.000000},
  150.     {-0.707107, 0.942859, 0.287265},
  151.     {-1.000000, 0.804910, 0.980785},
  152.     {-0.707107, 0.666960, 1.674305},
  153.     {0.000000, 0.609819, 1.961571},
  154.     {0.707107, 0.666960, 1.674305},
  155.     {1.000000, 0.804910, 0.980785},
  156.   },
  157.   
  158.   {
  159.     {1.000000, 1.000000, 1.000000},
  160.     {0.707107, 1.000000, 0.292893},
  161.     {0.000000, 1.000000, 0.000000},
  162.     {-0.707107, 1.000000, 0.292893},
  163.     {-1.000000, 1.000000, 1.000000},
  164.     {-0.707107, 1.000000, 1.707107},
  165.     {0.000000, 1.000000, 2.000000},
  166.     {0.707107, 1.000000, 1.707107},
  167.     {1.000000, 1.000000, 1.000000},
  168.   },
  169.   
  170. };
  171. static void draw_single_cylinder(void) {
  172.   
  173.   glBegin(GL_TRIANGLE_STRIP);
  174.   glVertex3fv(scp[0]);
  175.   glVertex3fv(scp[1]);
  176.   glVertex3fv(scp[2]);
  177.   glVertex3fv(scp[3]);
  178.   glVertex3fv(scp[4]);
  179.   glVertex3fv(scp[5]);
  180.   glVertex3fv(scp[6]);
  181.   glVertex3fv(scp[7]);
  182.   glVertex3fv(scp[8]);
  183.   glVertex3fv(scp[9]);
  184.   glVertex3fv(scp[10]);
  185.   glVertex3fv(scp[11]);
  186.   glVertex3fv(scp[12]);
  187.   glVertex3fv(scp[13]);
  188.   glVertex3fv(scp[14]);
  189.   glVertex3fv(scp[15]);
  190.   glVertex3fv(scp[16]);
  191.   glVertex3fv(scp[17]);
  192.   glEnd();
  193. }
  194. static void draw_double_cylinder(void) {
  195.   
  196.   glBegin(GL_TRIANGLE_STRIP);
  197.   glVertex3fv(dcp[0]);
  198.   glVertex3fv(dcp[1]);
  199.   glVertex3fv(dcp[2]);
  200.   glVertex3fv(dcp[3]);
  201.   glVertex3fv(dcp[4]);
  202.   glVertex3fv(dcp[5]);
  203.   glVertex3fv(dcp[6]);
  204.   glVertex3fv(dcp[7]);
  205.   glVertex3fv(dcp[8]);
  206.   glVertex3fv(dcp[9]);
  207.   glVertex3fv(dcp[10]);
  208.   glVertex3fv(dcp[11]);
  209.   glVertex3fv(dcp[12]);
  210.   glVertex3fv(dcp[13]);
  211.   glVertex3fv(dcp[14]);
  212.   glVertex3fv(dcp[15]);
  213.   glVertex3fv(dcp[16]);
  214.   glVertex3fv(dcp[17]);
  215.   glEnd();
  216. }
  217. static void  draw_elbow(void) {
  218.   
  219.   glBegin(GL_TRIANGLE_STRIP);
  220.   glVertex3fv(ep[0][0]);
  221.   glVertex3fv(ep[1][0]);
  222.   glVertex3fv(ep[0][1]);
  223.   glVertex3fv(ep[1][1]);
  224.   glVertex3fv(ep[0][2]);
  225.   glVertex3fv(ep[1][2]);
  226.   glVertex3fv(ep[0][3]);
  227.   glVertex3fv(ep[1][3]);
  228.   glVertex3fv(ep[0][4]);
  229.   glVertex3fv(ep[1][4]);
  230.   glVertex3fv(ep[0][5]);
  231.   glVertex3fv(ep[1][5]);
  232.   glVertex3fv(ep[0][6]);
  233.   glVertex3fv(ep[1][6]);
  234.   glVertex3fv(ep[0][7]);
  235.   glVertex3fv(ep[1][7]);
  236.   glVertex3fv(ep[0][8]);
  237.   glVertex3fv(ep[1][8]);
  238.   glEnd();
  239.   glBegin(GL_TRIANGLE_STRIP);
  240.   glVertex3fv(ep[1][0]);
  241.   glVertex3fv(ep[2][0]);
  242.   glVertex3fv(ep[1][1]);
  243.   glVertex3fv(ep[2][1]);
  244.   glVertex3fv(ep[1][2]);
  245.   glVertex3fv(ep[2][2]);
  246.   glVertex3fv(ep[1][3]);
  247.   glVertex3fv(ep[2][3]);
  248.   glVertex3fv(ep[1][4]);
  249.   glVertex3fv(ep[2][4]);
  250.   glVertex3fv(ep[1][5]);
  251.   glVertex3fv(ep[2][5]);
  252.   glVertex3fv(ep[1][6]);
  253.   glVertex3fv(ep[2][6]);
  254.   glVertex3fv(ep[1][7]);
  255.   glVertex3fv(ep[2][7]);
  256.   glVertex3fv(ep[1][8]);
  257.   glVertex3fv(ep[2][8]);
  258.   glEnd();
  259.   glBegin(GL_TRIANGLE_STRIP);
  260.   glVertex3fv(ep[2][0]);
  261.   glVertex3fv(ep[3][0]);
  262.   glVertex3fv(ep[2][1]);
  263.   glVertex3fv(ep[3][1]);
  264.   glVertex3fv(ep[2][2]);
  265.   glVertex3fv(ep[3][2]);
  266.   glVertex3fv(ep[2][3]);
  267.   glVertex3fv(ep[3][3]);
  268.   glVertex3fv(ep[2][4]);
  269.   glVertex3fv(ep[3][4]);
  270.   glVertex3fv(ep[2][5]);
  271.   glVertex3fv(ep[3][5]);
  272.   glVertex3fv(ep[2][6]);
  273.   glVertex3fv(ep[3][6]);
  274.   glVertex3fv(ep[2][7]);
  275.   glVertex3fv(ep[3][7]);
  276.   glVertex3fv(ep[2][8]);
  277.   glVertex3fv(ep[3][8]);
  278.   glEnd();
  279.   glBegin(GL_TRIANGLE_STRIP);
  280.   glVertex3fv(ep[3][0]);
  281.   glVertex3fv(ep[4][0]);
  282.   glVertex3fv(ep[3][1]);
  283.   glVertex3fv(ep[4][1]);
  284.   glVertex3fv(ep[3][2]);
  285.   glVertex3fv(ep[4][2]);
  286.   glVertex3fv(ep[3][3]);
  287.   glVertex3fv(ep[4][3]);
  288.   glVertex3fv(ep[3][4]);
  289.   glVertex3fv(ep[4][4]);
  290.   glVertex3fv(ep[3][5]);
  291.   glVertex3fv(ep[4][5]);
  292.   glVertex3fv(ep[3][6]);
  293.   glVertex3fv(ep[4][6]);
  294.   glVertex3fv(ep[3][7]);
  295.   glVertex3fv(ep[4][7]);
  296.   glVertex3fv(ep[3][8]);
  297.   glVertex3fv(ep[4][8]);
  298.   glEnd();
  299.   glBegin(GL_TRIANGLE_STRIP);
  300.   glVertex3fv(ep[4][0]);
  301.   glVertex3fv(ep[5][0]);
  302.   glVertex3fv(ep[4][1]);
  303.   glVertex3fv(ep[5][1]);
  304.   glVertex3fv(ep[4][2]);
  305.   glVertex3fv(ep[5][2]);
  306.   glVertex3fv(ep[4][3]);
  307.   glVertex3fv(ep[5][3]);
  308.   glVertex3fv(ep[4][4]);
  309.   glVertex3fv(ep[5][4]);
  310.   glVertex3fv(ep[4][5]);
  311.   glVertex3fv(ep[5][5]);
  312.   glVertex3fv(ep[4][6]);
  313.   glVertex3fv(ep[5][6]);
  314.   glVertex3fv(ep[4][7]);
  315.   glVertex3fv(ep[5][7]);
  316.   glVertex3fv(ep[4][8]);
  317.   glVertex3fv(ep[5][8]);
  318.   glEnd();
  319.   glBegin(GL_TRIANGLE_STRIP);
  320.   glVertex3fv(ep[5][0]);
  321.   glVertex3fv(ep[6][0]);
  322.   glVertex3fv(ep[5][1]);
  323.   glVertex3fv(ep[6][1]);
  324.   glVertex3fv(ep[5][2]);
  325.   glVertex3fv(ep[6][2]);
  326.   glVertex3fv(ep[5][3]);
  327.   glVertex3fv(ep[6][3]);
  328.   glVertex3fv(ep[5][4]);
  329.   glVertex3fv(ep[6][4]);
  330.   glVertex3fv(ep[5][5]);
  331.   glVertex3fv(ep[6][5]);
  332.   glVertex3fv(ep[5][6]);
  333.   glVertex3fv(ep[6][6]);
  334.   glVertex3fv(ep[5][7]);
  335.   glVertex3fv(ep[6][7]);
  336.   glVertex3fv(ep[5][8]);
  337.   glVertex3fv(ep[6][8]);
  338.   glEnd();
  339.   glBegin(GL_TRIANGLE_STRIP);
  340.   glVertex3fv(ep[6][0]);
  341.   glVertex3fv(ep[7][0]);
  342.   glVertex3fv(ep[6][1]);
  343.   glVertex3fv(ep[7][1]);
  344.   glVertex3fv(ep[6][2]);
  345.   glVertex3fv(ep[7][2]);
  346.   glVertex3fv(ep[6][3]);
  347.   glVertex3fv(ep[7][3]);
  348.   glVertex3fv(ep[6][4]);
  349.   glVertex3fv(ep[7][4]);
  350.   glVertex3fv(ep[6][5]);
  351.   glVertex3fv(ep[7][5]);
  352.   glVertex3fv(ep[6][6]);
  353.   glVertex3fv(ep[7][6]);
  354.   glVertex3fv(ep[6][7]);
  355.   glVertex3fv(ep[7][7]);
  356.   glVertex3fv(ep[6][8]);
  357.   glVertex3fv(ep[7][8]);
  358.   glEnd();
  359.   glBegin(GL_TRIANGLE_STRIP);
  360.   glVertex3fv(ep[7][0]);
  361.   glVertex3fv(ep[8][0]);
  362.   glVertex3fv(ep[7][1]);
  363.   glVertex3fv(ep[8][1]);
  364.   glVertex3fv(ep[7][2]);
  365.   glVertex3fv(ep[8][2]);
  366.   glVertex3fv(ep[7][3]);
  367.   glVertex3fv(ep[8][3]);
  368.   glVertex3fv(ep[7][4]);
  369.   glVertex3fv(ep[8][4]);
  370.   glVertex3fv(ep[7][5]);
  371.   glVertex3fv(ep[8][5]);
  372.   glVertex3fv(ep[7][6]);
  373.   glVertex3fv(ep[8][6]);
  374.   glVertex3fv(ep[7][7]);
  375.   glVertex3fv(ep[8][7]);
  376.   glVertex3fv(ep[7][8]);
  377.   glVertex3fv(ep[8][8]);
  378.   glEnd();
  379. }
  380. static void bend_forward(void) {
  381.   
  382.   glTranslatef(0.0, 1.000000, 0.0);
  383.   glRotatef (0.1 * (900), 1.0, 0.0, 0.0);
  384.   glTranslatef(0.0, -1.000000, 0.0);
  385. }
  386. static void bend_left(void) {
  387.   
  388.   glRotatef (0.1 * (-900), 0.0, 0.0, 1.0);
  389.   glTranslatef(0.0, 1.000000, 0.0);
  390.   glRotatef (0.1 * (900), 1.0, 0.0, 0.0);
  391.   glTranslatef(0.0, -1.000000, 0.0);
  392. }
  393. static void bend_right(void) {
  394.   glRotatef (0.1 * (900), 0.0, 0.0, 1.0);
  395.   glTranslatef(0.0, 1.000000, 0.0);
  396.   glRotatef (0.1 * (900), 1.0, 0.0, 0.0);
  397.   glTranslatef(0.0, -1.000000, 0.0);
  398. }
  399. void draw_logo_shadow(void) {
  400.   
  401.   glTranslatef(5.500000,  -3.500000,  4.500000);
  402.   
  403.   glTranslatef(0.0,  0.0,  -7.000000);
  404.   draw_double_cylinder();
  405.   bend_forward();
  406.   draw_elbow();
  407.   glTranslatef(0.0,  0.0,  -7.000000);
  408.   draw_double_cylinder();
  409.   bend_forward();
  410.   draw_elbow();
  411.   glTranslatef(0.0,  0.0,  -5.000000);
  412.   draw_single_cylinder();
  413.   bend_right();
  414.   draw_elbow();
  415.   glTranslatef(0.0,  0.0,  -7.000000);
  416.   draw_double_cylinder();
  417.   bend_forward();
  418.   draw_elbow();
  419.   glTranslatef(0.0,  0.0,  -7.000000);
  420.   draw_double_cylinder();
  421.   bend_forward();
  422.   draw_elbow();
  423.   glTranslatef(0.0,  0.0,  -5.000000);
  424.   draw_single_cylinder();
  425.   bend_left();
  426.   draw_elbow();
  427.   glTranslatef(0.0,  0.0,  -7.000000);
  428.   draw_double_cylinder();
  429.   bend_forward();
  430.   draw_elbow();
  431.   glTranslatef(0.0,  0.0,  -7.000000);
  432.   draw_double_cylinder();
  433.   bend_forward();
  434.   draw_elbow();
  435.   glTranslatef(0.0,  0.0,  -5.000000);
  436.   draw_single_cylinder();
  437.   bend_right();
  438.   draw_elbow();
  439.   glTranslatef(0.0,  0.0,  -7.000000);
  440.   draw_double_cylinder();
  441.   bend_forward();
  442.   draw_elbow();
  443.   glTranslatef(0.0,  0.0,  -7.000000);
  444.   draw_double_cylinder();
  445.   bend_forward();
  446.   draw_elbow();
  447.   glTranslatef(0.0,  0.0,  -5.000000);
  448.   draw_single_cylinder();
  449.   bend_left();
  450.   draw_elbow();
  451.   glTranslatef(0.0,  0.0,  -7.000000);
  452.   draw_double_cylinder();
  453.   bend_forward();
  454.   draw_elbow();
  455.   glTranslatef(0.0,  0.0,  -7.000000);
  456.   draw_double_cylinder();
  457.   bend_forward();
  458.   draw_elbow();
  459.   glTranslatef(0.0,  0.0,  -5.000000);
  460.   draw_single_cylinder();
  461.   bend_right();
  462.   draw_elbow();
  463.   glTranslatef(0.0,  0.0,  -7.000000);
  464.   draw_double_cylinder();
  465.   bend_forward();
  466.   draw_elbow();
  467.   glTranslatef(0.0,  0.0,  -7.000000);
  468.   draw_double_cylinder();
  469.   bend_forward();
  470.   draw_elbow();
  471.   glTranslatef(0.0,  0.0,  -5.000000);
  472.   draw_single_cylinder();
  473.   bend_left();
  474.   draw_elbow();
  475. }