From c8d3970af66e3a8cf40c0787edf4b91c60e13d25 Mon Sep 17 00:00:00 2001 From: Geequlim Date: Mon, 15 Jun 2015 17:02:06 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E6=9C=AA=E5=AE=8C=E6=88=90?= =?UTF-8?q?=E7=9A=84=E3=80=8AHello=20Triangle=E3=80=8B=E8=BD=AC=E4=BA=A4Co?= =?UTF-8?q?coonshu=E7=BF=BB=E8=AF=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 01 Getting started/04 Hello Triangle.md | 32 ++++++++++++++++++++----- 1 file changed, 26 insertions(+), 6 deletions(-) diff --git a/01 Getting started/04 Hello Triangle.md b/01 Getting started/04 Hello Triangle.md index 38959ef..c2e337a 100644 --- a/01 Getting started/04 Hello Triangle.md +++ b/01 Getting started/04 Hello Triangle.md @@ -6,11 +6,31 @@ --- 由于OpenGL使用的是三维坐标系而我们的屏幕和窗口都是由二维像素组成的,所以OpenGL的一项重要工作就是将三维坐标系转换到二维像素使得我们的屏幕能够显示显示这些数据。将三维坐标转换为二维坐标的过程使用OpenGL的图形渲染管线来管理。图形渲染管线可以被分为两大部分: -1. 将三维坐标系转换为二维的屏幕坐标 -2. 将转换得到的二维坐标中的每一个点转换为具体的像素颜色 + + +* 将三维坐标系转换为二维的屏幕坐标 +* 将转换得到的二维坐标中的每一个点转换为具体的像素颜色 + + 在本教程中我们将简单的讨论OpenGL的渲染管线并使用它来创建一些给力的像素图。 -二维坐标系与像素坐标系有一点不同,一个二维坐标描述的是在二维空间中一个确切点的位置,而一个二维像素是一个由二维坐标和屏幕的分辨率所决定的近似值. + + 小提示 + + 二维坐标系与像素坐标系有一点不同,一个二维坐标描述的是在二维空间中一个确切点的位置,而一个二维像素是一个由二维坐标和屏幕的分辨率所决定的近似值。 + 图形渲染管线将一系列的三维坐标转化为你屏幕中的像素颜色。图形渲染管线可以被分为若干个部分,每一个部分都需要上一部分的输出数据作为其输入数据。所有部分都是高效运行并且可以是同时进行的,由于这一并行的机制,现代的图形处理器(GPU)拥有成千上万个核心通过快速地执行一些小程序来处理渲染管线中每一部分的数据。这些小程序被称为着色器(Shader)。 -许多着色器都允许开发者进行配置,OpenGL允许我们写自己的着色器来替换已经存在的默认着色器。由于着色器程序是使用GPU执行的,这样我们就可以通过书写自己的着色器程序来对渲染进行更加细微的控制,也能减轻CPU的运算量。OpenGL的着色器程序使用GLSL(OpenGL Shading Language)语言编写,我们将在接下来的教程中探索如何使用它。 -下图是对渲染管线流程简介,其中蓝色的部分允许我们编写自己的着色器程序进行控制。 -(img) \ No newline at end of file + +许多着色器都允许开发者进行配置,OpenGL允许我们写自己的着色器来替换已经存在的默认着色器。由于着色器程序是使用GPU执行的,这样我们就可以通过书写自己的着色器程序来对渲染进行更加细微的控制,也能减轻CPU的运算压力。OpenGL的着色器程序使用GLSL(OpenGL Shading Language)语言编写,我们将在接下来的教程中探索如何使用它。 +下图是对渲染管线流程简介,其中蓝色的部分允许我们编写自己的着色器程序。 + +![](http://learnopengl.com/img/getting-started/pipeline.png) + +正如你所看到的,图形渲染管线把顶点数据最终转化为了像素图形。图形渲染管线中包含了许多个部分,每一个部分处理这个转化过程中的一部分特定的工作。我们将简要地为您解释图形渲染管线中重要部分是如何运作的。 + +我们将一组能构成一个三角形的三个三维坐标的数组作为图形渲染管线的输入数据,这组输入数据被称之为顶点数据(Vertex Data),它是许多顶点的集合,每一个顶点都表示三维空间中都一个点。这个顶点数据不止用于表示空间坐标,它还能代表你想输入渲染管线的一切信息。简单起见,我们让每个顶点包含一个顶点的三维坐标和一些颜色值。 + + 小提示: + + 为了让OpenGL知道你的顶点坐标和颜色数据是用来做什么的,OpenGL要求你告诉他你需要用这些顶点数据构成什么图形。我们是想要将传入的顶点数据呈现为一些点还是一些三角形或者只是一组线段?这些给出的渲染类型提示被称之为原型(Primitive),让OpenGL执行任何绘制操作时都需要告诉它我们想要的原型。例如其中一些原型:GL_POINTS, GL_TRIANGLES and GL_LINE_STRIP。 + +渲染管线的第一部分是顶点着色器(Vertex Shader),它每次将一个顶点数据作为输入源。使用顶点着色器的主要目的是将输入的三维空间坐标转换为另一个三维的空间坐标(看似很傻逼的,我们后面再详细讨论这个问题),同时顶点着色器也允许我们对顶点数据数据做一些其他的处理操作。 \ No newline at end of file