《OpenGL编程指南》一第2章 着色器基础

第2章 着色器基础

本章目标
阅读完本章内容之后,你将会具备以下能力:
区分OpenGL创建图像所用的不同类型的着色器。
使用OpenGL着色语言构建和编译着色器。
使用OpenGL中提供的多种机制将数据传入着色器。
使用高级GLSL着色技巧来创建可复用性更强的着色器。
本章将介绍如何在OpenGL中使用可编程着色器(shader)。首先介绍OpenGL着色语言(OpenGL Shading Language,通常也称作GLSL),然后详细解释着色器将如何与OpenGL应用程序交互。
这一章将会包含以下几节:
2.1节将会介绍OpenGL应用程序中经常用到的可编程图形着色器。
2.2节将会详细解释OpenGL可编程管线的每个阶段。
2.3节将会介绍OpenGL着色语言。
2.4节将会介绍如何构建着色器变量,以及它们是如何与应用程序或者在阶段之间共享的。
2.5节将会介绍将GLSL着色器转换为可编程着色器程序的过程,然后你就可以在OpenGL应用程序中使用它了。
2.6节将会介绍一种增加着色器可用性的方法,它可以在不用重新编译着色器的前提下选择执行某个子程序。
2.7节将介绍如何使用多个着色器的元素组合为单一的、可配置的图形管线。

时间: 2024-11-05 14:52:27

《OpenGL编程指南》一第2章 着色器基础的相关文章

《OpenGL编程指南(原书第9版)》——导读

前言 OpenGL图形系统是图形硬件的一种软件接口(GL表示Graphics Library,即图形库).它使得用户可以创建交互式的程序以产生运动的三维对象的颜色图像.通过OpenGL,我们可以使用计算机图形学技术产生逼真的图像,或者通过一些虚构的方式产生虚拟的图像.这本指南将告诉你如何使用OpenGL图形系统进行编程,得到你所期望的视觉效果. 本书的主要内容 本书中包含以下章节: 第1章对OpenGL可以完成的工作进行了概览.它还提供了一个简单的OpenGL程序并解释了一些本质性的编程细节,它

《OpenGL编程指南》一导读

前言 Preface OpenGL图形系统是图形硬件的一种软件接口(GL表示Graphics Library,即图形库).它使得用户可以创建交互式的程序以产生运动的3维对象的颜色图像.通过OpenGL,我们可以使用计算机图形学技术来产生逼真的图像,或者通过一些虚构的方式产生虚拟的图像.这本指南将告诉你如何使用OpenGL图形系统进行编程,得到你所期望的视觉效果. 目 录 第1章 OpenGL概述1.1 什么是OpenGL1.2 初识OpenGL程序 1.3 OpenGL语法1.4 OpenGL渲

《opengl编程指南》第八版 例题都不能编译运行

问题描述 <opengl编程指南>第八版 例题都不能编译运行 所有例题都出现下面这几个错误.好像是库的问题,但不知道那个库,该怎么办 解决方案 1>------ 已启动生成: 项目: Triangles, 配置: Debug Win32 ------ 1>freeglut_static_vs2010_d.lib(freeglut_init.obj) : error LNK2019: 无法解析的外部符号 sscanf,该符号在函数 _glutInit 中被引用 1>freegl

《OpenGL编程指南(原书第9版)》——3.4 OpenGL的绘制命令

3.4 OpenGL的绘制命令 大部分OpenGL绘制命令都是以Draw这个单词开始的.绘制命令大致可以分为两个部分:索引形式和非索引形式的绘制.索引形式的绘制需要用到绑定GL_ELEMENT_ARRAY_BUFFER的缓存对象中存储的索引数组,它可以用来间接地对已经启用的顶点数组进行索引.另一方面,非索引的绘制不需要使用GL_ELEMENT_ARRAY_BUFFER,只需要简单地按顺序读取顶点数据即可.OpenGL当中,最基本的非索引形式的绘制命令就是glDrawArrays().void g

《OpenGL编程指南(原书第9版)》——2.3 OpenGL着色语言概述

2.3 OpenGL着色语言概述 本节将会对OpenGL中着色语言的使用进行一个概述.GLSL具备了C++和Java的很多特性,它也被OpenGL所有阶段中使用的着色器所支持,尽管不同类型的着色器也会有一些专属特性.我们首先介绍GLSL的需求.类型,以及其他所有着色阶段所共有的语言特性,然后对每种类型的着色器中的专属特性进行讨论.2.3.1 使用GLSL构建着色器 我们将在这里介绍如何创建一个完整的着色器. 从这里出发 一个着色器程序和一个C程序类似,都是从main()函数开始执行的.每个GLS

《OpenGL编程指南》一2.3 OpenGL着色语言概述

2.3 OpenGL着色语言概述 本节将会对OpenGL中着色语言的使用进行一个概述.GLSL具备了C++和Java的很多特性,它也被OpenGL所有阶段中使用的着色器所支持,尽管不同类型的着色器也会有一些专属特性.我们首先介绍GLSL的需求.类型,以及其他所有着色阶段所共有的语言特性,然后对每种类型的着色器中的专属特性进行讨论. 2.3.1 使用GLSL构建着色器 从这里出发 一个着色器程序和一个C程序类似,都是从main()函数开始执行的.每个GLSL着色器程序一开始都如下所示: 这里的//

《OpenGL编程指南(原书第9版)》——第3章 3.0OpenGL绘制方式

第3章 3.0OpenGL绘制方式 本章目标 阅读完本章内容之后,你将会具备以下的能力: 辨别所有OpenGL中可用的渲染图元. 初始化和设置数据缓存,用于几何体的渲染. 使用多实例渲染(instanced rendering)等高级技法对渲染进行优化. OpenGL的主要作用就是将图形渲染到帧缓存当中.为了实现这一要求,需要将复杂的物体分解成图元的形式(包括点.线,以及三角形),当它们的分布密度足够高时,就可以表达为2D以及3D物体的形态.OpenGL中包含了很多渲染这类图元的函数.这些函数允

《OpenGL编程指南(原书第9版)》——2.5 着色器的编译

2.5 着色器的编译 OpenGL着色器程序的编写与C语言等基于编译器的语言非常类似.我们使用编译器来解析程序,检查是否存在错误,然后将它翻译为目标代码.然后,在链接过程中将一系列目标文件合并,并产生最终的可执行程序.在程序中使用GLSL着色器的过程与之类似,只不过编译器和链接器都是OpenGL API的一部分而已. 图2-1给出了创建GLSL着色器对象并且通过链接来生成可执行着色器程序的过程. 对于每个着色器程序,我们都需要在应用程序中通过下面的步骤进行设置. 对于每个着色器对象: 1)创建一

《OpenGL编程指南(原书第9版)》——2.1 着色器与OpenGL

2.1 着色器与OpenGL 现代OpenGL渲染管线严重依赖着色器来处理传入的数据.如果不使用着色器,那么用OpenGL可以做到的事情可能只有清除窗口内容了,可见着色器对于OpenGL的重要性.在OpenGL 3.0版本以前(含该版本),或者如果你用到了兼容模式(compatibility prof?ile)环境,OpenGL还包含一个固定功能管线(f?ixed-function pipeline),它可以在不使用着色器的情况下处理几何与像素数据.从3.1版本开始,固定功能管线从核心模式中去除