<commit_before>---
layout:     post
title:      "OpenGL Teapot"
subtitle:   "OpenGL Dev Environment Setup"
date:       2016-05-15 12:00:00
author:     "Caedmom"
header-img: "img/in-post/default-bg.jpg"
tags:
    - Computer Graphics
    - OpenGL
---


## 0. OpenGL开发环境简介

基于OpenGL标准开发的应用程序运行时需有动态链接库OpenGL32.DLL、Glu32.DLL，这两个文件在
安装Windows NT时已自动装载到C：\WINDOWS\SYSTEM32目录下(这里假定用户将Windows NT安装
在C盘上)。OpenGL的图形库函数封装在动态链接库OpenGL32.DLL中，开发基于OpenGL的应用程序，
必须先了解OpenGL的库函数。OpenGL函数命令方式十分有规律，每个库函数均有前缀gl、glu、
aux，分别表示该函数属于OpenGL基本库、实用库或辅助库。Windows NT下的OpenGL包含了100多
个核心函数，均以gl作为前缀，同时还支持另外四类函数：
    OpenGL实用库函数：43个，以glu作为前缀；
    OpenGL辅助库函数：31个，以aux作为前缀；
    Windows专用库函数(WGL)：6个，以wgl作为前缀；
    Win32API函数(WGL)：5个，无前缀。

另外网友反馈：如果是用C#的话，用OpenTK比较好。而且glut都老的不像样了。应该用glew +
glfw。现在要用OpenGL4，才能发挥显卡的性能，效果。

## 1. 安装GLUT工具包
GLUT不是OpenGL所必须的，但它会给我们的学习带来一定的方便，推荐安装。
Windows环境下的GLUT下载： glutdlls37beta.zip（附件暂未上传）

GLUT代表OpenGL应用工具包，英文全称为OpenGL Utility Toolkit，是一个和窗口系统无关的
软件包，它由<NAME>在SGI时写的。作为AUX库的功能更强大的替代品，用于隐藏不同窗口
系统API的复杂性。是一个学习OpenGL编程的一个良好开端。

## 2. VS环境配置
将下载的压缩解压，将得到5个文件（glut.dll, glut32.dll, glut.lib, glut32.lib,glut.h）
(1) 把glut.h复制到x:\Program Files\Microsoft Visual Studio 10.0\VC\include\gl
文件夹中,如果没有gl这个文件夹则可以自己新建一个。（x是你安装VS的盘符号）
(2) 把解压得到的glut.lib和glut32.lib放到静态函数库所在文件夹（即与include并排的lib
文件夹下）。
(3) 把解压得到的glut.dll和glut32.dll放到操作系统目录下面的system32文件夹内。
（典型的位置为：C:\Windows\System32）,64位系统请将glut32.dll放到
C:\Windows\SysWOW64目录下。
* （注：如在开发应用程序时用到OpenGL辅助库函数，则还需下载相应动态链接库，包含glaux.dll,
 glaux.lib, glaux.h，相应步骤同上）

---
 
## 3. 第一个OpenGL程序
首先创建工程，其步骤如下：
(1) 创建一个Win32 Console Application。
(1) 链接OpenGL libraries。在Visual C++中先右击项目，选择属性，找到连接器标签，最后在
输入中的附加依赖库加上opengl32.lib glut32.lib glu32.lib.

![img](/img/in-post/20160622teapot/teapot-project-attributes.jpg)

* 添加依赖的链接库（英文分号隔开）

![img](/img/in-post/20160622teapot/input-add-libs.jpg)

* 现在你可以把下面的例子拷贝到工程中去，编译运行。你可以看到一个绿色的teapot。

![img](/img/in-post/20160622teapot/teapot.jpg)

