Java raycasting引擎Floorcasting地板纹理不随视角滚动异常
Java射线投射渲染器地板不随视角移动问题
问题描述
- 基于Java开发射线投射(Raycaster)渲染器,目前已实现地板的正确纹理映射,但存在视角移动时地板静止的异常:在投影场景中移动相机时,地板画面始终保持固定,仅墙体可按预期随相机位置同步位移,暂未定位问题根源。
- *地板投射(Floorcasting)*模块的绝大多数逻辑参考公开射线投射教程编写,移植代码时做了少量简化,部分逻辑使用伪代码表述。
- 曾尝试为
tileX、tileY变量叠加玩家位置偏移,例如编写tileX += player.x类逻辑,但最终渲染出的地板滚动速度远高于正常值,效果完全错误。
相关实现代码
for every ray: ... // 上方为墙体渲染相关逻辑 int start = (int)(wallY + wallHeight + 1); double directionCos = cos(rad(ray.getAngle())); double directionSin = sin(rad(ray.getAngle())); int textureDim = 16; for (int y = start; y < screenHeight; y++) { double distance = screenHeight / (2.f * y - screenHeight); distance /= cos(rad(player.getAngle()) - rad(ray.getAngle())); // 参考源码逻辑为将玩家x、y坐标叠加到tileX、tileY变量上,但尝试该操作时纹理完全错乱 double tileX = distance * directionCos; double tileY = distance * directionSin; int textureX = Math.floorMod((int)(tileX * textureDim), textureDim); int textureY = Math.floorMod((int)(tileY * textureDim), textureDim); int rgb = floorTexture.getRGB(textureX, textureY); projectionFloor.setRGB((int)wallX, y, rgb); }
效果参考
- 静态场景下地板纹理渲染正确:

- 故障表现:移动视角时地板完全静止,仅墙体同步移动:

- 直接叠加玩家位置偏移后的异常效果:

内容的提问来源于stack exchange,提问作者Joshua Crotts
相关产品推荐
相关产品推荐

