OpenGL蓝宝书学习日记(1)—— 配置OpenGL环境与创造第一个三角形

一、安装VS

VS有众多版本,本人使用的是VS2017,在官网即可下载,有为学生专门提供的免费版,注册账号登陆后即可无限试用。

二、安装库文件

参考博客:https://blog.csdn.net/humanbeng/article/details/47905823
源代码下载地址:http://www.openglsuperbible.com/previous-editions/
freeglut-3.0.0 下载地址:http://freeglut.sourceforge.net/
glew-1.13.0 下载地址:http://glew.sourceforge.net/
GLTools 下载地址:https://github.com/HazimGazov/GLTools

(1)freeglut

打开vs2017,项目名字改为freeglut,新建项目-windows桌面向导,类型选择动态链接库(dll),勾上空项目。
解压freeglut,拷贝解压目录下的include和src两个目录到我们创建的freeglut vs工程目录下,如果不知道在哪儿可以右这样。
右击工程里的“头文件”-添加-现有项,选中include/GL的4个.h头文件,确定添加
右击工程里的“源文件”-添加-现有项,选中src下的所有fg_开头的.c和.h源文件(有一个gles_stubs.c的文件一定记得不要添加进去),确定添加
右击工程里的“源文件”-添加-现有项,选中src\mswin下的所有的.c源文件,确定添加
右击工程里的“源文件”-添加-现有项,选中src\util下的所有的源文件,确定添加
在include/GL目录下新建一个config.h的文件,右击工程里的“头文件”-添加-现有项,导入新建的文件,并添加内容#include “util/xparsegeometry_repl.h”
右击工程-属性-配置属性-C/C+±常规-附加包含目录,增加两个路径:(直接在刚刚打开的文件夹,进入include,复制,如图)
然后复制这个路径,在后面加入\GL,即最后添加了两个路径:XX\Include XX\Include\GL
右击工程-属性-配置属性-C/C+±预处理器-预处理器定义,添加下面几个定义:

_CRT_SECURE_NO_WARNINGS
HAVE_CONFIG_H
WINVER=0x0500
_WIN32_WINNT=0x0500

最后生成解决方案,在Debug里可以找到lib和dll文件,注意是在打开文件夹的上层文件夹的Debug目录下。

把freeglut.lib拷贝到系统C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\lib
把 freeglut\include下的所有文件拷贝到系统C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include
把freeglut.dll拷贝到系统C:\Windows\SysWOW64(Win7系统)或者C:\Windows\System32(XP系统

(2)glew
glew可以在网上下载到dll和lib,安装方法见网上,大同小异,就是放文件放到指定位置

(3)GLTools
打开vs2017,新建静态库,同样是空项目,取名为gltools。同样解压gltools,把src和include放到和(1)相同的位置,即用(1)的方法打开的位置(不是放在(1)的目录下)。
添加include下的所有的.h头文件
添加src下的所有的源文件 同(1)
右击工程-属性-配置属性-C/C+±预处理器-预处理器定义,添加定义:

_CRT_SECURE_NO_WARNINGS

右击工程-属性-配置属性-库管理器-常规-附加依赖项,添加如下三个lib:
glew32.lib
glew32s.lib
opengl32.lib
最后生成解决方案,在Debug找到lib文件
把gltools.lib拷贝到系统C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\lib
把gltools\include下的所有文件拷贝到系统C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include

三 第一个OpenGL文件

新建-windows桌面向导-控制台应用程序,空项目勾上。
右键源文件-添加新建项-cpp文件,名字随意
最上方项目-属性-链接器-输入-附加依赖项-编辑,添加上:
glew32s.lib
freeglut.lib
gltools.lib

最后附上代码和自己理解的注释

//在一个蓝色的背景下画三角形

#include<GLTools.h>
#include<GLShaderManager.h>

#include<gl/glut.h>

GLBatch triangleBatchl;
GLShaderManager shadermanager;
void changeSize(GLsizei w, GLsizei h)
{
glViewport(0, 0, w, h);//前两个参数代表屏幕左下位置,后两个代表宽度和高度
}

void SetupRc() {
glClearColor(0.60f, 0.40f, 0.70f, 1);//设置窗口擦除的颜色

//存储着色器shadermanager.InitializeStockShaders();
//三角形坐标数组
GLfloat vVerts[] =
{-0.5f,0.0,0.0f,0.5f,0.0f,0.0f,0.0f,0.5f,0.0f
};
//画三角形
triangleBatchl.Begin(GL_TRIANGLES, 3);
triangleBatchl.CopyVertexData3f(vVerts);
triangleBatchl.End();

}
void RenderScene()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);//清除各种缓存
//使用着色器
GLfloat vRed[] = { 1.0f,0.0f,0.0f,1.0f };
shadermanager.UseStockShader(GLT_SHADER_IDENTITY, vRed);
triangleBatchl.Draw();

//将后台渲染图像交换到前台
glutSwapBuffers();

}

int main(int argc, char *argv[])
{

// 设置当前工作目录 window系统可不必  gltSetWorkingDirectory(argv[0]);
glutInit(&argc,argv); //初始化glut库
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH | GLUT_STENCIL); //设置窗口模式 双缓存|RGBA颜色模式|深度测试缓冲区|模板缓冲区glutInitWindowSize(800, 600);//窗口大小
glutCreateWindow("第一个三角形");//窗口标题glutReshapeFunc(changeSize); //注册消息循环和回调函数
glutDisplayFunc(RenderScene);//检测glut的初始化
GLenum err = glewInit();
if (GLEW_OK != err)
{fprintf(stderr, "Glew Error:%s\n", glewGetErrorString(err));return 1;
}//调用SetupRC(RC代表渲染环境) 在任何OpenGL函数起作用前都必须创建一个渲染环境
SetupRc();
//开始主消息循环
glutMainLoop();
return 0;

}
‘最终效果如图:

