gltest.cpp
上传用户:yhdzpy8989
上传日期:2007-06-13
资源大小:13604k
文件大小:7k
源码类别:

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: gltest.cpp,v $
  4.  * PRODUCTION Revision 1000.1  2004/06/01 20:53:12  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.3
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /*  $Id: gltest.cpp,v 1000.1 2004/06/01 20:53:12 gouriano Exp $
  10.  * ===========================================================================
  11.  *
  12.  *                            PUBLIC DOMAIN NOTICE
  13.  *               National Center for Biotechnology Information
  14.  *
  15.  *  This software/database is a "United States Government Work" under the
  16.  *  terms of the United States Copyright Act.  It was written as part of
  17.  *  the author's official duties as a United States Government employee and
  18.  *  thus cannot be copyrighted.  This software/database is freely available
  19.  *  to the public for use. The National Library of Medicine and the U.S.
  20.  *  Government have not placed any restriction on its use or reproduction.
  21.  *
  22.  *  Although all reasonable efforts have been taken to ensure the accuracy
  23.  *  and reliability of the software and data, the NLM and the U.S.
  24.  *  Government do not and cannot warrant the performance or results that
  25.  *  may be obtained by using this software or data. The NLM and the U.S.
  26.  *  Government disclaim all warranties, express or implied, including
  27.  *  warranties of performance, merchantability or fitness for any particular
  28.  *  purpose.
  29.  *
  30.  *  Please cite the author in any work or product based on this material.
  31.  *
  32.  * ===========================================================================
  33.  *
  34.  * Author:  Mike DiCuccio
  35.  *
  36.  * File Description:
  37.  *    CGlTestApp -- test of OpenGL framework for rendering images as a CGI app
  38.  */
  39. #include <ncbi_pch.hpp>
  40. #include <cgi/cgictx.hpp>
  41. #include <corelib/ncbifile.hpp>
  42. #include <gui/opengl/mesa/glcgi_image.hpp>
  43. #include <gui/opengl/glutils.hpp>
  44. #include <gui/opengl/glcamera.hpp>
  45. //#include <GL/glut.h>
  46. using namespace ncbi;
  47. /////////////////////////////////////////////////////////////////////////////
  48. //  CGlTestApplication::
  49. //
  50. class CGlTestApplication : public CGlCgiImageApplication
  51. {
  52. public:
  53.     CGlTestApplication();
  54.     virtual void Render(CCgiContext& ctx);
  55. private:
  56.     // camrea set-up
  57.     CGlCamera m_Camera;
  58. };
  59. CGlTestApplication::CGlTestApplication()
  60. {
  61.     m_Camera.SetLayout(CGlCamera::ePerspective);
  62.     m_Camera.SetFieldOfView(45.0f);
  63.     m_Camera.SetNearPlane(0.1f);
  64.     m_Camera.SetFarPlane(500.0f);
  65. }
  66. void CGlTestApplication::Render(CCgiContext& ctx)
  67. {
  68.     // retrieve our CGI rendering params
  69.     const CCgiRequest& request  = ctx.GetRequest();
  70.     const TCgiEntries& entries = request.GetEntries();
  71.     TCgiEntries::const_iterator fov_iter = entries.find("fov");
  72.     TCgiEntries::const_iterator dist_iter = entries.find("dist");
  73.     TCgiEntries::const_iterator xrot_iter = entries.find("xrot");
  74.     TCgiEntries::const_iterator yrot_iter = entries.find("yrot");
  75.     TCgiEntries::const_iterator zrot_iter = entries.find("zrot");
  76.     TCgiEntries::const_iterator rad1_iter = entries.find("rad1");
  77.     TCgiEntries::const_iterator rad2_iter = entries.find("rad2");
  78.     float dist = 40.0f;
  79.     float xrot = 0.0f;
  80.     float yrot = 0.0f;
  81.     float zrot = 0.0f;
  82.     float rad1 = 2.0f;
  83.     float rad2 = 7.0f;
  84.     if (fov_iter != entries.end()) {
  85.         m_Camera.SetFieldOfView(NStr::StringToDouble(fov_iter->second));
  86.     }
  87.     if (dist_iter != entries.end()) {
  88.         dist = NStr::StringToDouble(dist_iter->second);
  89.     }
  90.     if (xrot_iter != entries.end()) {
  91.         xrot = NStr::StringToDouble(xrot_iter->second);
  92.     }
  93.     if (yrot_iter != entries.end()) {
  94.         yrot = NStr::StringToDouble(yrot_iter->second);
  95.     }
  96.     if (zrot_iter != entries.end()) {
  97.         zrot = NStr::StringToDouble(zrot_iter->second);
  98.     }
  99.     if (rad1_iter != entries.end()) {
  100.         rad1 = NStr::StringToDouble(rad1_iter->second);
  101.     }
  102.     if (rad2_iter != entries.end()) {
  103.         rad2 = NStr::StringToDouble(rad2_iter->second);
  104.     }
  105.     //
  106.     // do some rendering
  107.     //
  108.     glClearColor(1.0f, 1.0f, 1.0f, 0.0f);
  109.     glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  110.     glMatrixMode(GL_PROJECTION);
  111.     glLoadIdentity();
  112.     glOrtho(-1.0f, 1.0f, -1.0f, 1.0f, -1.0f, 1.0f);
  113.     glBegin(GL_QUADS);
  114.         glColor3f(0.2f, 0.2f, 0.2f);
  115.         glVertex2f(-1.0f, 1.0f);
  116.         glVertex2f( 1.0f, 1.0f);
  117.         glColor3f(0.4f, 0.4f, 0.8f);
  118.         glVertex2f( 1.0f, -1.0f);
  119.         glVertex2f(-1.0f, -1.0f);
  120.     glEnd();
  121.     m_Camera.MakeCurrent();
  122.     glMatrixMode(GL_MODELVIEW);
  123.     glLoadIdentity();
  124.     //
  125.     // lighting - done against an identity matrix
  126.     //
  127.     static GLfloat light_pos[]   = { -20.0f, 20.0f, 5.0f, 1.0f };
  128.     static GLfloat white_light[] = { 1.0f, 1.0f, 1.0f, 1.0f };
  129.     glEnable(GL_LIGHTING);
  130.     glEnable(GL_LIGHT0);
  131.     glLightModelf(GL_LIGHT_MODEL_TWO_SIDE, GL_TRUE);
  132.     glLightfv(GL_LIGHT0, GL_POSITION, light_pos);
  133.     glLightfv(GL_LIGHT0, GL_DIFFUSE,  white_light);
  134.     glLightfv(GL_LIGHT0, GL_SPECULAR, white_light);
  135.     //
  136.     // world-view setup
  137.     //
  138.     glTranslatef(0.0f, 0.0f, -dist);
  139.     glRotatef(xrot, 1.0f, 0.0f, 0.0f);
  140.     glRotatef(yrot, 0.0f, 1.0f, 0.0f);
  141.     glRotatef(zrot, 0.0f, 0.0f, 1.0f);
  142.     //
  143.     // make things a bit faster
  144.     //
  145.     glEnable(GL_DEPTH_TEST);
  146.     glEnable(GL_CULL_FACE);
  147.     //glCullFace(GL_BACK);
  148.     //
  149.     // some interesting solids
  150.     // we use different material properties for each
  151.     //
  152.     glEnable(GL_COLOR_MATERIAL);
  153.     glColor3f(1.0f, 0.5f, 0.0f);
  154.     glPushMatrix();
  155.     glTranslatef(5.0f, 0.0f, 0.0f);
  156.     //glutSolidTorus(rad1, rad2, 30, 60);
  157.     glPopMatrix();
  158.     glColor3f(0.0f, 1.0f, 0.0f);
  159.     glPushMatrix();
  160.     glTranslatef(-5.0f, 0.0f, 0.0f);
  161.     glRotatef(90, 1.0f, 0.0f, 0.0f);
  162.     //glutSolidTorus(rad1, rad2, 30, 60);
  163.     glPopMatrix();
  164.     //
  165.     // debugging: draw our axes
  166.     //
  167.     glDisable(GL_LIGHTING);
  168.     glBegin(GL_LINES);
  169.         glColor3f (1.0f, 0.0f, 0.0f);
  170.         glVertex3f(0.0f, 0.0f, 0.0f);
  171.         glVertex3f(5.0f, 0.0f, 0.0f);
  172.         glColor3f (0.0f, 1.0f, 0.0f);
  173.         glVertex3f(0.0f, 0.0f, 0.0f);
  174.         glVertex3f(0.0f, 5.0f, 0.0f);
  175.         glColor3f (0.0f, 0.0f, 1.0f);
  176.         glVertex3f(0.0f, 0.0f, 0.0f);
  177.         glVertex3f(0.0f, 0.0f, 5.0f);
  178.     glEnd();
  179.     CGlUtils::DumpState();
  180. }
  181. /////////////////////////////////////////////////////////////////////////////
  182. //  MAIN
  183. //
  184. int main(int argc, const char* argv[])
  185. {
  186.     int result = CGlTestApplication().AppMain(argc, argv, 0, eDS_Default, 0);
  187.     _TRACE("back to normal diags");
  188.     return result;
  189. }
  190. /*
  191.  * ===========================================================================
  192.  * $Log: gltest.cpp,v $
  193.  * Revision 1000.1  2004/06/01 20:53:12  gouriano
  194.  * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.3
  195.  *
  196.  * Revision 1.3  2004/05/21 22:27:45  gorelenk
  197.  * Added PCH ncbi_pch.hpp
  198.  *
  199.  * Revision 1.2  2003/07/16 15:12:45  dicuccio
  200.  * Fixed author name
  201.  *
  202.  * Revision 1.1  2003/06/09 19:21:44  dicuccio
  203.  * Initial revision
  204.  *
  205.  * ===========================================================================
  206.  */