zoukankan      html  css  js  c++  java
  • OpenGl编程指南第7版(红宝书)环境配制

    环境

    OS:win7 旗舰版SP1 64位
    编译器: VS 2013 express 的cl

    软件

    glut. 在这个页面https://www.opengl.org/resources/libraries/glut/glut_downloads.php 搜glutdlls37beta.zip,里面有头文件和编译好的lib,dll
    glew. 在这个页面http://glew.sourceforge.net/下载 Windows 32-bit and 64-bit版本

    配制

    %VS_HOME%代表VS的安装目录. %GLUT_HOME%代表glut所在的文件夹. %GLEW_HOME%代表glew所在的文件夹.
    把%GLUT_HOME%include*.h复制到%VS_HOME%VCincludeGL. GL文件夹不存在就建一个.
    把%GLUT_HOME%*.lib复制到%VS_HOME%VClib
    把%GLUT_HOME%*.dll复制到C:WindowsSysWOW64
    把%GLEW_HOME%includeGL*.h复制到%VS_HOME%VCincludeGL
    把%GLEW_HOME%libReleaseWin32*.lib复制到%VS_HOME%VClib
    把%GLEW_HOME%inReleaseWin32*.dll复制到C:WindowsSysWOW64
    注意虽然系统是64位的但是GLEW要复制32位的.

    运行例子

    源代码在这里下载 http://pan.baidu.com/s/1c2G0XAK
    不使用VS建工程的方式运行例子,只用命令cl编译,这样可以把精力集中到学习opengl上,而不是VS上.另外用命令行能更好的理解VS工作的原理.微软的cl命令不认识UTF8,所以把源代码中的hello.c另存为UTF8 BOM格式. 打开Visual Studio 2013-Visual Studio Tools-点击"VS2013 x86 本机工具命令提示"打开命令行工具,切换到hello.c所在的目录(确保hello.c已经保存为UTF8 BOM格式).执行命令:

    cl hello.c
    

    如果按照上面的配制应该没有错误,会生成hello.exe文件.如果有错误请留言.
    编译完成后运行可以看到效果.

    hello.exe
    


    红宝书中有的例子如mvarray.c需要用到函数glMultiDrawElements,glMultiDrawElementsEXT要用到Opengl 1.3,1.4的特性,Windows本身只支持Opengl 1.0. 所以要使用glew. 要对mvarray.c修改成如下内容.

    #include <GL/glew.h>
    #include <GL/glut.h>
    #include <stdlib.h>
    #include <stdio.h>
    
    #ifdef GL_VERSION_1_3
    
    void setupPointer(void)
    {
       static GLint vertices[] = {25, 25,
                           75, 75,
                           100, 125,
                           150, 75,
                           200, 175,
                           250, 150,
                           300, 125,
                           100, 200,
                           150, 250,
                           200, 225,
                           250, 300,
                           300, 250};
    
       glEnableClientState (GL_VERTEX_ARRAY);
       glVertexPointer (2, GL_INT, 0, vertices);
    }
    
    void init(void) 
    {
       glClearColor (0.0, 0.0, 0.0, 0.0);
       glShadeModel (GL_SMOOTH);
       setupPointer ();
    }
    
    void display(void)
    {
       static GLubyte oneIndices[] = {0, 1, 2, 3, 4, 5, 6};
       static GLubyte twoIndices[] = {1, 7, 8, 9, 10, 11};
       static GLsizei count[] = {7, 6};
       static GLvoid * indices[2] = {oneIndices, twoIndices};
       
       glClear (GL_COLOR_BUFFER_BIT);
       glColor3f (1.0, 1.0, 1.0);
       glMultiDrawElementsEXT (GL_LINE_STRIP, count, GL_UNSIGNED_BYTE,
                               indices, 2);
       glFlush ();
    }
    
    void reshape (int w, int h)
    {
       glViewport (0, 0, (GLsizei) w, (GLsizei) h);
       glMatrixMode (GL_PROJECTION);
       glLoadIdentity ();
       gluOrtho2D (0.0, (GLdouble) w, 0.0, (GLdouble) h);
    }
    
    void keyboard(unsigned char key, int x, int y)
    {
       switch (key) {
          case 27:
             exit(0);
             break;
       }
    }
    
    int main(int argc, char** argv)
    {
       glutInit(&argc, argv);
       glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);
       glutInitWindowSize (350, 350); 
       glutInitWindowPosition (100, 100);
       glutCreateWindow (argv[0]);
       glewInit();
       init ();
       glutDisplayFunc(display); 
       glutReshapeFunc(reshape);
       glutKeyboardFunc (keyboard);
       glutMainLoop();
       return 0;
    }
    #else
    int main(int argc, char** argv)
    {
        fprintf (stderr, "This program demonstrates a feature which is not in OpenGL Version 1.0.
    ");
        fprintf (stderr, "If your implementation of OpenGL Version 1.0 has the right extensions,
    ");
        fprintf (stderr, "you may be able to modify this program to make it run.
    ");
        return 0;
    }
    #endif
    

    其实只做了2点修改.1是在最前面加了#include <GL/glew.h>的引用.2是在glutCreateWindow下面加了glewInit(),初始化glew.另外要记得把mvarray.c的编码格式改成UTF8 BOM.
    编译mvarray.c要指定库,所以编译和链接要分成2步(否则会报glMultiDrawElementsEXT找不到的链接错误).
    先编译,执行如下命令:

    cl /c mvarray.c
    

    /c的意思是只编译生成.obj,不链接,再执行命令

    link glew32.lib mvarray.obj
    

    链接glew32.lib mvarray.obj生成可执行文件mvarray.exe. 再执行命令

    mvarray.exe
    

    可以看到结果.

  • 相关阅读:
    MVC中添加执行统计功能
    SVN 全局忽略列表
    WebApi当中微软又犯了一次2
    SQL性能更总
    【懒人专用】快速构建Web请求
    js中模拟多个字母的split
    分页起始位置的懒汉判断方法
    文档摆放
    转: 多线程环境下调用 HttpWebRequest 并发连接限制
    bash命令根据历史记录补全
  • 原文地址:https://www.cnblogs.com/zhouyang209117/p/5349812.html
Copyright © 2011-2022 走看看