javascript - 像均匀的方形瓷砖一样绘制球体
问题描述
我正在尝试在 WebGL 中绘制球体,但我无法理解如何在 y 方向上进行迭代以使正方形看起来均匀。
我相信这个函数可能是对数的?我一直在研究 WGS84,但我无法掌握答案,但我敢打赌,有人确切地知道 Google 地图是如何创建球体的。
我正在用最简单的方法绘制一个球体,极坐标逻辑在 y 轴上。由于我使用的是极坐标逻辑,因此 y 方向是统一的,这会导致矩形的形状从 -90 变为 0,再从 0 变为 90:
function setGeometry () {
let vertices = []
for (let j = 0; j <= devisionCount; j++) {
let lat = j * Math.PI / devisionCount
let lat2 = (j + 1) * Math.PI / devisionCount
for (let i = 0; i <= (devisionCount * 2); i++) {
let lon = i * (Math.PI * 2) / (devisionCount * 2)
let lon2 = (i + 1) * (Math.PI * 2) / (devisionCount * 2)
vertices.push(radiusWide * Math.sin(lon) * Math.sin(lat)) // X
vertices.push(radiusTall * Math.cos(lat)) // Y
vertices.push(radiusWide * Math.cos(lon) * Math.sin(lat)) // Z
vertices.push(radiusWide * Math.sin(lon) * Math.sin(lat2)) // X
vertices.push(radiusTall * Math.cos(lat2)) // Y
vertices.push(radiusWide * Math.cos(lon) * Math.sin(lat2)) // Z
vertices.push(radiusWide * Math.sin(lon2) * Math.sin(lat)) // X
vertices.push(radiusTall * Math.cos(lat)) // Y
vertices.push(radiusWide * Math.cos(lon2) * Math.sin(lat)) // Z
}
}
gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(vertices), gl.STATIC_DRAW)
return vertices.length
}
注意:显然我可以在这里做一个三角形条,但我正在做三角形,所以我的片段着色器更容易快速展示我正在努力的东西。
我在一个领域的尝试:
我正在尝试复制的内容(仔细查看白线,并注意到当我们接近两极时它保持接近矩形。
解决方案
推荐阅读
- python - 从 selenium 过滤返回的信息
- asp.net - ASP.NET Web API + async + EF6.2:关闭数据库连接前的长时间延迟
- matplotlib - 如何避免在具有多个系列的 3D 散点图中对颜色图数据进行归一化
- oracle - 在带有 Oracle 11g 64 位安装的 Windows 64 位服务器中安装 Oracle ODBC 32 位驱动程序
- javascript - 引导自动完成输入下拉菜单未显示
- django - 使用 postgres 在 AWS 上部署的 django 项目 - 如何创建数据库
- libreoffice - 在 Libreoffice Calc 中插入文件引用
- airflow - 气流:让另一个实例等到当前运行
- python - Grerory-Leibnitz 在 python 上的系列函数 - 例如。8.3 来自 The Coder's Apprentice
- ios - Native camera(通过 UIImagePicker 调用相机)的质量如何更改为 4K?