首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >three.js javascript/raycasting代码与视网膜显示macs不兼容

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

Stack Overflow用户
提问于 2015-03-02 23:58:02
回答 1查看 1.2K关注 0票数 3

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

cubes.html

该代码在Firefox、Safari和Chrome的非视网膜macbook中工作,但在带有视网膜显示器的macs中不起作用。

Mac电脑: macbook视网膜显示器,imac视网膜显示器,macbook 2011 (无视网膜显示器)都在运行Yosemite

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-03 17:24:35

renderer.setSize()中,渲染器的domElement或画布按照像素比进行缩放。

代码语言:javascript
复制
renderer.setPixelRatio( window.devicePixelRatio );
renderer.setSize( window.innerWidth, window.innerHeight );
container.appendChild( renderer.domElement );

然后,在交互式立方体示例中,规范化鼠标坐标设置如下:

代码语言:javascript
复制
mouse.x = ( event.clientX / renderer.domElement.width ) * 2 - 1;
mouse.y = - ( event.clientY / renderer.domElement.height ) * 2 + 1;

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

请注意,在交互粒子示例中,归一化鼠标坐标的计算是不同的,并且没有问题。

代码语言:javascript
复制
mouse.x = ( event.clientX / window.innerWidth ) * 2 - 1;
mouse.y = - ( event.clientY / window.innerHeight ) * 2 + 1;

作为一种解决办法,使用第二种模式。

我们可能需要重新考虑在未来版本的库中如何处理设备像素比。

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

代码语言:javascript
复制
mouse.x = ( event.clientX / renderer.domElement.clientWidth ) * 2 - 1;
mouse.y = - ( event.clientY / renderer.domElement.clientHeight ) * 2 + 1;

three.js r.70

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28821669

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档