我在想我的球体的纹理是否被正确应用,是否可以通过某种方式进行偏移?我正在尝试通过提供纬度/经度并转换为笛卡尔坐标系中的xyz坐标,在悉尼放置一个盒子。然而,盒子的位置不正确。我的猜测是由于原始图像是墨卡托地图,当它被应用到球体上时,纬度/经度中心点不正确。
下面的代码是最小可重现示例。
可重现代码
下面的代码是最小可重现示例。
- 我正在加载地球图像并将其应用到球体(半径= 400)。
- 然后我提供了悉尼,澳大利亚的纬度/经度(33.8688,-151.2093)并将其转换为弧度。
- 将纬度/经度转换为笛卡尔坐标系中的xyz(取自:https://dev59.com/LnM_5IYBdhLWcg3w4nfb#1185413)
- 将一个盒子移动并推送到该位置。
![Output](https://istack.dev59.com/WsfrG.webp)
var img;
var theta = 0;
var r = 400;
function preload() {
img = loadImage('https://eoimages.gsfc.nasa.gov/images/imagerecords/79000/79765/dnb_land_ocean_ice.2012.3600x1800.jpg');
}
function setup() {
createCanvas(1600, 1200, WEBGL);
}
function draw() {
background(0);
rotateY(theta);
theta += 0.01;
texture(img);
sphere(r);
//Sydney, Australia Latitude/Longtidue
var lat = radians(33.8688);
var lon = radians(151.2093);
//cartesian coordinates
var x = r * Math.cos(lat) * Math.cos(lon);
var y = r * Math.cos(lat) * Math.sin(lon);
var z = r * Math.sin(lat);
push();
translate(x, y, z);
fill(255);
box(100, 10, 10);
pop();
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/0.5.16/p5.js"></script>