美文网首页
(一)VC6.0写第一个OpenGL程序

(一)VC6.0写第一个OpenGL程序

作者: 三十五岁是码农 | 来源:发表于2018-04-20 10:21 被阅读0次

    GLUT代表OpenGL应用工具包(OpenGL Utility Toolkit),是一个与窗口系统无关的工具包。它作为AUX库的功能更强的替代品,用于隐藏不同窗口系统API的复杂性。GLUT的子程序的前缀使用”glut”。

    OpenGl中的坐标系

    image

    OpenGl中的几何变换

    在OpenGl中,无论2D还是3D都可以进行几何变换,实现原理就是调用函数生成变换矩阵:
    | glMatrixMode(GL_MODEL_VIEW) | 选中矩阵为后续矩阵操作对象 |
    | glTranslate(x,y,z) | 构造一个平移矩阵,和当前选中矩阵相乘 |
    | glRotate(th_rad,vx,vy,vz) | 构造一个旋转矩阵,一参为旋转弧度 |
    | glScale(x,y,z) | 构造一个缩放矩阵,和当前选中矩阵相乘 |
    | glLoadIdentity() | 设置当前矩阵为单位矩阵 |
    | glPushMatrix() | 将选中矩阵压栈 |
    | glPopMatrix() | 将栈顶矩阵弹出设为选中矩阵 |

    在Windows下安装glut库

    首先要下载glut库,可从OpenGL的官网上下载:glut库
    下载后解开压缩包,里面有五个文件:glut.h,glut.lib,glut32.lib,glut.dll,glut32.dll。
    glut.h文件放到VC的\include\GL文件夹下,VC++6.0版本对应的文件夹是安装路径下VC98\Include\GL。
    glut.lib,glut32.lib放到VC的lib文件夹下,VC++6.0版本对应的文件夹是安装路径下VC98\Lib,
    glut.dll,glut32.dll,放到C:\WINDOWS\system32,如果是64位放到C:\WINDOWS\SysWOW64,这个如果报错请看
    OpenGl的源程序,运行就提示,"计算机丢失 glut32.dll文件"
    这样就可以在VC里使用glut库了。

    简单示例

    绘制一个立方体

    #include <gl\glut.h>  
    //6个面的绘制顺序,存储的是顶点的下标  
    static const GLint quads[][4] = {  
        0, 2, 3, 1,  
        0, 4, 6, 2,  
        0, 1, 5, 4,  
        4, 5, 7, 6,  
        1, 3, 7, 5,  
        2, 6, 7, 3,  
    };  
    void draw_cube(GLfloat x,GLfloat y,GLfloat z){  
        //8个顶点  
        static const GLfloat vetexs[][3] = {  
             0.0,0.0,0.0,  
             x,0.0,0.0,  
             0.0,y,0.0,  
             x,y,0.0,  
             0.0,0.0,z,  
             x,0.0,z,  
             0.0,y,z,  
             x,y,z  
        };  
         glClear(GL_COLOR_BUFFER_BIT);  
         glFrontFace(GL_CCW);  
         glCullFace(GL_BACK);  
         glEnable(GL_CULL_FACE);  
         glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);  
         glRotated(15,1,0,0);  
         glRotated(15,0,1,0);  
         glTranslatef(-x/2,-y/2,-z/2);  //平移至中心  
        //画立方体  
        for(int i = 0;i<6;i++){  
            glBegin(GL_QUADS);  
                    glVertex3f(vetexs[quads[i][0]][0],vetexs[quads[i][0]][1],vetexs[quads[i][0]][2]);  
                    glVertex3f(vetexs[quads[i][1]][0],vetexs[quads[i][1]][1],vetexs[quads[i][1]][2]);  
                    glVertex3f(vetexs[quads[i][2]][0],vetexs[quads[i][2]][1],vetexs[quads[i][2]][2]);  
                    glVertex3f(vetexs[quads[i][3]][0],vetexs[quads[i][3]][1],vetexs[quads[i][3]][2]);  
            glEnd();  
        }  
    }  
    void mydisplay(){  
      
        draw_cube(1.0,0.2,0.8);  
        glFlush();  
    }  
    int main(int argc, char *argv[])  
    {  
        glutInit(&argc, argv);  
        glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);  
        glutInitWindowPosition(100, 100);  
        glutInitWindowSize(600, 600);  
        glutCreateWindow("HelloOpenGL");  
        glutDisplayFunc(&mydisplay);  
        glutMainLoop();  
        return 0;  
    }  
    
    效果图.png
    所用到的工具:
    VC6.0
    glut库

    相关文章

      网友评论

          本文标题:(一)VC6.0写第一个OpenGL程序

          本文链接:https://www.haomeiwen.com/subject/qchakftx.html