javascript - three.js javascript/raycasting 代码与视网膜显示 mac 不兼容

标签 javascript three.js retina-display raycasting

有没有人解释为什么下面的交互式立方体不能在视网膜显示器 mac 上工作?

http://mrdoob.github.io/three.js/examples/canvas_interactive_cubes.html

该代码适用于非视网膜 macbook 的 Firefox、Safari 和 Chrome,但不适用于具有视网膜显示屏的 mac。

Mac:macbook pro retina display,imac retina display,macbook pro 2011 (no retina display) all running Yosemite

浏览器版本:Firefox 36、Safari 版本 8.0.3 (10600.3.18)、Chrome 版本 40.0.2214.115(64 位)

最佳答案

renderer.setSize() 中,渲染器的 domElement 或 Canvas 按像素比例缩放。

renderer.setPixelRatio( window.devicePixelRatio );
renderer.setSize( window.innerWidth, window.innerHeight );
container.appendChild( renderer.domElement );

然后,在 interactive cubes example ,标准化的鼠标坐标设置如下:

mouse.x = ( event.clientX / renderer.domElement.width ) * 2 - 1;
mouse.y = - ( event.clientY / renderer.domElement.height ) * 2 + 1;

这会导致像素比不等于 1 的设备出现问题。

请注意,在 interactive particles example 中,归一化的鼠标坐标计算方式不同,没有问题。

mouse.x = ( event.clientX / window.innerWidth ) * 2 - 1;
mouse.y = - ( event.clientY / window.innerHeight ) * 2 + 1;

作为变通方法,使用第二种模式。

我们可能不得不重新审视在未来版本的库中如何处理设备像素比。

编辑:@mrdoob 建议采用以下模式作为解决方案:

mouse.x = ( event.clientX / renderer.domElement.clientWidth ) * 2 - 1;
mouse.y = - ( event.clientY / renderer.domElement.clientHeight ) * 2 + 1;

three.js r.70

关于javascript - three.js javascript/raycasting 代码与视网膜显示 mac 不兼容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28821669/

相关文章:

javascript - 如何检测 HTML 页面上的文件拖动

iphone - cocos2d FPS 在视网膜上一半的原因?

javascript - 如何使 THREE.Plane 始终面向相机?

javascript - 使用 THREE.Points() 时出现 TypeError : can't convert undefined to object in Three. js

javascript - Three.js 通过 GUI 打开和关闭对象可见性

iphone - iOS7 应用程序提交 - 只有 2x(视网膜)图像?

javascript - 在react-native中嵌套firestore onSnapshot监听器?

javascript - 使用加密库将 Java AES 加密转换为 Javascript

javascript - 并排响应图像具有相同的高度不同的宽度