home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / newopg.zip / FONT.C < prev    next >
Text File  |  1995-03-04  |  5KB  |  277 lines

  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4. #include "tk.h"
  5.  
  6. float tkRGBMap[8][3] = {
  7.     {
  8.     0, 0, 0
  9.     },
  10.     {
  11.     1, 0, 0
  12.     },
  13.     {
  14.     0, 1, 0
  15.     },
  16.     {
  17.     1, 1, 0
  18.     },
  19.     {
  20.     0, 0, 1
  21.     },
  22.     {
  23.     1, 0, 1
  24.     },
  25.     {
  26.     0, 1, 1
  27.     },
  28.     {
  29.     1, 1, 1
  30.     }
  31. };
  32.  
  33.  
  34. #define OPENGL_WIDTH 24
  35. #define OPENGL_HEIGHT 13
  36.  
  37.  
  38. char string[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz";
  39. GLenum rgb, doubleBuffer, directRender, windType;
  40. GLuint strokeBase, outlineBase, filledBase, bitmapBase;
  41. float angleX = 0.0, angleY = 0.0, angleZ = 0.0;
  42. float scaleX = 1.0, scaleY = 1.0, scaleZ = 1.0;
  43. float shiftX = 0.0, shiftY = 0.0, shiftZ = 0.0;
  44.  
  45.  
  46. static void Init(void)
  47. {
  48.  
  49.     strokeBase = glGenLists(256);
  50.     if (tkCreateStrokeFont(strokeBase) == GL_FALSE) {
  51.     tkQuit();
  52.     }
  53.     outlineBase = glGenLists(256);
  54.     if (tkCreateOutlineFont(outlineBase) == GL_FALSE) {
  55.     tkQuit();
  56.     }
  57.     filledBase = glGenLists(256);
  58.     if (tkCreateFilledFont(filledBase) == GL_FALSE) {
  59.     tkQuit();
  60.     }
  61.     bitmapBase = glGenLists(256);
  62.     if (tkCreateBitmapFont(bitmapBase) == GL_FALSE) {
  63.     tkQuit();
  64.     }
  65.  
  66.     glClearColor(0.0, 0.0, 0.0, 0.0);
  67.     glClearIndex(0.0);
  68. }
  69.  
  70. static void Reshape(int width, int height)
  71. {
  72.  
  73.     glViewport(0, 0, (GLint)width, (GLint)height);
  74.  
  75.     glMatrixMode(GL_PROJECTION);
  76.     glLoadIdentity();
  77.     glOrtho(-400.0, 400.0, -200.0, 200.0, -400.0, 400.0);
  78.     glMatrixMode(GL_MODELVIEW);
  79. }
  80.  
  81. static GLenum Key(int key, GLenum mask)
  82. {
  83.  
  84.     switch (key) {
  85.       case TK_ESCAPE:
  86.         tkQuit();
  87.  
  88.       case TK_LEFT:
  89.     shiftX -= 20.0;
  90.     break;
  91.       case TK_RIGHT:
  92.     shiftX += 20.0;
  93.     break;
  94.       case TK_UP:
  95.     shiftY += 20.0;
  96.     break;
  97.       case TK_DOWN:
  98.     shiftY -= 20.0;
  99.     break;
  100.       case TK_n:
  101.     shiftZ += 20.0;
  102.     break;
  103.       case TK_m:
  104.     shiftZ -= 20.0;
  105.     break;
  106.  
  107.       case TK_q:
  108.     scaleX -= 0.1;
  109.     if (scaleX < 0.1) {
  110.         scaleX = 0.1;
  111.     }
  112.     break;
  113.       case TK_w:
  114.     scaleX += 0.1;
  115.     break;
  116.       case TK_a:
  117.     scaleY -= 0.1;
  118.     if (scaleY < 0.1) {
  119.         scaleY = 0.1;
  120.     }
  121.     break;
  122.       case TK_s:
  123.     scaleY += 0.1;
  124.     break;
  125.       case TK_z:
  126.     scaleZ -= 0.1;
  127.     if (scaleZ < 0.1) {
  128.         scaleZ = 0.1;
  129.     }
  130.     break;
  131.       case TK_x:
  132.     scaleZ += 0.1;
  133.     break;
  134.  
  135.       case TK_e:
  136.     angleX -= 5.0;
  137.     if (angleX < 0.0) {
  138.         angleX = 360.0 + angleX;
  139.     }
  140.     break;
  141.       case TK_r:
  142.     angleX += 5.0;
  143.     if (angleX > 360.0) {
  144.         angleX = angleX - 360.0;
  145.     }
  146.     break;
  147.       case TK_d:
  148.     angleY -= 5.0;
  149.     if (angleY < 0.0) {
  150.         angleY = 360.0 + angleY;
  151.     }
  152.     break;
  153.       case TK_f:
  154.     angleY += 5.0;
  155.     if (angleY > 360.0) {
  156.         angleY = angleY - 360.0;
  157.     }
  158.     break;
  159.       case TK_c:
  160.     angleZ -= 5.0;
  161.     if (angleZ < 0.0) {
  162.         angleZ = 360.0 + angleZ;
  163.     }
  164.     break;
  165.       case TK_v:
  166.     angleZ += 5.0;
  167.     if (angleZ > 360.0) {
  168.         angleZ = angleZ - 360.0;
  169.     }
  170.     break;
  171.  
  172.       default:
  173.     return GL_FALSE;
  174.     }
  175.     return GL_TRUE;
  176. }
  177.  
  178. static void Draw(void)
  179. {
  180.  
  181.     glClear(GL_COLOR_BUFFER_BIT);
  182.  
  183.     TK_SETCOLOR(windType, TK_WHITE);
  184.  
  185.     glPushMatrix();
  186.  
  187.     glTranslatef(shiftX, shiftY, shiftZ);
  188.     glRotatef(angleX, 1.0, 0.0, 0.0);
  189.     glRotatef(angleY, 0.0, 1.0, 0.0);
  190.     glRotatef(angleZ, 0.0, 0.0, 1.0);
  191.     glScalef(scaleX, scaleY, scaleZ);
  192.  
  193.     glPushMatrix();
  194.     glRasterPos2f(-390.5, 0.5);
  195.     tkDrawStr(bitmapBase, string);
  196.     glPopMatrix();
  197.  
  198.     glPushMatrix();
  199.     glTranslatef(-390.5, -30.5, 0.0);
  200.     tkDrawStr(strokeBase, string);
  201.     glPopMatrix();
  202.  
  203.     glPushMatrix();
  204.     glTranslatef(-390.5, -60.5, 0.0);
  205.     tkDrawStr(outlineBase, string);
  206.     glPopMatrix();
  207.  
  208.     glPushMatrix();
  209.     glTranslatef(-390.5, -90.5, 0.0);
  210.     tkDrawStr(filledBase, string);
  211.     glPopMatrix();
  212.  
  213.     glPopMatrix();
  214.  
  215.     glFlush();
  216.  
  217.     if (doubleBuffer) {
  218.     tkSwapBuffers();
  219.     }
  220. }
  221.  
  222. static GLenum Args(int argc, char **argv)
  223. {
  224.     GLint i;
  225.  
  226.     rgb = GL_TRUE;
  227.     doubleBuffer = GL_FALSE;
  228.     directRender = GL_TRUE;
  229.  
  230.     for (i = 1; i < argc; i++) {
  231.     if (strcmp(argv[i], "-ci") == 0) {
  232.         rgb = GL_FALSE;
  233.     } else if (strcmp(argv[i], "-rgb") == 0) {
  234.         rgb = GL_TRUE;
  235.     } else if (strcmp(argv[i], "-sb") == 0) {
  236.         doubleBuffer = GL_FALSE;
  237.     } else if (strcmp(argv[i], "-db") == 0) {
  238.         doubleBuffer = GL_TRUE;
  239.     } else if (strcmp(argv[i], "-dr") == 0) {
  240.         directRender = GL_TRUE;
  241.     } else if (strcmp(argv[i], "-ir") == 0) {
  242.         directRender = GL_FALSE;
  243.     } else {
  244.         printf("%s (Bad option).\n", argv[i]);
  245.         return GL_FALSE;
  246.     }
  247.     }
  248.     return GL_TRUE;
  249. }
  250.  
  251. void main(int argc, char **argv)
  252. {
  253.  
  254.     if (Args(argc, argv) == GL_FALSE) {
  255.     tkQuit();
  256.     }
  257.  
  258.     tkInitPosition(0, 0, 800, 400);
  259.  
  260.     windType = (rgb) ? TK_RGB : TK_INDEX;
  261.     windType |= (doubleBuffer) ? TK_DOUBLE : TK_SINGLE;
  262.     windType |= (directRender) ? TK_DIRECT : TK_INDIRECT;
  263.     tkInitDisplayMode(windType);
  264.  
  265.     if (tkInitWindow("Font Test") == GL_FALSE) {
  266.     tkQuit();
  267.     }
  268.  
  269.     Init();
  270.  
  271.     tkExposeFunc(Reshape);
  272.     tkReshapeFunc(Reshape);
  273.     tkKeyDownFunc(Key);
  274.     tkDisplayFunc(Draw);
  275.     tkExec();
  276. }
  277.