1
0
mirror of https://github.com/LearnOpenGL-CN/LearnOpenGL-CN.git synced 2025-08-23 04:35:28 +08:00

Update 09 Camera.md

This commit is contained in:
Meow J
2016-02-18 18:03:04 +08:00
parent 2b7f99f85b
commit b89a3732f4

View File

@@ -16,7 +16,7 @@
![](http://learnopengl.com/img/getting-started/camera_axes.png)
#### 1.摄像机位置
#### 1. 摄像机位置
获取摄像机位置很简单。摄像机位置简单来说就是世界空间中代表摄像机位置的向量。我们把摄像机位置设置为前面教程中的那个相同的位置:
@@ -28,7 +28,7 @@ glm::vec3 cameraPos = glm::vec3(0.0f, 0.0f, 3.0f);
不要忘记正z轴是从屏幕指向你的如果我们希望摄像机向后移动我们就往z轴正方向移动。
#### 2.摄像机方向
#### 2. 摄像机方向
下一个需要的向量是摄像机的方向,比如它指向哪个方向。现在我们让摄像机指向场景原点:(0, 0, 0)。用摄像机位置向量减去场景原点向量的结果就是摄像机指向向量。由于我们知道摄像机指向z轴负方向我们希望方向向量指向摄像机的z轴正方向。如果我们改变相减的顺序我们就会获得一个指向摄像机正z轴方向的向量(译注:注意看前面的那个图,所说的「方向向量/Direction Vector」是指向z的正方向的而不是摄像机所注视的那个方向)
@@ -41,7 +41,7 @@ glm::vec3 cameraDirection = glm::normalize(cameraPos - cameraTarget);
方向向量(Direction Vector)并不是最好的名字,因为它正好指向从它到目标向量的相反方向。
#### 3.右轴(Right axis)
#### 3. 右轴(Right axis)
我们需要的另一个向量是一个**右向量(Right Vector)**它代表摄像机空间的x轴的正方向。为获取右向量我们需要先使用一个小技巧定义一个**上向量(Up Vector)**。我们把上向量和第二步得到的摄像机方向向量进行叉乘。两个向量叉乘的结果就是同时垂直于两向量的向量因此我们会得到指向x轴正方向的那个向量(如果我们交换两个向量的顺序就会得到相反的指向x轴负方向的向量)
@@ -50,7 +50,7 @@ glm::vec3 up = glm::vec3(0.0f, 1.0f, 0.0f);
glm::vec3 cameraRight = glm::normalize(glm::cross(up, cameraDirection));
```
#### 4.上轴(Up axis)
#### 4. 上轴(Up axis)
现在我们已经有了x轴向量和z轴向量获取摄像机的正y轴相对简单我们把右向量和方向向量(Direction Vector)进行叉乘:
@@ -482,4 +482,4 @@ glfwSetScrollCallback(window, scroll_callback);
- 看看你是否能够变换摄像机类从而使得其能够变- 成一个**真正的**FPS摄像机(也就是说不能够随意飞行)你只能够呆在xz平面上: [参考解答](http://www.learnopengl.com/code_viewer.php?code=getting-started/camera-exercise1)
- 试着创建你自己的LookAt函数使你能够手动创建一个我们在一开始讨论的观察矩阵。用你的函数实现来替换glm的LookAt函数看看它是否还能一样的工作[参考解答](http://www.learnopengl.com/code_viewer.php?code=getting-started/camera-exercise2)
- 试着创建你自己的LookAt函数使你能够手动创建一个我们在一开始讨论的观察矩阵。用你的函数实现来替换glm的LookAt函数看看它是否还能一样的工作[参考解答](http://www.learnopengl.com/code_viewer.php?code=getting-started/camera-exercise2)