这系列文章是我学习Youtube上一套OpenGL教程的笔记,自己对教程的案例重新制作并且做了一定程度的修改(更有条理,且修正了一些问题)。后续将持续更新。

Visual Studio 2017工程

教程使用的是visual studio 2012,我电脑上装的是visual studio 2017。

  1. 先创建一个Visual C++ Win32 Console Application,命名为GraphicsPad,放在C:\Grphics目录下,不要勾选Create directory for solution 和 Add to source control,下一步。
  2. 取消勾选Precompiled header和Security Development Lifecycle(SDL) checks,下一步。
  3. 创建好工程以后在Solution Explorer中删除掉没用的Filter(像文件夹那样的东西): Header Files, Resource Files, Source Files
  4. 在C:\Graphics目录下添加Middleware文件夹

Qt

这套教程比较特别,使用的是Qt作为窗口库,其他教程一般使用win32+GLFW。

教程上使用的是Qt libraries 4.8.5  for Windows(VS2010)。我下载的5.6.3 - 32位。下载地址:http://download.qt.io/archive/qt/5.9/5.9.3/,选择的是 qt-opensource-windows-x86-5.9.3.exe。下载好以后安装在C:盘根目录。

在官网的下载链接里下载的版本已经不区分MinGW和MSVC版本了,会在安装时选择版本,这种情况需要在安装好的目录里找一下msvc文件夹。

  1. 在C:\Graphics\MiddleWare中创建Qt文件夹,在其中创建3个子文件夹:bin,include,lib.
  2. 从C:\Qt\Qt5.6.3\5.6.3\msvc2015\bin 文件夹中拷贝四个文件到C:\Graphics\MiddleWare\Qt\bin中,分别是:Qt5Cored.dll,Qt5Guid.dll,Qt5OpenGLd.dll,Qt5Widgetsd.dll(教程中使用的4.x版本不需要最后一个widgets,但实验发现5.x是需要这个dll的)
  3. 把C:\Qt\Qt5.6.3\5.6.3\msvc2015\include文件夹中的所有内容都拷贝到C:\Graphics\MiddleWare\Qt\include中。虽然不是全部都要需要用,但是逐个找出来太麻烦,就全部拷进来。
  4. 从C:\Qt\Qt5.6.3\5.6.3\msvc2015\lib中拷贝四个文件到 C:\Graphics\Middleware\Qt\lib,分别是: Qt5Cored.lib,Qt5Guid.lib,Qt5OpenGLd.lib,Qt5Widgetsd.lib

GLEW

C:\Graphics\Middleware\下创建glew文件夹,其中创建include, lib文件夹。具体的编译方法在其他文章里已经介绍过多次了,这里略过

GLM

下载qlm库,地址:https://glm.g-truc.net/,这个库不需要编译,是个纯头文件库,下载后解压在C:\Graphics\Middleware\glm文件夹里就行了

设置工程属性

  1. 在GraphicsPad工程上右键,属性。
  2. General > Intermediate Directory 设置 $(Configuration)\Tmp\
  3. C/C++ > General > Additional Include Directories 添加$(ProjectDir), $(ProjectDir)..\Middleware\Qt\include, $(ProjectDir)..\Middleware\glew\include, $(ProjectDir)..\Middleware\glm
  4. Linker > General > Additional Library Directories 添加 $(ProjectDir)..\Middleware\Qt\lib, $(ProjectDir)..\Middleware\glew\lib
  5. Linker > Input > Additional Dependencies 添加 Qt5Cored.lib,Qt5Guid.lib,Qt5OpenGLd.lib,Qt5Widgetsd.lib,opengl32.lib, glew32.lib(更新:opengl32.lib一定要写上,不然容易导致各种问题。glew32.lib名称根据自己生成的glew的lib文件名字调整。另外,也可以根据需求包含Qt5Core.lib, Qt5Gui.lib, Qt5OpenGL.lib,Qt5Widgets.lib这几个Release版本的lib文件)
  6. 拷贝C:\Graphics\Middleware\Qt\bin中的所有dll文件到C:\Graphics\Debug 目录下
  7. 在工程中添加类MyGlWindow
    1. //MyGlWindow.h文件
    2.  
    3. #pragma once
    4. #include <QtOpenGL\qgl.h>
    5. class MyGlWindow:public QGLWidget
    6. {
      public:
    7. };
    1. //MyGlWindow.cpp文件
    2.  
    3. #include "MyGlWindow.h"
  8. 添加Cpp文件Mainer,添加代码:

    1. #include <QtWidgets\qapplication.h>
    2. #include <MyGlWindow.h>
    3.  
    4. int main(int argc, char* argv[])
    5. {
    6. QApplication app(argc, argv);
    7. MyGlWindow myWindow;
    8. myWindow.show();
    9.  
    10. return app.exec();
    11. }
  9. 编译运行,可以打开一个黑色的空白窗口。

