我正在尝试使用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");
知道可能导致它的原因吗?
答案 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是否适用它。