• Open Graphics Library初步_搭建环境_GLUT


    百度百科传送门:OpenGLGLUT.

    编程爱好者网站原创教程:OpenGL入门学习.

    OpenGL如何获取?http://www.opengl.org/,但它随VC++6.0已经安装到计算机中了。

    OpenGL在计算机上的位置?
    如果是VC++6.0。请打开C:\Program Files\Microsoft Visual Studio\VC98\Lib,检查该目录下是否有OPENGL32.LIB和GLU32.LIB,就是它们了。

    调用的时候对应include哪些文件呢?
    请打开C:\Program Files\Microsoft Visual Studio\VC98\Include\GL,发现里面的三个文件了吧,就是这些(ps:并非直接在Include下面所以include时候注意戴上gl\)。

    下面来安装GLUT。与其说是安装,不如说是拷贝几个文件(ps:目的就是要让VC编译器发现glut的lib,h文件,然运行环境找到对应动态链接库dll文件):

    我下载了一份glut是3.7beta版的。文件名glutdlls37beta.zip。可以直接在我的博客中下载:https://files.cnblogs.com/cheetahw/glutdlls37beta.zip

    解压打开以后5个文件:
    glut.h 拷入 C:\Program Files\Microsoft Visual Studio\VC98\Include\GL
    glut.lib 和 glut32.lib 拷入 C:\Program Files\Microsoft Visual Studio\VC98\Lib
    glut.dll 和 glut32.dll 拷入 C:\WINDOWS\system32
    (ps:以上文件拷入位置其实并不固定,目的就是使vc编译器能找到它们,比如也可以定义vc编译器目录include到其它位置。我们这里就不这么做了。win7 64位操作系统中就有很大不同,比如它的include文件夹和lib文件夹就在Program Files(x86)\Microsoft SDKs\Windows\v7.0A这样的目录下,而开发的64位软件,dll应该放在windows/sysWow64,但在win7上开发32位程序,dll仍然在windows\system32下面)

    *如果vc基础不是很好,只是为了完成一下作业的话。做好上面的浅绿色部分即可。

    建立win32控制台应用程序,项目名glwithGLUT,空项目。
    项目下新建core.cpp文件。准备编码。

    (如果不是很了解下面的编码,建议先下载一份文档对照着看下面的源码。这是一份云南大学信息学院编制的GLUT文档,中文,看上去较简单,直接放博客上的下载地址:https://files.cnblogs.com/cheetahw/glut%E5%87%BD%E6%95%B0%E8%AF%A6%E8%A7%A3.pdf)核心库文档英文的,暂时没有发上来,可以自己去搜索一下。或者去图书馆借本参考书!

    View Code
    #include <gl/glut.h>
    #include <math.h>

    const float PI = 3.1416;
    float ax = 0.0f;
    float ay = 0.0f;
    float az = 0.0f;

    void Drawing(){
    glPushMatrix();
    glRotatef(ax, 1.0f, 0.0f, 0.0f);
    glRotatef(ay, 0.0f, 1.0f, 0.0f);
    glRotatef(az, 0.0f, 0.0f, 1.0f);
    glBegin( GL_LINES );{
    for(float t=.0f; t<=PI; t+=.1f){
    glColor3f(1.0f, 0.0f, 0.0f);
    glVertex3f(cosf(t)*100.0f,sinf(t)*100.0f,0.0f);
    glVertex3f(0,0,0);

    glColor3f(0.0f, 1.0f, 0.0f);
    glVertex3f(0.0f,cosf(t)*100.0f,sinf(t)*100.0f);
    glVertex3f(0,0,0);

    glColor3f(0.0f, 0.0f, 1.0f);
    glVertex3f(sinf(t)*100.0f,0.0f,cosf(t)*100.0f);
    glVertex3f(0,0,0);
    }
    }glEnd();
    glPopMatrix();
    }

    void OnReshape(int w, int h){
    double ar = (double)w/(double)h;
    glViewport(0, 0, w, h);
    glMatrixMode( GL_PROJECTION );
    glLoadIdentity();

    if(w>=h){
    glOrtho(-300*ar, 300*ar, -300, 300, -300, 300);
    }else{
    glOrtho(-300, 300, -300/ar, 300/ar, -300, 300);
    }

    glMatrixMode( GL_MODELVIEW );
    glLoadIdentity();
    }

    void OnDisplay(){
    glClear( GL_COLOR_BUFFER_BIT );
    Drawing();
    glutSwapBuffers();
    }

    void OnTimer(int flag){
    ax += 0.12f;
    ay += 0.15f;
    az += 0.1f;
    OnDisplay();
    glutTimerFunc(10, OnTimer, 101);
    }

    int main(int argc, char* argv[]){
    glutInit(&argc, argv);
    glutInitDisplayMode( GLUT_RGB | GLUT_DOUBLE );
    glutInitWindowPosition(0,0);
    glutInitWindowSize(800,600);
    glutCreateWindow("窗口标题");
    glutDisplayFunc(OnDisplay);
    glutReshapeFunc(OnReshape);
    glutTimerFunc(10, OnTimer, 101);
    glutMainLoop();
    return 0;
    }

    core.cpp中粘贴了如上的代码,并且编译运行。如果在屏幕上看见了一些变换的图形的话。那么OpenGL的环境配置就OK了。下面,你可以更改一下代码中的参数,看看是不是达到了你想要的效果。

  • 相关阅读:
    angularjs事件通信$on,$emit,$broadcast详解
    es6入门7--Set Map数据结构
    ES6函数参数默认值作用域的模拟原理实现与个人的一些推测
    JS判断数组是否包含某元素
    es6入门6--数组拓展运算符,Array.from()基本用法
    js new一个对象的过程,实现一个简单的new方法
    js中的NaN,isNaN与Number.isNaN的区别,如何判断一个值严格等于NaN
    详解 JDK8 新增的日期时间类
    详解 枚举
    详解 动态代理
  • 原文地址:https://www.cnblogs.com/cheetahw/p/opengl.html
Copyright © 2020-2023  润新知