屏幕映射以及四个变换的代码实现
1 屏幕映射
裁剪空间向屏幕空间的映射 裁剪空间:z∈[-1,1],前截面是-1.后截面是1 屏幕空间: z∈[0,1],前截面是0,后截面是1;
2 方法(GPU自动完成)
1 z方向上的变化
2 XOY平面的变化
- 平移
- 比例
- 反向平移
3 四个变化的实现
1 模型变换
理论部分:6.2 三维模型,动起来 实践部分:OpenGL中用模型矩阵model来实现
glm::mat4 model(1);//定义model矩阵 model = glm::translate(model, glm::vec3(0.0f, 0.0f, -3.0f));//平移 model = glm::rotate(model,(float)glfwGetTime(),glm::vec3(0.0f, 1.0f, 0.0f));//旋转 model = glm::scale(model, glm::vec3(0.5, 0.5, 0.5)); //缩
2 视图变换
理论部分:6.3 观察者也能动 实践部分:OpenGL中用视图矩阵view来实现
glm::mat4 view(1); view=glm::lookAt(camera_position ,camera_position+camera_front, camera_up); //glm::LookAt函数的参数分别为一个摄像机位置、目标位置和摄像机上向量。
3 投影变换
理论部分:7.2 规范化的投影变换 实践部分:OpenGL中用视图矩阵projection来实现
glm::mat4 proj =glm::perspective(45.0f, (float)width/(float)height, 0.1f, 100.0f);
4 PVM矩阵
//注意变换的顺序丌能出错,在计算时,是从右往左进行计算
gl_Position = projection * view * model * vec4(aPos, 1.0);