《交互式计算机图形学 基於OpenGL着色器的自顶向下方法(第6版) 》代码运行问题及其解决

上一篇文章,笔者提到了红宝书第8版的代码编译运行问题,想必大家已经知道我看过红宝书了。

然而,笔者竟然看不懂,这是因为笔者并不知道OpenGL的历史。原来有古代OpenGL和现代OpenGL之分,古代OpenGL使用固定功能管线,现在已经被废弃(尽管还能用),而现代使用可编程管线。

由于笔者在网上搜索一通,见到怎么OpenGL的代码有两种风格,到了现在才搞懂。原来OpenGL在第8版之前都是讲的固定功能管线,到了第8版立即转成了可编程管线。然而红宝书已经认定了你有一定的计算机图形学基础,因此介绍的内容都比较高深,不从基础讲起,导致即使有一定编程和几何基础的笔者也读不懂红宝书。

因此笔者就买了这本《交互式计算机图形学 基於OpenGL着色器的自顶向下方法(第6版) 》来看了,感觉写的非常不错,这本书第6版还新增了一个作者,这个作者正是红宝书的作者Dave。看着跟红宝书简直是完美融合,并且也详尽地解释了OpenGL里面的各个基本术语,这个在红宝书里几乎是一笔带过的。

然而,这本书的代码确实有一定问题的,即使笔者先前已经成功编译过红宝书的代码,然而编译这本书的代码还是折腾了几个小时,下面讲解一下。

先从https://www.cs.unm.edu/~angel/BOOK/INTERACTIVE_COMPUTER_GRAPHICS/SIXTH_EDITION/ 下载该书的代码

笔者仅下载了一部分代码,如图所示

然后新建控制台空项目,笔者将项目命名为e1,如图所示

然后把所需源文件和着色器文件添加进来,并设置编译模式为release,如图所示

然后添加附加包含文件

然后再从https://www.cs.unm.edu/~angel/BOOK/INTERACTIVE_COMPUTER_GRAPHICS/SIXTH_EDITION/  下载库文件,并将windows文件夹名字改为lib,如图所示

添加附加库目录

编译,报错,无法打开文件“freeglut.lib”

然后把libfreeglut.a改名为freeglut.lib,如图所示

编译,扔报错,如图所示

无法解析的外部符号,既有glut的函数又有glew的函数

网上百度了一下,前面带有_imp_的都是静态库,因此笔者在example1.cpp中添加了两个宏,如图所示

编译,仍报错,无法打开文件“freeglut_static.lib”

然后笔者复制freeglut.lib,再改名为freeglut_static.lib,如图所示

编译,仍然报错,但这次仅有glew的问题

修改附加依赖项,添加libglew32.a库,如图所示

编译,成功

把着色器文件放入工程文件所在目录下

编译,发生崩溃,在glewInit()前加入glewExperimental= GL_TRUE;(跟上一篇文章一样)

运行成功。

时间: 2024-11-11 18:59:54

《交互式计算机图形学 基於OpenGL着色器的自顶向下方法(第6版) 》代码运行问题及其解决的相关文章

WebGL中的OpenGL着色器语言

