OpenGL + Visual Studio

一、下载Visual Studio

可以使用社区版本:官网下载

二、下载OpenGL工具包

官网下载
freeglut下载

三、配置GLUT工具包

1. 将下载的工具包解压
在这里插入图片描述
2. 将解压后的相关文件复制到对应路径中,配置glut库文件
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
该配置建立项目时候需要在项目->管理NuGet中搜索nupengl并下载才能实现

四、配置FreeGLUT

1. 将下载的FreeGLUT解压
在这里插入图片描述
2. 配置FreeGLUT工具包

(1)将解压后D:\计算机图形与图像\freeglut-MSVC-3.0.0-2.mp\freeglut\include\GL中的GL文件夹复制到D:\Program Files (x86)\Microsoft Visual
Studio\2019\Community\VC\Tools\MSVC\14.24.28314\include中的include文件夹中,如图所示
在这里插入图片描述
(2)将路径D:\计算机图形与图像\freeglut-MSVC-3.0.0-2.mp\freeglut\lib下的freeglut.lib文件复制到路径D:\Program Files (x86)\Microsoft Visual
Studio\2019\Community\VC\Tools\MSVC\14.24.28314\lib下的x86和x64文件中,如图所示:在这里插入图片描述
(3)将路径D:\计算机图形与图像\freeglut-MSVC-3.0.0-2.mp\freeglut\bin下的freeglut.dll文件复制到C:\Windows下的System32和SysWOW64文件夹中

在这里插入图片描述

五、运行程序

创建项目:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

代码:

#include <GL/glut.h>
#include <math.h>
void setCube(void) {
    glClearColor(1.0, 1.0, 1.0, 0.0);
    glClear(GL_COLOR_BUFFER_BIT);
    glColor3f(0, 0, 0);//设置黑色
    glLoadIdentity();//加载单位矩阵
    gluLookAt(6, 0, 2.5, 0, 0, 0, 1, 1, 0);
    //前三个参数设置观察者的观察位置,中三个参数设置观察点的位置,后三个参数设置观察者的观察方向
    glLineWidth(2.0f);//设置边的像素宽,默认为1.0f
    glutWireCube(2.0);
    glFlush();
}
void drawCube(void) {
    glClearColor(1.0, 1.0, 1.0, 0.0);
    glClear(GL_COLOR_BUFFER_BIT);
    glLoadIdentity();
    gluLookAt(4, 0, 1.5, 0, 0, 0, 1, 1, 0);
    //绘制正方体的面
    glColor3f(0, 1, 0);
    glBegin(GL_QUADS);
    //---1---
    glNormal3f(-1, 0, 0);//设置点的法向量
    glVertex3f(0.5, 0.5, 0.5);
    glVertex3f(0.5, -0.5, 0.5);
    glVertex3f(0.5, -0.5, -0.5);
    glVertex3f(0.5, 0.5, -0.5);
    //---2---
    glNormal3f(-1, 0, 0);
    glVertex3f(-0.5, 0.5, 0.5);
    glVertex3f(-0.5, -0.5, 0.5);
    glVertex3f(-0.5, -0.5, -0.5);
    glVertex3f(-0.5, 0.5, -0.5);
    //---3---
    glNormal3f(0, 1, 0);
    glVertex3f(0.5, 0.5, 0.5);
    glVertex3f(-0.5, 0.5, 0.5);
    glVertex3f(-0.5, 0.5, -0.5);
    glVertex3f(0.5, 0.5, -0.5);
     //---4---
    glNormal3f(0, -1, 0);
    glVertex3f(0.5, -0.5, 0.5);
    glVertex3f(-0.5, -0.5, 0.5);
    glVertex3f(-0.5, -0.5, -0.5);
    glVertex3f(0.5, -0.5, -0.5);
    //---5---
    glNormal3f(0, 0, 1);
    glVertex3f(0.5, 0.5, 0.5);
    glVertex3f(-0.5, 0.5, 0.5);
    glVertex3f(-0.5, -0.5, 0.5);
    glVertex3f(0.5, -0.5, 0.5);
    //---6---
    glNormal3f(0, 0, -1);
    glVertex3f(0.5, 0.5, 0.5);
    glVertex3f(-0.5, 0.5, 0.5);
    glVertex3f(-0.5, -0.5, 0.5);
    glVertex3f(0.5, -0.5, 0.5);
    glEnd();
    //draw
    glColor3f(0, 0, 0);
    glLineWidth(2.0f);
    //绘制正方体的边
    glBegin(GL_LINES);
    //---1---
    glVertex3f(0.5, 0.5, 0.5);
    glVertex3f(-0.5, 0.5, 0.5);
    glVertex3f(-0.5, 0.5, 0.5);
    glVertex3f(-0.5, -0.5, 0.5);
    glVertex3f(-0.5, -0.5, 0.5);
    glVertex3f(0.5, -0.5, 0.5);
    glVertex3f(0.5, -0.5, 0.5);
    glVertex3f(0.5, 0.5, 0.5);
    //---2---
    glVertex3f(0.5, 0.5, -0.5);
    glVertex3f(-0.5, 0.5, -0.5);
    glVertex3f(-0.5, 0.5, -0.5);
    glVertex3f(-0.5, -0.5, -0.5);
    glVertex3f(-0.5, -0.5, -0.5);
    glVertex3f(0.5, -0.5, -0.5);
    glVertex3f(0.5, -0.5, -0.5);
    glVertex3f(0.5, 0.5, -0.5);
    //---3---
    glVertex3f(0.5, 0.5, 0.5);
    glVertex3f(0.5, -0.5, 0.5);
    glVertex3f(0.5, -0.5, 0.5);
    glVertex3f(0.5, -0.5, -0.5);
    glVertex3f(0.5, -0.5, -0.5);
    glVertex3f(0.5, 0.5, -0.5);
    glVertex3f(0.5, 0.5, -0.5);
    glVertex3f(0.5, 0.5, 0.5);
    //---4---
    glVertex3f(-0.5, 0.5, 0.5);
    glVertex3f(-0.5, -0.5, 0.5);
    glVertex3f(-0.5, -0.5, 0.5);
    glVertex3f(-0.5, -0.5, -0.5);
    glVertex3f(-0.5, -0.5, -0.5);
    glVertex3f(-0.5, 0.5, -0.5);
    glVertex3f(-0.5, 0.5, -0.5);
    glVertex3f(-0.5, 0.5, 0.5);
    glEnd();
    glFlush();
}
void threeD(int w, int h) {
    glViewport(0, 0, (GLsizei)w, (GLsizei)h);//调整视图窗口大小
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glFrustum(-1.0, 1.0, -1.0, 1.0, 2.0, 10.0);
    glMatrixMode(GL_MODELVIEW);
    }
    int main(int argc, char* argv[]) {int main(int argc, char* argv[]) {
    //初始化GLUT library
    glutInit(&argc, argv);
     //对窗口的大小进行初始化
    glutInitWindowSize(500, 500);
    // 设置窗口出现的位置
    //glutInitWindowPosition(int x, int y);
    //初始化程序展示模式
    glutInitDisplayMode(GLUT_RGBA);
    glutCreateWindow("project of openGL");
    //为当前窗口设置函数回调,用于画图
        glutDisplayFunc(drawCube);
    //窗口改变时的函数
    glutReshapeFunc(threeD);
    glutMainLoop();
   return 0;
}

结果:
在这里插入图片描述

六、参考文献

1.计算机图形学
2.FreeGult配置简介
3.代码学习

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