3D Computer Grapihcs Using OpenGL - 01 环境设置的更多相关文章

  1. 3D Computer Grapihcs Using OpenGL - 19 Vertex Array Object(顶点数组对象)

    大部分OpenGL教程都会在一开始就讲解VAO,但是该教程的作者认为这是很不合理的,因为要理解它的作用需要建立在我们此前学过的知识基础上.因此直到教程已经进行了一大半,作者才引入VAO这个概念.在我看 ...

  2. 3D Computer Grapihcs Using OpenGL - 17 添加相机(旋转)

    在11节我们说过,MVP矩阵中目前只应用了两个矩阵,World to View 矩阵被省略了,这就导致我们的画面没有办法转换视角. 本节我们将添加这一环节,让相机可以旋转. 为了实现这一目的,我们添加 ...

  3. 3D Computer Grapihcs Using OpenGL - 14 OpenGL Instancing

    如果我们需要绘制两个(或者多个)一样的立方体(或者物体),只是位置.缩放.旋转不一样,那么我们可以不需要多次将这个物体的顶点信息.颜色信息等发送到显卡,而是发送一次,绘制多次,仅仅是每次绘制之前应用不 ...

  4. 3D Computer Grapihcs Using OpenGL - 11 Model View Projection Matrices

    本节我们将绘制一个3维物体,立方体. 如果要渲染3D物体,我们需要了解MVP(Model View Projection),它表示三个转换矩阵.实际上这个名字不够明确,更加确切的释义如下: Model ...

  5. 3D Computer Grapihcs Using OpenGL - 10 Color Buffer

    本节我们将尝试利用三角形制作一个“走马灯”效果. 一个三角形如图示方式,从左向右依次移动. 先看一下代码: MyGlWindow.cpp #include <gl\glew.h> #inc ...

  6. 3D Computer Grapihcs Using OpenGL - 09 Enable Depth Test

    启用Depth Test OpenGL是个3D绘图API,也就是说不只有xy坐标轴,还有第三个坐标轴z,z轴的方向是垂直于屏幕,指向屏幕内. 靠近人眼的方向是负方向,标准化设备坐标的最小值是-1, 最 ...

  7. 3D Computer Grapihcs Using OpenGL - 06 Vertex and Fragment Shaders

    从这里就接触到了可编程图形渲染管线. 下面介绍使用Vertex Shader (顶点着色器)和 Fragment Shader(像素着色器)的方法. 我们的目标是使用这两个着色器给三角形填充绿色. 添 ...

  8. 3D Computer Grapihcs Using OpenGL - 05 EBO

    本节将采用两种方法绘制两个三角形. 先看第一种方法的代码 MyGlWindow.cpp #include <gl\glew.h> #include "MyGlWindow.h&q ...

  9. 3D Computer Grapihcs Using OpenGL - 03 OpenGL Buffer Data

    本节绘制一个三角形,并讲解Buffer Object-缓冲对象 OpenGL的窗口坐标 屏幕中心为坐标原点,横向朝右为x正方向,纵向朝上为y正方向,最大值最小值分别为1,-1. Buffer Obje ...

随机推荐

  1. 使用原生js 获取用户访问项目的浏览器类型

    想要获取浏览器的类型很简单,网上提供了很多方法,但是看过之后,都是根据浏览器内核来判断是ie,谷歌,火狐,opeara的, 所以不能进一步判断在国内使用的主流浏览器类型,比如360,百度,搜狐浏览器等 ...

  2. CSS中BFC规则

    何为BFC BFC(Block formatting context)直译为"块级格式化上下文".它是一个独立的渲染区域,只有Block-level box参与, 它规定了内部的B ...

  3. java通过正则进行语法分析实现表达式的逻辑判断和复杂计算实现

    首先功能展示: 相关功能实现,实现功能类似js,弱语言类型: 1.核销语法解析使用正则校验和匹配实现处理,每一行是一个完整表达式 2.有系统变量使用,内置的变量可直接获取值进行相关逻辑和条件计算 3. ...

  4. TestCase维护和思维导图

    在软件整个生命周期中,测试应该尽早地开始,因为测试对象不只是程序,还有文档和数据,所以针对需求分析说明书.概要设计和详细设计说明书,测试如何快速理解项目需求,进行下一步的工作呢? 本人觉得,如果只是看 ...

  5. hive中的索引创建

    1.在hive中创建索引所在表 create table if not exists h_odse.hxy(id int,name string,hobby array<string>,a ...

  6. 三、JVM — 类加载过程

    类加载过程 加载 验证 准备 解析 初始化 类加载过程 Class 文件需要加载到虚拟机中之后才能运行和使用,那么虚拟机是如何加载这些 Class 文件呢? 系统加载 Class 类型的文件主要三步: ...

  7. CQRS框架(nodejs的DDD开发落地框架)初识感想

    CQRS是啥?DDD又是啥? 这两个概念其实没什么神秘的,当然此文章中的这两个概念以曾老师的课程为准(关于CQRS和DDD的标准概念,google上已经很多了,不再赘述.) DDD(Domain Dr ...

  8. winform 窗体间传值

    WinForm 两窗体之间传值实例 2010-12-27 22:10:11|  分类: 学业|举报|字号 订阅     下载LOFTER我的照片书  |     窗体Form1和Form2 Form2 ...

  9. 【nginx】上传文件error报413 Request Entity Too Large

    nginx配置增大上传文件限制 如果访问地址是通过nginx转发配置的 server{ ... ... client_max_body_size 50M; ... ... } ingress配置增大上 ...

  10. 锚点定位且不改变url地址

    锚点定位且不改变url html 事件触发<li v-for="(item,index) in couponsList.swaps" :key="index&quo ...