我一直在测试对 Three.js 的移动支持,并在涉及 setSize 函数和多个视图时发现了一个怪癖。这是场景。
在 Chrome for Android (29.0.1547.59) 中的 Nexus 7 (Android OS 4.3) 上加载webgl_multiple_views示例时,整个渲染窗口未对齐,如此屏幕截图所示。
起初我怀疑与 setViewport 相关的问题,但在进一步检查后确定该WebGLRenderer.js
函数setSize
正试图通过乘以 devicePixelRatio 来纠正 WebGL 画布上下文大小,如下所示:
_canvas.width = width * this.devicePixelRatio;
_canvas.height = height * this.devicePixelRatio;
对我来说,这似乎是一个完全合理的方法,但这里的问题是,对于某些 Android 设备,系统似乎已经隐含了计算,从而导致了一个倾斜的场景。
我发现通过暗示默认像素比为1可以纠正问题,但我预计它可能会破坏许多行为正常的移动设备。如果您愿意,这是“修复”:
renderer = new THREE.WebGLRenderer( { antialias: true, alpha: false, devicePixelRatio: 1 } );
我的问题是,有没有其他人遇到过这种情况?有没有人对通常缩放画布上下文有更一致的修复,以便它尊重设备像素比,但不会破坏某些 android 设备?
感谢您提供任何建议/帮助。