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

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);

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是一个简单的 OpenCV C++ 代码示例,用于执行图像投影变换: ```cpp #include <opencv2/opencv.hpp> #include <iostream> using namespace cv; using namespace std; int main() { // 读取输入图像 Mat image = imread("input_image.jpg"); // 定义四个输入点和输出点 Point2f inputQuad[4]; Point2f outputQuad[4]; // 输入四个点(顺序为左上、右上、右下、左下) inputQuad[0] = Point2f(0, 0); inputQuad[1] = Point2f(image.cols - 1, 0); inputQuad[2] = Point2f(image.cols - 1, image.rows - 1); inputQuad[3] = Point2f(0, image.rows - 1); // 输出四个点(顺序为左上、右上、右下、左下) outputQuad[0] = Point2f(0, 0); outputQuad[1] = Point2f(image.cols - 1, 0); outputQuad[2] = Point2f(image.cols * 0.8, image.rows - 1); outputQuad[3] = Point2f(image.cols * 0.2, image.rows - 1); // 计算透视变换矩阵 Mat perspectiveTransform = getPerspectiveTransform(inputQuad, outputQuad); // 应用透视变换 Mat warpedImage; warpPerspective(image, warpedImage, perspectiveTransform, image.size()); // 显示结果 imshow("Input Image", image); imshow("Warped Image", warpedImage); waitKey(); return 0; } ``` 在这个示例中,我们首先读取一个名为 "input_image.jpg" 的图像,然后定义四个输入点和四个输出点,这些点确定了透视变换映射关系。然后,我们使用 `getPerspectiveTransform()` 函数计算变换矩阵,并将其应用于原始图像上。最后,我们将变换后的图像显示在屏幕上。 请注意,这只是一个简单的示例,您可能需要根据您的具体需求进行修改。此外,请确保在使用 OpenCV 时正确设置编译器和库路径。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值