文章 2017-09-04 来自:开发者社区

《OpenGL编程指南(原书第9版)》——2.6 着色器子程序

2.6 着色器子程序 高级技巧GLSL允许我们在着色器中定义函数,而这些函数的调用过程总是静态的。如果需要动态地选择调用不同的函数,那么可以创建两个不同的着色器,或者使用if语句来进行运行时的选择,如例2.5所示。例2.5 静态着色器的控制流程 着色器子程序在概念上类似于C语言中的函数指针,它可以实现动态子程序选择过程。在着色器当中,可以预先声明一个可用子程序的集合,然后动态地指定子程序的类型。....

文章 2017-09-04 来自:开发者社区

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

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

文章 2017-09-04 来自:开发者社区

《OpenGL编程指南(原书第9版)》——2.4 数据块接口

2.4 数据块接口 着色器与应用程序之间,或者着色器各阶段之间共享的变量可以组织为变量块的形式,并且有的时候必须采用这种形式。uniform变量可以使用uniform块,输入和输出变量可以使用in和out块,着色器的存储缓存可以使用buffer块。它们的形式都是类似的。首先了解一下uniform块的写法,第一个变量是匿名数据表,第二个是有名称的数据表。 各种类型的块接口的详细介绍如下文所示。综.....

文章 2017-09-04 来自:开发者社区

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

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

文章 2017-09-04 来自:开发者社区

《OpenGL编程指南(原书第9版)》——2.2 OpenGL的可编程管线

2.2 OpenGL的可编程管线 第1章已经对OpenGL的渲染管线进行了一个概要的介绍,其中我们简述了着色器自身的运行机制,但是并没有讲解第一个例子当中所用到的简单着色器代码的含义。现在将更加详细地介绍它的每个阶段以及其中所承载的工作。4.5版本的图形管线有4个处理阶段,还有1个通用计算阶段,每个阶段都需要由一个专门的着色器进行控制。1)顶点着色阶段(vertex shading stage)....

文章 2017-09-04 来自:开发者社区

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

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

文章 2017-09-04 来自:开发者社区

《OpenGL编程指南(原书第9版)》——第2章 2.0着色器基础

第2章 2.0着色器基础 本章目标阅读完本章内容之后,你将会具备以下能力:区分OpenGL创建图像所用的不同类型的着色器。使用OpenGL着色语言构建和编译着色器。使用OpenGL中提供的多种机制将数据传入着色器。使用高级GLSL着色技巧来创建可复用性更强的着色器。本章将介绍如何在OpenGL中使用着色器(shader)。首先介绍OpenGL着色语言(OpenGL Shading Languag....

文章 2017-09-04 来自:开发者社区

《OpenGL编程指南(原书第9版)》——1.5 第一个程序:深入分析

1.5 第一个程序:深入分析 现在我们来深入探讨一下之前的第一个程序。1.5.1 进入main()函数为了了解示例程序从一开始是如何运行的,首先了解一下main()函数当中都发生了什么。前面的6行使用GLFW设置和打开了一个渲染用的窗口。这方面的详细介绍可以参见附录A,这里只介绍每一行的执行结果。 第一个函数glfwtInit()负责初始化GLFW库。它会处理向程序输入的命令行参数,并且移除其中....

文章 2017-09-04 来自:开发者社区

《OpenGL编程指南(原书第9版)》——1.4 OpenGL渲染管线

1.4 OpenGL渲染管线 OpenGL实现了我们通常所说的渲染管线(rendering pipeline),它是一系列数据处理过程,并且将应用程序的数据转换到最终渲染的图像。图1-2所示为OpenGL 4.5版本的管线。自从OpenGL诞生以来,它的渲染管线已经发生了非常大的改变。OpenGL首先接收用户提供的几何数据(顶点和几何图元),并且将它输入到一系列着色器阶段中进行处理,这些阶段包括....

文章 2017-09-04 来自:开发者社区

《OpenGL编程指南(原书第9版)》——1.3 OpenGL语法

1.3 OpenGL语法 正如你可能已经了解的,OpenGL库中所有的函数都会以字符“gl”作为前缀,然后是一个或者多个大写字母开头的词组,以此来命名一个完整的函数(例如glBindVertexArray())。OpenGL的所有函数都是这种格式。在上面的程序中你还看到了以“glfw”开头的函数,它们来自第三方库GLFW,这是一个抽象化窗口管理和其他系统任务的开发库。与之类似,你也会看到某个名为....

本页面内关键词为智能算法引擎基于机器学习所生成,如有任何问题,可在页面下方点击"联系我们"与我们沟通。