使用iewebgl运行three.js示例时出现异常

时间:2013-10-11 18:00:14

标签: javascript internet-explorer three.js webgl compatibility

我正在尝试使用iewebgl,但无法运行three.js中的一个示例,the webgl_loader_obj。我收到以下错误:

SCRIPT445: Object doesn't support this action iewebgl.html, line 134 character 5

指向此行

// texture
var manager = new THREE.LoadingManager();  <!-- here  -->
manager.onProgress = function ( item, loaded, total ) {

    console.log( item, loaded, total );
};

我还试着注释掉纹理和模型部分,并在没有管理器的情况下加载对象,但我会收到以下错误:

SCRIPT445: Object doesn't support this action OBJLoader.js, line 19 character 3

指向此行

THREE.OBJLoader.prototype = {

constructor: THREE.OBJLoader,

load: function ( url, onLoad, onProgress, onError ) {

    var scope = this;

    var loader = new THREE.XHRLoader( scope.manager );  <!-- here-->
    loader.setCrossOrigin( this.crossOrigin );

我尝试了创建canvas并从JavaScript获取WebGL上下文并使用帮助程序创建WebGL上下文。

我正在使用ie 10和r.36 of three.js。当我使用r.61 of three.js时,我得到以下异常

SCRIPT5007: Unable to get property 'getExtension' of undefined or null reference three.min.js, line 8322 character 2

} catch (Zb) {
    console.error(Zb)
}
Na = j.getExtension("OES_texture_float"); <!-- here -->
j.getExtension("OES_texture_float_linear");
va = j.getExtension("OES_standard_derivatives");

知道可能导致它的原因吗?

2 个答案:

答案 0 :(得分:1)

我能够使用创建画布并从JavaScript获取WebGL上下文来解决我的问题示例

<div id="container"> 
    <script id="WebGLCanvasCreationScript" type="text/javascript">WebGLHelper.CreateGLCanvasInline('renderCanvas', onLoad)</script>
</div>

然后我将init()animate()调用放在以下块中,省略了全局变量     var container,stats;

var camera, cameraTarget, scene, renderer;
function onLoad() {
    <!-- require(["js/Three.js"], function () { -->
    init();
    animate();
    <!-- }); -->
}

我没有使用require代码,但包含它以防其他人遇到类似问题并发现他们需要它。

最后,必须将渲染代码更改为以下内容。 (我离开原来的评论)

var externalCanvas = document.getElementById('renderCanvas');
renderer = new THREE.WebGLRenderer({ 'canvas': externalCanvas, 'clearColor': 0xffffff });
<!-- renderer = new THREE.WebGLRenderer(); -->
<!-- renderer = new THREE.WebGLRenderer( { antialias: true, alpha: false } ); -->

答案 1 :(得分:0)

如果您使用未缩小版本的three.js,我认为您将看到问题是_gl对象(缩小版本中的j)为null。它也看起来好像three.js会抛出异常,记录消息“创建WebGL上下文错误”,然后继续尝试使用_gl对象。 :)

您是否在控制台中看到了该消息?这是我认为你的错误发生的未缩小的来源。

function initGL() {

    try {

        var attributes = {
            alpha: _alpha,
            premultipliedAlpha: _premultipliedAlpha,
            antialias: _antialias,
            stencil: _stencil,
            preserveDrawingBuffer: _preserveDrawingBuffer
        };

        _gl = _canvas.getContext( 'webgl', attributes ) || _canvas.getContext( 'experimental-webgl', attributes );

        if ( _gl === null ) {

            throw 'Error creating WebGL context.';

        }

    } catch ( error ) {

        console.error( error );

    }

    _glExtensionTextureFloat = _gl.getExtension( 'OES_texture_float' );
    _glExtensionTextureFloatLinear = _gl.getExtension( 'OES_texture_float_linear' );
    _glExtensionStandardDerivatives = _gl.getExtension( 'OES_standard_derivatives' );

您的IE是否支持WebGL?其他webgl测试是否有效?我没有IE Win8.1预览版,但我很想知道three.js是否适用它。