【问题标题】:Threejs canvas doesn't resize into tag divThreejs画布不会调整为标签div
【发布时间】:2015-02-27 15:57:57
【问题描述】:

我已将我的标签画布放入一个 div 中,用于 Bootstrap 布局,但该画布比 div 容器大,并且它不会将自身调整为 div 大小。我不明白是什么原因。 实例:http://www.felpone.netsons.org/web-threejs/

<div class="row">


<div class="col-sm-8" style="background-color:lavenderblush;" id="ThreeJS" data-toggle="context" data-target="#context-menu"></div>



<div class="col-sm-4" style="background-color:lavender;">.col-sm-4</div>



</div>



#ThreeJS canvas {

position: static!important;
padding: 1px!important;
margin: 1px!important;
background-color: rgba(188, 188, 188, 0.44)!important;

 }

这是我的threejs代码:

var SCREEN_WIDTH = window.innerWidth-5, SCREEN_HEIGHT = window.innerHeight-5;

    var VIEW_ANGLE = 45, ASPECT = SCREEN_WIDTH / SCREEN_HEIGHT, NEAR = 0.01, FAR = 20000;
    camera = new THREE.PerspectiveCamera( VIEW_ANGLE, ASPECT, NEAR, FAR);
    var r = 4, phi = Math.PI/4, theta = Math.PI/4;
    camera.position.set(r*Math.cos(phi)*Math.sin(theta),r*Math.sin(phi), r*Math.cos(phi)*Math.cos(theta));

    // RENDERER
    if ( Detector.webgl )
            renderer = new THREE.WebGLRenderer( {antialias:true} );
    else
            renderer = new THREE.CanvasRenderer(); 
    renderer.setSize(SCREEN_WIDTH, SCREEN_HEIGHT);
    renderer.autoClear = false;

    // CONTAINER
    container = document.getElementById( 'ThreeJS' );
    container.appendChild( renderer.domElement );

    // EVENTS
    THREEx.WindowResize(renderer, camera);
    THREEx.FullScreen.bindKey({ charCode : 'm'.charCodeAt(0) });

    // CONTROLS
    controls = new THREE.OrbitControls( camera, renderer.domElement );
    controls.addEventListener( 'change', render );
    controls.target = new THREE.Vector3(0, 0, 0);

【问题讨论】:

    标签: javascript html css canvas three.js


    【解决方案1】:

    您将渲染器大小(= 您的画布)设置为 (window.innerWidth-5)/(window.innerHeight-5),几乎是整页。先在SCREEN_WIDTHSCREEN_HEIGHT之前定义container,然后替换为:

    var containerStyle = getComputedStyle(container,null);
    var SCREEN_HEIGHT = parseInt(containerStyle.getPropertyValue('height')),
        SCREEN_WIDTH = parseInt(containerStyle.getPropertyValue('width'));
    

    THREEx.WindowResize 函数中相同:查找定义高度和宽度的位置,并将它们替换为这些值。

    【讨论】:

    • 您的示例中的高度和宽度在哪里定义?
    • 我可以和你聊天吗?我需要你的帮助,我看到你是three.js @Astrak 方面的专家
    • 自上个月才发现它。此解决方案仅是 javascript。我们可以在 javascript 房间见面,给我一个小时 @stefano
    • 如果你想在 Skype 上加我,我的昵称是:felpone @Astrak
    猜你喜欢
    • 1970-01-01
    • 2019-02-16
    • 1970-01-01
    • 2023-03-19
    • 2016-04-23
    • 1970-01-01
    • 1970-01-01
    • 2016-09-22
    • 1970-01-01
    相关资源
    最近更新 更多