OpenGL蓝宝书学习日记(1)—— 配置OpenGL环境与创造第一个三角形相关推荐

  1. OpenGL蓝宝书第五版,VS2012环境配置,亲测可用。

    下载OpenGL所需的包,并解压好.链接http://download.csdn.net/download/ewtab/10241388 1.配置freeglut 将freeglut--include ...

  2. OpenGL蓝宝书学习系列(一):3D图像的基础知识

    本博客仅做本人学习笔记之用,欢迎指教,然不喜勿喷 //========================================================================= ...

  3. OpenGL蓝宝书第九章学习笔记:片段着色器和帧缓存

    前言 本篇在讲什么 OpenGL蓝宝书第九章学习笔记之片段着色器和帧缓存 本篇适合什么 适合初学OpenGL的小白 本篇需要什么 对C++语法有简单认知 对OpenGL有简单认知 最好是有OpenGL ...

  4. OpenGL蓝宝书源码学习(准备工作)

    一边看书一边整理归纳是一个非常高效的学习方法,写此博文的目的也是我学习的一种方法,闲话少说,进入正题. 一.glut,glew,gltools的简单介绍 1.GLUT 代表OpenGL实用工具,在Wi ...

  5. OpenGL蓝宝书第七章:立体天空和纹理折射、双纹理(下)

    对照了蓝宝书,才知道红宝书的长处. reflect函数的原理在红宝书中有说明,仅仅有对照了红宝书,才知道红宝书的定位:高级工具书. 蓝宝书作为入门级书籍,以较快的速度让读者敲到代码去思考,总遗留了须要 ...

  6. OpenGL蓝宝书源码学习(五)第三章——Blending.cpp

    颜色混合源码实例,此程序使用透明度来实现可以在白色背景上来回移动的半透明红色的幻觉,并且移动过程中实现了有其他色块颜色混合的效果. 此实例是在Move.cpp示例程序基础上编写的,所以这里只贴出新增的 ...

  7. OpenGL蓝宝书源码学习(二十三)第七章——MultiTexture多重纹理

    在上一节CubeMap的基础上新增了一个纹理贴图实现多重纹理. // MultiTexture.cpp // OpenGL SuperBible // Demonstrates applying a ...

  8. OpenGL蓝宝书源码学习(二十)第六章——Dissolve

    侵蚀着色器渲染图元,呈现腐蚀效果的源码示例. // Dissolve.cpp // OpenGL SuperBible // Demonstrates discard fragment command ...

  9. OpenGL蓝宝书源码学习(十)第五章——纹理的应用、Mip贴图、各项异性过滤和纹理压缩基础

    一.纹理应用 1.纹理坐标 我们是通过为每个顶点指定一个纹理坐标而直接在几何图形上进行纹理贴图的.纹理坐标要么是指定为着色器的一个属性,要么通过算法计算出来.纹理贴图中的纹理单元是作为一个更加抽象的纹 ...

最新文章

  1. JQuery获取元素文档大小、偏移和位置和滚动条位置的方法集合
  2. Java之URLEncoder和URLDecoder类使用小记
  3. 2021-05-08 docker  拷贝东西到镜像,和拷贝到宿主机
  4. js屏蔽浏览器(IE和FireFox)的刷新和右键等功能
  5. 在落雨的鼓浪屿打着伞到处走走找个地方坐坐
  6. 在python中使用什么函数进行输出_Python中使用pprint函数进行格式化输出的教程
  7. 发布水晶报表时需要在服务器进行如下操作
  8. 将美化进行到底,把 PowerShell 做成 oh-my-zsh 的样子
  9. sed 、awk用法
  10. python--unicode汉字编码表实现汉字输出
  11. 基于multisim的fm调制解调_基于SDR的FM调制与解调器的实现
  12. win10如何做到在指定目录下打开cmd命令窗口
  13. js 拉勾网效果_js仿拉勾网首页穿墙广告效果
  14. Pythonic的Python向量夹角余弦值计算
  15. 向下兼容性格什么意思_成大事者都有一种高段位能力:向下兼容
  16. js date日期格式化
  17. html代码向左居右对齐
  18. java怎么修改支付宝步数_支付宝怎么修改运动步数 刷步数方法
  19. 成功解决:1136 - Column count doesn‘t match value count at row 1
  20. PCIe扫盲——TLP Header详解(一)

热门文章

  1. 人和机器的视觉体验:为什么人工智能
  2. python datetime模块-Python datetime模块使用方法小结
  3. 5款细节拉满的电脑软件
  4. 贵阳大数据交易所 交易额突破一亿元
  5. GitHub 热榜:一款让黑客们都爱不释手的开源工具!
  6. Pycharm安装教程-2023
  7. 首长,Redis 性能优化十三条军规立好了,请过目~
  8. 微信公众号迁移:办理公证书时如何扫脸验证?
  9. 中国最顶尖半导体产业链公司名单
  10. 日本半导体行业衰落的原因分析