<pre><code>
'c++'
#include "stdafx.h"
#include<gl/glut.h>
void init(void)
{
	glEnable(GL_DEPTH_TEST);
<commit_msg>c++-code<commit_after>---
layout:     post
title:      "OpenGL Teapot"
subtitle:   "OpenGL Dev Environment Setup"
date:       2016-05-15 12:00:00
author:     "Caedmom"
header-img: "img/in-post/default-bg.jpg"
tags:
    - Computer Graphics
    - OpenGL
---


## 0. OpenGL开发环境简介

基于OpenGL标准开发的应用程序运行时需有动态链接库OpenGL32.DLL、Glu32.DLL，这两个文件在
安装Windows NT时已自动装载到C：\WINDOWS\SYSTEM32目录下(这里假定用户将Windows NT安装
在C盘上)。OpenGL的图形库函数封装在动态链接库OpenGL32.DLL中，开发基于OpenGL的应用程序，
必须先了解OpenGL的库函数。OpenGL函数命令方式十分有规律，每个库函数均有前缀gl、glu、
aux，分别表示该函数属于OpenGL基本库、实用库或辅助库。Windows NT下的OpenGL包含了100多
个核心函数，均以gl作为前缀，同时还支持另外四类函数：
    OpenGL实用库函数：43个，以glu作为前缀；
    OpenGL辅助库函数：31个，以aux作为前缀；
    Windows专用库函数(WGL)：6个，以wgl作为前缀；
    Win32API函数(WGL)：5个，无前缀。

另外网友反馈：如果是用C#的话，用OpenTK比较好。而且glut都老的不像样了。应该用glew +
glfw。现在要用OpenGL4，才能发挥显卡的性能，效果。

## 1. 安装GLUT工具包
GLUT不是OpenGL所必须的，但它会给我们的学习带来一定的方便，推荐安装。
Windows环境下的GLUT下载： glutdlls37beta.zip（附件暂未上传）

GLUT代表OpenGL应用工具包，英文全称为OpenGL Utility Toolkit，是一个和窗口系统无关的
软件包，它由<NAME>在SGI时写的。作为AUX库的功能更强大的替代品，用于隐藏不同窗口
系统API的复杂性。是一个学习OpenGL编程的一个良好开端。

## 2. VS环境配置
将下载的压缩解压，将得到5个文件（glut.dll, glut32.dll, glut.lib, glut32.lib,glut.h）
(1) 把glut.h复制到x:\Program Files\Microsoft Visual Studio 10.0\VC\include\gl
文件夹中,如果没有gl这个文件夹则可以自己新建一个。（x是你安装VS的盘符号）
(2) 把解压得到的glut.lib和glut32.lib放到静态函数库所在文件夹（即与include并排的lib
文件夹下）。
(3) 把解压得到的glut.dll和glut32.dll放到操作系统目录下面的system32文件夹内。
（典型的位置为：C:\Windows\System32）,64位系统请将glut32.dll放到
C:\Windows\SysWOW64目录下。
* （注：如在开发应用程序时用到OpenGL辅助库函数，则还需下载相应动态链接库，包含glaux.dll,
 glaux.lib, glaux.h，相应步骤同上）

---
 
## 3. 第一个OpenGL程序
首先创建工程，其步骤如下：
(1) 创建一个Win32 Console Application。
(1) 链接OpenGL libraries。在Visual C++中先右击项目，选择属性，找到连接器标签，最后在
输入中的附加依赖库加上opengl32.lib glut32.lib glu32.lib.

![img](/img/in-post/20160622teapot/teapot-project-attributes.jpg)

* 添加依赖的链接库（英文分号隔开）

![img](/img/in-post/20160622teapot/input-add-libs.jpg)

* 现在你可以把下面的例子拷贝到工程中去，编译运行。你可以看到一个绿色的teapot。

![img](/img/in-post/20160622teapot/teapot.jpg)

'c++'
<pre><code>
#include "stdafx.h"
#include<gl/glut.h>
void init(void)
{
	glEnable(GL_DEPTH_TEST);

{'fraction_non_alphanumeric': 0.13009133547272278, 'fraction_numerical': 0.04887682053813873, 'mean_word_length': 6.852713178294573, 'pattern_counts': {'":': 0, '<': 11, '<?xml version=': 0, '>': 11, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '6946771', 'n_tokens_mistral': 2736, 'n_tokens_neox': 2937, 'n_words': 198}