三个js嵌入了html

时间:2014-09-17 15:33:34

标签: javascript html three.js

HY! 我正在使用三个j(webgl)。我试图嵌入html网页,但不知怎的,它不想工作。 我正在检查的教程: http://learningthreejs.com/blog/2013/04/30/closing-the-gap-between-html-and-webgl/ http://stemkoski.github.io/Three.js/CSS3D.html

stemkoski正在使用三个js v58,也是v60。但它真的不想使用v68(最新版本)。我没有收到任何错误消息,只是网站应该是黑屏。

我也可以做类似http://threejs.org/examples/#css3d_youtube的事情。

我的问题是有解决方法,还是" hotfix"对于这个问题,因为我没有想法。

感谢您的回答。

--- --- UPDATE

然后让我们说我使用这段代码:

<!doctype html>
<html lang="en">
<head>
    <title>CSS3D (Three.js)</title>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
    <link rel=stylesheet href="css/base.css"/>
</head>
<body>

<script src="js/Three58.js"></script>
<script src="js/Detector.js"></script>
<script src="js/Stats.js"></script>
<script src="js/OrbitControls.js"></script>
<script src="js/THREEx.KeyboardState.js"></script>
<script src="js/THREEx.FullScreen.js"></script>
<script src="js/THREEx.WindowResize.js"></script>

<!-- new for this example -->
<script src="js/CSS3DRenderer.js"></script>

<!-- jQuery code to display an information button and box when clicked. -->
<script src="js/jquery-1.9.1.js"></script>
<script src="js/jquery-ui.js"></script>
<link rel=stylesheet href="css/jquery-ui.css" />
<link rel=stylesheet href="css/info.css"/>
<script src="js/info.js"></script>
<div id="infoButton"></div>
<div id="infoBox" title="Demo Information">
This three.js demo is part of a collection at
<a href="http://stemkoski.github.io/Three.js/">http://stemkoski.github.io/Three.js/</a>
</div>
<!-- ------------------------------------------------------------ -->

<div id="ThreeJS" style="position: absolute; left:0px; top:0px"></div>
<script>
/*
    Three.js "tutorials by example"
    Author: Lee Stemkoski
    Date: July 2013 (three.js v58)

    This demo is based on the work of Jerome Etienne:
    http://learningthreejs.com/blog/2013/04/30/closing-the-gap-between-html-and-webgl/

 */

// MAIN

// standard global variables
var container, scene, camera, renderer, controls, stats;
var keyboard = new THREEx.KeyboardState();
var clock = new THREE.Clock();
// custom global variables
var rendererCSS;

init();
animate();

