《计算机图形学 第四版》学习笔记
GLUT如何安装。
在计算机图形学中介绍了什么是GLUT,其中第一个程序也正是基于GLUT编写的,那如何安装GLUT呢。费了老大劲。。
当我打开GLUT的官网的时候提示说GLUT已经不被支持超过20年了,现在的年轻人都用FreeGLUT。GLUT已经是很古老的东西了,而FreeGLUT却一直被维护,两者作为方便新手入门的初学者工具包,其函数都是一样的,因此可以使用FreeGLUT来入门学习。
下载FreeGLUT
如果使用搜索引擎的话,可能会找到各种各样的下载链接和版本,而最开始也特别容易下载到一些源码版本不知所措,这里我们直接下载编译好的版本:
https://www.transmissionzero.co.uk/software/freeglut-devel/
找到Download freeglut 3.0.0 for MinGW (with PGP signature and PGP key),点击下载即可。
这个版本的是带有编译好的dll和lib以及头文件的版本,如果你下载的是源码版的话还需要手动编译,我被这一步劝退了好多次。
安装(放置头文件)
由于我们下载的是MinGW版本,因此lib里将会是.a结尾的文件,这些文件可以被MinGW所解析。如果你下载的是MSVC版本的FreeGLUT,那lib目录下会是.lib结尾的文件。
FreeGLUT目录如下:
- bin
- x64
- freeglut.dll
- freeglut.dll
- x64
- include
- GL
- freeglut.h
- freeglut_ext.h
- freeglut_std.h
- glut.h
- GL
- lib
- x64
- libfreeglut.a
- libfreeglut_static.a
- libfreeglut.a
- libfreeglut_static.a
斜体的是目录,其他的是文件
- x64
可以看到bin和lib都有一个子目录x64,x64目录下的是64位的文件,而和x64同级的则是32位的文件。
复制路径
bin目录下文件
bin目录下的文件分别复制到C:\Windows\System32(32位复制到这里)和C:\Windows\SysWOW64(64位复制到这里)
include目录下文件
include目录下的文件(可以直接复制GL这个文件夹)复制到C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.13.26128\include这个目录下(其他的VS版本类比该目录即可)
lib目录下文件
如果下载的是MinGW版本,即lib目录下的文件是.a结尾的文件,则复制到C:\MinGW\lib
如果下载的是MSVC版本,即lib目录下的文件是.lib结尾的文件,则复制到C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.13.26128\lib
结束啦,可以验证了。。
下面的程序绘制了一条二维线段
#define NDEBUG
#include "gl/freeglut.h"
#include <Windows.h>
#include <cstdlib>
#include <cstdio>
#include <cmath>
void init()
{
glClearColor(1.0, 1.0, 1.0, 0); // 指定背景颜色
glMatrixMode(GL_PROJECTION); // 设置投影模式
gluOrtho2D(0.0, 200.0, 0.0, 150.0); // 设定坐标系的x范围和y范围
}
void lineSegmet()
{
glClear(GL_COLOR_BUFFER_BIT); // 指定使用颜色缓存
glColor3d(0.0, 0.4, 0.2);
glBegin(GL_LINES);
glVertex2i(180, 15);
glVertex2i(10, 145);
glEnd();
glFlush();
}
int main(int argc, char **argv)
{
glutInit(&argc, argv); // 初始化glut窗口
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); // 设定显示窗口的缓存和颜色模型
glutInitWindowPosition(50, 100); // 决定窗口左上角离屏幕左上角的位置
glutInitWindowSize(400, 300); // 设定窗口大小
glutCreateWindow("The Hello World Window!"); // 窗口名
init();
glutDisplayFunc(lineSegmet);
glutMainLoop();
return 0;
}