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

Exception when running three.js example using iewebgl

本文关键字:异常 js 三个 运行 iewebgl 使用      更新时间:2023-09-26

我正在尝试使用 iewebgl,但在运行 three.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上下文。

我正在使用 ie10 和 r.46 的三个.js。当我使用三个中的 r.61 时.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");

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

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

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

然后,我将 init()animate() 调用都放在以下块中,省略了全局变量 VaR 容器,统计;

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 } ); -->

如果你使用三.js的未缩小版本,我想你会看到问题是_gl对象(缩小版本中的j)为空。在我看来,好像三个.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预览版,但我很想知道三个.js是否适用于它。