当前位置: 首页 > wzjs >正文

销售网站怎么做的线上营销渠道主要有哪些

销售网站怎么做的,线上营销渠道主要有哪些,学网站开发看什么书,页面看不到网站在传统相机模拟中,地面通常被建模为一个平面(Plane),这在低空场景下是合理的。但在更大视场范围或远距观察时,地球的曲率不可忽视。因此,我们需要将地面模型从平面升级为球体,并基于球面与光线的…

在传统相机模拟中,地面通常被建模为一个平面(Plane),这在低空场景下是合理的。但在更大视场范围或远距观察时,地球的曲率不可忽视。因此,我们需要将地面模型从平面升级为球体,并基于球面与光线的几何关系判断每个像素是否看到地面或天空,并进行地面贴图映射。

本文将介绍完整的数学推导与 C++ 实现逻辑,适用于任何高度、视角和分辨率的相机建模。

一、模型定义

1.1 地球模型

我们将地球建模为一个完美球体:

  • 地球半径(单位:米):
    R=6371000

  • 地球球心坐标(世界坐标系原点):
    O=(0,0,0)

  • 地面贴图采用等距圆柱投影(Equirectangular projection)

1.2 相机定义

  • 相机位置在球心正上方,高度为H:

  • 相机方向向量(单位向量):

  • 水平方向X、垂直方向Y、视轴方向Z构成相机坐标系:

  • 相机分辨率为 (W, H),视场角为fov。

二、光线生成与交点判断

2.1 像素对应的光线生成

对于每个像素 (i, j),我们将其映射为归一化视场坐标:

  • 水平范围 [-1, 1],垂直范围 [-1, 1]

  • 假设视场角为fov,焦距为:

则该像素对应的相机坐标为:

再通过相机基向量转换为世界方向:

得到从相机发出的世界坐标系下的光线:

2.2 光线与球体求交

地球表面满足球面方程:

将光线代入球面方程,得到一元二次方程:

展开并整理为:

  • :光线未击中地球,像素显示天空

  • :光线击中地球,交点为:

(若 则交点在背后,也认为看向天空)

三、纹理映射(球坐标转二维纹理)

3.1 世界坐标 → 球坐标

交点为:

转换为球坐标(经纬度):

  • 经度(longitude):

  • 纬度(latitude):

3.2 球坐标 → 贴图坐标 (u, v)

将经纬度映射为贴图坐标(归一化到[0, 1]):

四、C++ 实现核心逻辑

cv::Vec3b tracePixelRay(int px, int py, int W, int H, double fov, const cv::Vec3d& camPos, const cv::Vec3d& X, const cv::Vec3d& Y, const cv::Vec3d& Z, const cv::Mat& texture)
{double aspect = double(W) / H;double fx = (W / 2.0) / tan(fov / 2.0);double fy = fx;double x = (px - W / 2.0) / fx;double y = (H / 2.0 - py) / fy;cv::Vec3d dir_cam = cv::normalize(cv::Vec3d(x, y, -1));cv::Vec3d dir_world = cv::normalize(X * dir_cam[0] + Y * dir_cam[1] + Z * dir_cam[2]);// 光线-球面求交double R = 6371000.0;double a = 1.0;double b = 2.0 * camPos.dot(dir_world);double c = camPos.dot(camPos) - R * R;double delta = b * b - 4 * a * c;if (delta < 0) return cv::Vec3b(0, 0, 0); // 天空double t = (-b - sqrt(delta)) / (2 * a);if (t <= 0) return cv::Vec3b(0, 0, 0); // 相机后方// 计算交点cv::Vec3d P = camPos + t * dir_world;double theta = atan2(P[1], P[0]);double phi = acos(P[2] / R);double u = (theta + CV_PI) / (2 * CV_PI);double v = phi / CV_PI;int tex_u = u * texture.cols;int tex_v = v * texture.rows;tex_u = std::clamp(tex_u, 0, texture.cols - 1);tex_v = std::clamp(tex_v, 0, texture.rows - 1);return texture.at<cv::Vec3b>(tex_v, tex_u);
}

五、主循环调用

cv::Mat render(int W, int H, double fov_rad, double height, const cv::Vec3d& D_view, const cv::Mat& texture)
{double R = 6371000.0;cv::Vec3d camPos = cv::Vec3d(0, 0, R + height);cv::Vec3d up = cv::Vec3d(0, 1, 0);cv::Vec3d Z = -cv::normalize(D_view);cv::Vec3d X = cv::normalize(up.cross(Z));cv::Vec3d Y = Z.cross(X);cv::Mat img(H, W, CV_8UC3);for (int j = 0; j < H; ++j){for (int i = 0; i < W; ++i){img.at<cv::Vec3b>(j, i) = tracePixelRay(i, j, W, H, fov_rad, camPos, X, Y, Z, texture);}}return img;
}

总结

通过将地面建模为球体并结合光线-球面交点分析,我们能够精确判断每一条视线是否击中地球,实现真实地面与天空的分界。同时,利用等距圆柱投影将地球纹理映射到图像,完成完整可视化。这种方法可广泛应用于卫星成像模拟、导引头视场渲染、地球可视仿真等场景。

http://www.dtcms.com/wzjs/395943.html

相关文章:

  • 镜像网站是如何做的站长工具ip地址
  • 湘潭网站建设公司百度旗下推广平台有哪些
  • 网络平台开展职业培训网站建设营销推广方案包括哪些内容
  • 优化网站浏览量怎么看seo客服
  • 沙井网站开发网络运营是做什么的
  • 沈阳做网站优化的公司哪家好搜索引擎关键词优化
  • 医院网站设计与实现软件外包公司有前途吗
  • 广东石油化工建设集团公司网站培训机构需要什么资质
  • 高端网站建设内容百度免费推广方法
  • 北京大型网站制作公司seo网站推广目的
  • 表格网站怎么做防控措施持续优化
  • 淮南家政网站建设地址seo投放营销
  • 网站主机方式seo网站设计工具
  • 东坑镇做网站谷歌seo排名优化服务
  • 新乡网站建设-中国互联西安seo网站优化
  • 电脑手机网站相互跳转优化网站快速排名软件
  • 凡科做的网站手机版长尾关键词挖掘工具爱网站
  • 做赚钱的网站拼多多关键词优化是怎么弄的
  • 能进封禁网站的手机浏览器沈阳seo顾问
  • 西南城乡建设部网站首页seo排名优化推广报价
  • 制作钓鱼网站深圳十大网络推广公司排名
  • 卡密网站怎么做的b站推广网站入口mmm
  • 用手机做服务器做网站bt磁力搜索
  • 免费网站建设特色网站建设找哪家公司好
  • 做白日梦的哪个网站发外链的平台有哪些
  • 日本做的视频网站有哪些问题吗建站平台在线提交功能
  • 怎么做网站教程++用的工具汕头百度推广公司
  • asp.net 手机网站开发网址导航怎样推广
  • 网站建设基本步骤百度网站流量统计
  • 网站首页排名seo搜索优化网络推广协议