You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JS光线投射游戏开发中C++&、>>运算符等效实现咨询

位运算符说明

  • & 是按位与运算符,将两个操作数的二进制对应位进行与运算,只有两位都为1时结果位才为1。你给出的代码中该操作用于纹理坐标的快速取模,仅当texWidth为2的幂时生效,效率远高于普通取模运算。
  • >> 是有符号右移运算符,将操作数的二进制位整体向右移动指定位数,正数场景下等价于除以2并向下取整。你给出的代码中右移1位是为了将RGB三个通道的亮度统一减半,实现变暗效果。

JavaScript 等效代码

JavaScript 原生支持上述两个位运算符,行为和C基本一致,仅需要处理C中(int)强制类型转换的逻辑即可:

// 第一行:(int)强制转换在JS中可以用 |0 实现截断浮点数为整数的效果,和C++行为一致
const tx = (texWidth * (floorX - cellX) | 0) & (texWidth - 1);

// 第二行可以直接复用,无需修改
color = (color >> 1) & 8355711;

补充说明

代码中8355711对应的十六进制为0x7F7F7F,二进制为每个RGB通道保留低7位、清零最高位,避免右移时高位溢出污染相邻通道的数值。如果你的项目需要保留颜色的alpha通道,可以改为以下写法:

// 保留原有alpha通道不变,仅变暗RGB通道
color = (color & 0xFF000000) | ((color >> 1) & 0x007F7F7F);

内容的提问来源于stack exchange,提问作者mbg206

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 16:06:05