快捷搜索: 王者荣耀 脱发

屏幕映射以及四个变换的代码实现

1 屏幕映射

裁剪空间向屏幕空间的映射 裁剪空间:z∈[-1,1],前截面是-1.后截面是1 屏幕空间: z∈[0,1],前截面是0,后截面是1;

2 方法(GPU自动完成)

1 z方向上的变化

2 XOY平面的变化

  1. 平移
  2. 比例
  3. 反向平移

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);
经验分享 程序员 微信小程序 职场和发展