Skip to content

Commit

Permalink
update OpenGL
Browse files Browse the repository at this point in the history
  • Loading branch information
CharonChui committed May 28, 2024
1 parent 3d564a7 commit 3012d7c
Showing 1 changed file with 42 additions and 0 deletions.
42 changes: 42 additions & 0 deletions VideoDevelopment/OpenGL/7.OpenGL ES着色器语言GLSL.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,16 @@
## 7.OpenGL ES着色器语言GLSL

### 齐次坐标(Homogeneous coordinates)

三维顶点视为三元组(x,y,z)。现在引入一个新的分量w,得到向量(x,y,z,w)。请先记住以下两点:

若w==1,则向量(x, y, z, 1)为空间中的点。
若w==0,则向量(x, y, z, 0)为方向。

齐次坐标使得我们可以用同一个公式对点和方向作运算。



着色器是使用一种叫GLSL的类C语言写成的。GLSL是为图形计算量身定制的,它包含一些针对向量和矩阵操作的有用特性。

着色器的开头总是要声明版本,接着是输入和输出变量、uniform和main函数。
Expand Down Expand Up @@ -315,6 +326,37 @@ mat3 myMat3 = mat3(1.0, 0.0, 0.0, // 第一列
```


三维图形学中我们只用到4x4矩阵,它能对顶点(x,y,z,w)作变换。这一变换是用矩阵左乘顶点来实现的:

矩阵x顶点(记住顺序!!矩阵左乘顶点,顶点用列向量表示)= 变换后的顶点

![image](https://github.com/CharonChui/Pictures/blob/master/MatrixXVect.gif?raw=true)

这看上去复杂,实则不然。左手指着a,右手指着x,得到ax。 左手移向右边一个数b,右手移向下一个数y,得到by。依次类推,得到cz、dw。最后求和ax + by + cz + dw,就得到了新的x!每一行都这么算下去,就得到了新的(x, y, z, w)向量。


这种重复无聊的计算就让计算机代劳吧。

用C++,GLM表示:
```c++
glm::mat4 myMatrix;
glm::vec4 myVector;
// fill myMatrix and myVector somehow
glm::vec4 transformedVector = myMatrix * myVector; // Again, in this order ! this is important.
```

用GLSL表示:

```glsl
mat4 myMatrix;
vec4 myVector;
// fill myMatrix and myVector somehow
vec4 transformedVector = myMatrix * myVector; // Yeah, it's pretty much the same than GLM
```




- 采样器

采样器是专门用来对纹理进行采样工作的,在GLSL中一般来说,一个采样器变量表示一副或者一套纹理贴图。所谓的纹理贴图可以理解为我们看到的物体上的皮肤。
Expand Down

0 comments on commit 3012d7c

Please sign in to comment.