Three.js APIを読み、StackOverflowの質問を読み、firebugとchromeのデバッガーを使用してコードをデバッグし、可能な限りすべてを削除しましたが、それでもこの苛立たしいフルスクリーンエラーが発生します。 、レンダラーのビューポートが画面よりも大きいため、スクロールバーが表示されます。これは、レンダリングやその他の操作に影響を与えない目に見えるエラーです。スクロールバーが表示されずに、使用可能な画面領域と一致するようにビューポートのサイズを制御しようとしています。
私はWindows7でGoogleChrome18を使用しており、Three.js APIを使い始めたばかりですが、過去にOpenGLなどを使用したことがあるため、グラフィックスAPIに慣れていません。
このコードを実行しようとすると(これはgithubメインページに表示されるデフォルトの例です):
var camera, scene, renderer,
geometry, material, mesh;
init();
animate();
function init() {
scene = new THREE.Scene();
camera = new THREE.PerspectiveCamera( 75, window.innerWidth / window.innerHeight, 1, 10000 );
camera.position.z = 1000;
scene.add( camera );
geometry = new THREE.CubeGeometry( 200, 200, 200 );
material = new THREE.MeshBasicMaterial( { color: 0xff0000, wireframe: true } );
mesh = new THREE.Mesh( geometry, material );
scene.add( mesh );
renderer = new THREE.CanvasRenderer();
renderer.setSize( window.innerWidth, window.innerHeight );
document.body.appendChild( renderer.domElement );
}
function animate() {
// note: three.js includes requestAnimationFrame shim
requestAnimationFrame( animate );
render();
}
function render() {
mesh.rotation.x += 0.01;
mesh.rotation.y += 0.02;
renderer.render( scene, camera );
}
うまくレンダリングされ、赤いワイヤーフレームボックスが回転しているのがわかりますが、レンダラーのビューポートが大きすぎて、使用可能な画面サイズよりも大きいため、スクロールバーが表示されます。コードはとを使用window.innerWidth
しwindow.innerHeight
てレンダラーのアスペクト比と幅/高さを設定しますが、どこかで20〜30の余分なピクセルを取得し、ページの下部と右側に追加するように見えますか?
body要素のCSSを調整して、マージンとパディングを削除しようとしました。これは、作成されるキャンバス要素と同じですが、何もありません。画面サイズをページにエコーし、JavaScriptalert()
関数を作成してウィンドウの幅と高さをチェックし、実行時の操作中にThree.js APIに渡されるのを監視しましたが、エラーは残ります。キャンバスレンダリングオブジェクトは画面サイズよりわずかに大きいサイズに変更します。問題を修正するのに最も近いのは、次のようなことです。
var val = 7;
//Trims the window size by val
function get_width(){return window.innerWidth - val;}
function get_height(){return window.innerHeight - val;}
//... Code omitted for brevity
camera = new THREE.PerspectiveCamera( 75, get_width() / get_height(), 1, 10000 );
//... Code omitted for brevity
render.setSize(get_width(), get_height());
これは、レンダラーのサイズをウィンドウの境界内に収めるために機能しますが、ポイントにすぎません。val
7未満、たとえば6以下に下げると、レンダラーのサイズが元に戻り、画面よりも20 px(約)大きくなり、スクロールバーが表示されますか?
何か考えやアイデアはありますか?