// FUNCTIONS        
function init() 
{
    // SCENE
    scene = new THREE.Scene();
    // CAMERA
    var SCREEN_WIDTH = window.innerWidth, SCREEN_HEIGHT = window.innerHeight;
    var VIEW_ANGLE = 45, ASPECT = SCREEN_WIDTH / SCREEN_HEIGHT, NEAR = 0.1, FAR = 20000;
    camera = new THREE.PerspectiveCamera( VIEW_ANGLE, ASPECT, NEAR, FAR);
    scene.add(camera);
    camera.position.set(0,150,400);
    camera.lookAt(scene.position);  
    // RENDERER
    if ( Detector.webgl )
        renderer = new THREE.WebGLRenderer( {antialias:true} );
    else
        renderer = new THREE.CanvasRenderer(); 
    renderer.setSize(SCREEN_WIDTH, SCREEN_HEIGHT);
    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 );
    // STATS
    stats = new Stats();
    stats.domElement.style.position = 'absolute';
    stats.domElement.style.bottom = '0px';
    stats.domElement.style.zIndex = 100;
    container.appendChild( stats.domElement );
    // LIGHT
    var light = new THREE.PointLight(0xffffff);
    light.position.set(0,250,0);
    scene.add(light);
    // FLOOR
    var floorTexture = new THREE.ImageUtils.loadTexture( 'images/checkerboard.jpg' );
    floorTexture.wrapS = floorTexture.wrapT = THREE.RepeatWrapping; 
    floorTexture.repeat.set( 10, 10 );
    var floorMaterial = new THREE.MeshBasicMaterial( { map: floorTexture, side: THREE.DoubleSide } );
    var floorGeometry = new THREE.PlaneGeometry(1000, 1000, 10, 10);
    var floor = new THREE.Mesh(floorGeometry, floorMaterial);
    floor.position.y = -0.5;
    floor.rotation.x = Math.PI / 2;
    scene.add(floor);

    ////////////
    // CUSTOM //
    ////////////

    var planeMaterial   = new THREE.MeshBasicMaterial({color: 0x000000, opacity: 0.1, side: THREE.DoubleSide });
    var planeWidth = 360;
    var planeHeight = 120;
    var planeGeometry = new THREE.PlaneGeometry( planeWidth, planeHeight );
    var planeMesh= new THREE.Mesh( planeGeometry, planeMaterial );
    planeMesh.position.y += planeHeight/2;
    // add it to the standard (WebGL) scene
    scene.add(planeMesh);

    // create a new scene to hold CSS
    cssScene = new THREE.Scene();
    // create the iframe to contain webpage
    var element = document.createElement('iframe')
    // webpage to be loaded into iframe
    element.src = "index.html";
    // width of iframe in pixels
    var elementWidth = 1024;
    // force iframe to have same relative dimensions as planeGeometry
    var aspectRatio = planeHeight / planeWidth;
    var elementHeight = elementWidth * aspectRatio;
    element.style.width  = elementWidth + "px";
    element.style.height = elementHeight + "px";

    // create a CSS3DObject to display element
    var cssObject = new THREE.CSS3DObject( element );
    // synchronize cssObject position/rotation with planeMesh position/rotation 
    cssObject.position = planeMesh.position;
    cssObject.rotation = planeMesh.rotation;
    // resize cssObject to same size as planeMesh (plus a border)
    var percentBorder = 0.05;
    cssObject.scale.x /= (1 + percentBorder) * (elementWidth / planeWidth);
    cssObject.scale.y /= (1 + percentBorder) * (elementWidth / planeWidth);
    cssScene.add(cssObject);

    // create a renderer for CSS
    rendererCSS = new THREE.CSS3DRenderer();
    rendererCSS.setSize( window.innerWidth, window.innerHeight );
    rendererCSS.domElement.style.position = 'absolute';
    rendererCSS.domElement.style.top      = 0;
    rendererCSS.domElement.style.margin   = 0;
    rendererCSS.domElement.style.padding  = 0;
    document.body.appendChild( rendererCSS.domElement );
    // when window resizes, also resize this renderer
    THREEx.WindowResize(rendererCSS, camera);

    renderer.domElement.style.position = 'absolute';
    renderer.domElement.style.top      = 0;
    // make sure original renderer appears on top of CSS renderer
    renderer.domElement.style.zIndex   = 1;
    rendererCSS.domElement.appendChild( renderer.domElement );

}

function animate() 
{
    requestAnimationFrame( animate );
    render();       
    update();
}

function update()
{
    if ( keyboard.pressed("z") ) 
    { 
        // do something
    }

    controls.update();
    stats.update();
}

function render() 
{
    // remember to call both renderers!
    rendererCSS.render( cssScene, camera );
    renderer.render( scene, camera );
}

</script>

</body>
</html>

正如我上面提到的,这是来自http://stemkoski.github.io/Three.js/CSS3D.html的代码,他从另一个教程中创建了他的代码:http://learningthreejs.com/blog/2013/04/30/closing-the-gap-between-html-and-webgl/这个代码。

问题是,theese正在制作三个js r58-r60(让我们说这是旧代码)。我想用三个js r68(最新版本)做同样的事情。但不知何故,当我在r68上启动相同的代码时,屏幕变黑而不是显示html页面。这是一个已知错误,您可以在此处查看http://learningthreejs.com/blog/2013/04/30/closing-the-gap-between-html-and-webgl/

  

你好Jerome,谢谢你的兴趣。这里有几个jsfiddles   从stemkoski的github复制,显示了三个r58和   R68。观察到样本之间的唯一区别是   正在使用的图书馆:Threejs 58(工作) - http://jsfiddle.net/jL48v/2/   Threejs 68(破碎) - http://jsfiddle.net/jL48v/3/

     

我已经尝试了几种方法让这项技术在r68中运行,   但到目前为止没有太多运气。

     

刚才意识到我搞砸了依赖加载顺序。这是一个   &#34;固定&#34;破坏版的r68 - http://jsfiddle.net/jL48v/4/

但他/她忘了写解决方案。而且v4也没有工作。

0 个答案:

没有答案