在webgl中,调用了OpenGL-ES-2.0的API,而在OpenGL-ES专为嵌入式设备设计,其和其它设备一样,都是使用GLSL(GL Shading Language)来编写片段程序并执行于GPU的着色器上,来完成对对象的渲染.GLSL在其中起着相当重要的作用,所以要玩好webgl,我们就得把GLSL搞懂,本文主要介绍shader的基础使用及组成. 整个管线处理过程: 1.指定几何对象 1.顶点数组(直接将顶点数据传送至shader里) 2.顶点索引(将顶点数据保存于缓冲区中,用索引来从

OpenGL着色器中原六仔平台搭建程序解析--3D拾取

3D拾取指的是中原六仔平台搭建论坛:haozbbs.com Q1446595067 将鼠标在屏幕上点击的位置匹配到3d游戏场景中的某个图元上,该图元投影到屏幕上的像素恰好就是鼠标点击的像素.3D场景在很多交互情境中有重要作用,使开发者的应用能够将用户的点击对应到场景空间中的物体上.例如:用户可以通过点击选中某个物体或者物体的某一部分进行删除等后续操作.在这个教程中的demo中,我们将渲染几个物体,并且展示如何使用红色标记选中的三角形图元使其突出显示. 为了实现3D拾取,我们将用到第23章阴影贴图

《计算机图形学基础(OpenGL版)》(第1版第2次印刷)勘误表

页码 行数 原内容 更正为 备注 75 8 相对于y轴的反射 相对于x轴的反射 谢谢郑州大学广东小仔指正!          

【OPENGL】第三章 着色器基础(一)

在这一章,我们会学习什么是着色器(Shader),什么是着色器语言(OpenGL Shading Language-GLSL),以及着色器怎么和OpenGL程序交互. 首先我们先来看看什么叫着色器. Shader(着色器)是用来实现图像渲染的,用来替代固定渲染管线的可编程程序. 着色器替代了传统的固定渲染管线,可以实现3D图形学计算中的相关计算,由于其可编程性,可以实现各种各样的图像效果而不用受显卡的固定渲染管线限制.这极大的提高了图像的画质. 在上一篇文章( http://www.cnblog

cocos2d 2.x在opengl es 2.0 下自定义着色器来创建特别酷的特效(译)

cocos2d 2.x在opengl es 2.0 下自定义着色器来创建特别酷的特效(译) (2012-12-24 13:22:17) 转载▼ 标签: it cocos2d opengl 着色器 渲染 翻译:弹涂鱼 PS:欢迎加入开发群:285275050 本文翻译自:http://www.raywenderlich.com/10862/how-to-create-cool-effects-with-custom-shaders-in-opengl-es-2-0-and-cocos2d-2-x#

OpenGL官方教程——着色器语言概述

OpenGL官方教程——着色器语言概述 OpenGL官方教程——着色器语言概述 可编程图形硬件管线(流水线) 可编程顶点处理器 可编程几何处理器 可编程片元处理器 语言 可编程图形硬件管线(流水线) 将 Pertransformed Vertices (每一个待转换顶点) 传人 Programmable Vertex Processor (可编程的顶点处理器) 得到 Transformed Vertices (转换的顶点) 将 Transformed Vertices (转换的顶点) 传入 Pr

OpenGL入门4:着色器 GLSL

本文是个人学习记录,非原创,学习建议看教程 https://learnopengl-cn.github.io/ 非常感谢原作者JoeyDeVries和多为中文翻译者提供的优质教程 近况 在家呆久了真的是咸 前几天检查出下巴骨头出问题了,没什么治疗手段,有点难受,但也想开了 前言 经过之前一段时间的学习(渲染管线简介)我们已经知道了着色器(Shader)是运行在GPU上的小程序,这些小程序为图形渲染管线的某个特定部分而运行,着色器只是一种把输入转化为输出的程序,着色器也是一种非常独立的程序,因为它

[GEiv]第七章:着色器 高效GPU渲染方案

第七章:着色器 高效GPU渲染方案 本章介绍着色器的基本知识以及Geiv下对其提供的支持接口.并以"渐变高斯模糊"为线索进行实例的演示解说. [背景信息] [计算机中央处理器的局限性] 在大学的"数字图像处理"课程中,老师解说了高斯模糊的基本算法.并使用C#进行了基本实现.高斯模糊.简单地说,就是使用高斯权重模板对图像的每个像素进行再计算.填充,以达到模糊的效果. 在课程中.对于给定的模板与模糊度系数,对一副800X600的图像进行模糊处理.须要计算48万个像素点,

[GEiv]第七章:着色器 高效的GPU渲染方案

第七章:着色器 高效的GPU渲染方案 本章介绍着色器的基本知识以及Geiv下对其提供的支持接口,并以"渐变高斯模糊"为线索进行实例的演示讲解. [背景信息] [计算机中央处理器的局限性] 在大学的"数字图像处理"课程中,老师讲解了高斯模糊的基本算法,并使用C#进行了基本实现.高斯模糊,简单地说,就是使用高斯权重模板对图像的每一个像素进行再计算.填充,以达到模糊的效果. 在课程中,对于给定的模板与模糊度系数,对一副800X600的图像进行模糊处理,需要计算48万个像素