0

我正在尝试使用iewebgl并且无法运行来自三个.js 的示例之一,即 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 );

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

我正在使用 ie 10 和 r.46 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");

知道可能是什么原因造成的吗?

4

2 回答 2

1

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

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

然后,我将init()animate()调用都放在以下块中,省略了全局 vars var 容器 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 } ); -->
于 2013-10-14T14:00:39.283 回答
0

如果您使用未缩小版本的three.js,我想您会看到问题是_gl 对象(缩小版本中的j)为空。在我看来,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 是否可以使用它。

于 2013-10-13T03:28:28.207 回答