观星系统的代码太神奇了
本帖最后由 Cat_Anchor 于 2025-1-29 13:44 编辑今天不写那么多,就简单说一说遇到的神奇问题。
这是观星系统代码的一部分,这个函数是用来将玩家摄像机旋转角度转换成向量的,非常重要。就这么个重要的函数,还能出现一些神奇的现象。
```js
function anglesToDirection(pitch, yaw) {
const pitchRad = (pitch * Math.PI) / 180;
const yawRad = ((yaw + 90) * Math.PI) / 180;
// const dirX = Math.sin(yawRad) * Math.cos(pitchRad);
// const dirY = Math.sin(pitchRad);
// const dirZ = Math.cos(yawRad) * Math.cos(pitchRad);
const dirX = Math.cos(yawRad) * Math.cos(pitchRad);
const dirY = -Math.sin(pitchRad);
const dirZ = Math.sin(yawRad) * Math.cos(pitchRad);
return {
x: dirX,
y: dirY,
z: dirZ
};
}
```
首先是 yawRad 那个地方,如果你问我为什么要给玩家旋转角的 yaw 值(就是偏航角)加上 90 度,那么我的回答是——我也不知道,反正不加的话计算出来的向量就是有问题,就是差 90 度,于是只能加上。
最开始加上 90 度的时候还犯了个低级错误,忘加括号了,结果生成出来的星空球只剩四分之一了。
https://pic1.imgdb.cn/item/6794fe0cd0e0a243d4f7f539.jpg
还有那三行注释掉的代码,那个是我原先用的计算分量的表达式,结果算出来不对,最后发现……不能用 XYZ,要用 ZYX(就是要把计算 X 分量的表达式和 Z 分量的互换一下)。还有那个 Y 分量的负号,为什么要加?我也不知道,但是如果不加,计算出来的向量在 Y 轴分量上就是反的,预期的坐标在头顶,它算出的就在脚下。
所以……就是这么个神奇的东西。现在总算整好了,但是物品数据方面还有问题,它不会记录已经发现的星座。但是时间太晚了,所以留到明天再修。
(我还发现了个好用的语法标签,用这个就能创建出上面那样漂亮的代码块,简直太好用了) 本帖最后由 星空晶体 于 2025-1-25 23:24 编辑
pre 代码块的确好用,但好像有 bug,且你这个帖子好像因为 pre 导致手机端溢出 本帖最后由 芓又又zyew 于 2025-1-25 23:40 编辑
好新的东西
c++写多了,发现看javascript不能条件反射了😫
页: [1]