Display scene at lower resolution in three.js

人走茶凉 提交于 2019-12-22 07:10:22

问题


I am looking for a way to display a three.js viewport at half resolution (or double size depending on how you look at it).

Three.js documentation states that

[Y]ou can also give setSize smaller values, like window.innerWidth/2 and window.innerHeight/2, for half the resolution. This does not mean that the game will only fill half the window, but rather look a bit blurry and scaled up.

The actual result, however, is that the viewport is sclaed to half size.

This jsfiddle shows the non-expected behaviour.

Looking at the API there is a setSize and a setViewport method, but neither allows me to have a scaled up viewport.

There is a question and answer here on SO that gives one way of doing it with CSS, but I am looking for a non-CSS related way if possible.


回答1:


2pha's answer is correct and has been implemented in threejs with the setPixelRatio() method, so you can write even fewer lines. The main interest with this method is that is is consistent with the window property window.devicePixelRatio as recalled in a comment.

This is an important feature to add to your boilerplate if you care about mobile / tablet devices. In your HTML header you should have this meta tag : <meta name='viewport' content='width=device-width'/>.

  • If you do not have this tag your innerWidth and innerHeight values will be bigger than your device needs, creating a bigger framebuffer and that can reduce your framerate.
  • But at this opposite if you do have this tag, without setting the pixel ratio, your framebuffer will then be too small... CSS pixel vs screen pixel story.

That is why you add this line in javascript

renderer.setPixelRatio( window.devicePixelRatio );

It needs the setSize to be called after :

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



回答2:


Not sure if there is a better way but you could scale the dom element right after it has been added.

var renderer = new THREE.WebGLRenderer();
renderer.setSize( window.innerWidth / 2, window.innerHeight / 2 );
document.body.appendChild( renderer.domElement );
renderer.domElement.style.width = renderer.domElement.width * 2 + 'px';
renderer.domElement.style.height = renderer.domElement.height * 2 + 'px';

https://jsfiddle.net/x4p3bcua/4/

Though this is still doing it via css in a round about way.



来源:https://stackoverflow.com/questions/31407778/display-scene-at-lower-resolution-in-three-js

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!