Iphone 如何使three.js渲染与响应式设计兼容

Iphone 如何使three.js渲染与响应式设计兼容,iphone,iframe,responsive-design,three.js,Iphone,Iframe,Responsive Design,Three.js,如何在浏览器窗口缩放时使用以下three.js代码进行渲染,即文本随着浏览器窗口变小而变小 或者,你能建议一种替代方法吗?我尝试使用一个iframe(带有适当的样式代码,使iframe随着浏览器窗口的缩放而缩放),它引用了一个带有three.js呈现的网页。这种方法适用于桌面浏览器,但不适用于iPhone <!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-w

如何在浏览器窗口缩放时使用以下three.js代码进行渲染,即文本随着浏览器窗口变小而变小

或者,你能建议一种替代方法吗?我尝试使用一个iframe(带有适当的样式代码,使iframe随着浏览器窗口的缩放而缩放),它引用了一个带有three.js呈现的网页。这种方法适用于桌面浏览器,但不适用于iPhone

<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
<script type="text/javascript" src="three.min.js"></script>
<script type="text/javascript" src="helvetiker_bold.typeface.js"></script>
<script type="text/javascript">
var camera, renderer;
function init3d() {
    var container = document.getElementById('3d');              
    camera = new THREE.PerspectiveCamera( 45, 747 / 531, 1, 2400 );
    camera.position.set( 0, 300, 900 );
    var scene = new THREE.Scene();
    camera.lookAt( scene.position );
    var ambient = new THREE.AmbientLight( 0x606060 );
    scene.add( ambient );
    var spotLight = new THREE.SpotLight( 0xffffcc );
    spotLight.position.set( -1000, 2400, 2400 );
    scene.add( spotLight );

    var textGeo = new THREE.TextGeometry( "HELLO", {
        size: 100,
        height: 20,
        curveSegments: 12,
        font: "helvetiker",
        weight: "bold",
        style: "normal",
        bevelThickness: 2,
        bevelSize: 5,
        bevelEnabled: true
    });
    textGeo.computeBoundingBox();   
    var centerOffset = -0.5 * ( textGeo.boundingBox.max.x - textGeo.boundingBox.min.x );

    var textMaterial = new THREE.MeshPhongMaterial( { color: 0x80a0c0, specular: 0xffffff } );
    var mesh = new THREE.Mesh( textGeo, textMaterial );
    mesh.position.x = centerOffset;
    mesh.position.y = -10;
    var text = new THREE.Object3D();
    text.add( mesh );
    scene.add( text );

    renderer = new THREE.WebGLRenderer( {antialias:true} );         
    renderer.setClearColor( 0x204060 );
    renderer.setPixelRatio( window.devicePixelRatio );
    renderer.setSize( window.innerWidth, window.innerHeight );

    container.appendChild( renderer.domElement ); 
    window.addEventListener( 'resize', onWindowResize, false );

    renderer.render( scene, camera );
}

function onWindowResize() {
    camera.aspect = document.getElementById("3d").offsetWidth /document.getElementById("3d").offsetHeight;
    camera.updateProjectionMatrix();
    renderer.setSize( document.getElementById("3d").offsetWidth, document.getElementById("3d").offsetHeight );
}

window.addEventListener ? window.addEventListener("load",init3d,false) : window.attachEvent && window.attachEvent("onload",init3d);
</script>
</head>
<body style="background-color:#339966">
<div style="max-width:747px; max-height:531px; width:100%">
  <div id="3d" style="width:100%"></div>
</div>
</body>
</html>

摄像机、渲染器;
函数init3d(){
var container=document.getElementById('3d');
摄像机=新的三个透视摄像机(45747/53112400);
摄像机位置设置(0,300,900);
var scene=new THREE.scene();
摄像机。注视(场景。位置);
var环境光=新的三个环境光(0x606060);
场景。添加(环境光);
var spotLight=新的三个聚光灯(0xffffcc);
聚光灯位置设置(-1000240024002400);
场景。添加(聚光灯);
var textGeo=new THREE.TextGeometry(“你好”{
尺码:100,
身高:20,
曲线段:12,
字体:“helvetiker”,
重量:“粗体”,
风格:“正常”,
体重:2,
贝弗西:5,
bevelEnabled:是的
});
textGeo.computeBoundingBox();
var centerOffset=-0.5*(textGeo.boundingBox.max.x-textGeo.boundingBox.min.x);
var TEXTMATERY=新的三点网格材质({颜色:0x80a0c0,镜面反射:0xffffff});
var mesh=新的三个网格(textGeo,textMaterial);
网格位置x=中心偏移;
网格位置y=-10;
var text=new THREE.Object3D();
添加(网格);
场景。添加(文本);
renderer=new THREE.WebGLRenderer({antialas:true});
renderer.setClearColor(0x204060);
renderer.setPixelRatio(window.devicePixelRatio);
renderer.setSize(window.innerWidth、window.innerHeight);
container.appendChild(renderer.doElement);
addEventListener('resize',onWindowResize,false);
渲染器。渲染(场景、摄影机);
}
函数onWindowResize(){
camera.aspect=document.getElementById(“3d”).offsetWidth/document.getElementById(“3d”).offsetHeight;
camera.updateProjectMatrix();
renderer.setSize(document.getElementById(“3d”).offsetWidth,document.getElementById(“3d”).offsetSight);
}
window.addEventListener?window.addEventListener(“加载”,init3d,false):window.attachEvent和window.attachEvent(“加载”,init3d);