2017-02-06 27 views
1

私はWebGLプロジェクトで作業しています。すべてのテクスチャがうまく描画されます。 キューブマップを実装したいとき、このタイプのエラーが発生し始めました。すべてのブラウザで Argument 9 of WebGLRenderingContext.texImage2D does not implement interface ArrayBufferViewOrNull.私はテクスチャをロードするために使用私のコードの断片である 、WebGLRenderingContext.texImage2Dは、インターフェイスArrayBufferViewOrNullを実装していません。

var cubeMap = gl.createTexture(); 
    gl.bindTexture(gl.TEXTURE_CUBE_MAP, cubeMap); 

    for(var i = 0; i < 6; i++) 
    { 
     var img = cubeMapArr[i]; 
     console.log(img); 
     gl.texImage2D(
      gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 
      0, gl.RGB, 1024, 1024, 0, gl.RGB, gl.UNSIGNED_BYTE,img); 
    } 

cubeMapArrはHTMLImageElementsを保持しています。 この問題に関するご意見やご感想はありますか? 例えばのようなgl.texImage2D()この、問題なく

gl.texImage2D(gl.TEXTURE_2D,0,gl.RGBA,gl.RGBA,gl.UNSIGNED_BYTE,normalMapTexture); 

作品を使用しました。 再びnormalMapTextureにはHTMLImageElementが保持されます。

ありがとうございます。 WebGLので

+0

編集genpfaultありがとうございました。この質問にはopengl-esというタグを付ける必要があります。 –

+2

いいえopengl-esとは何の関係もないため、opengl-esタグを付けてはいけません。 OpenGL ESにはArrayBufferViewsやHTMLImageElementsという概念はありません – gman

答えて

2

HTMLElement

HTMLImageElementHTMLVideoElementまたはHTMLCanvasElementのいずれかで、その後、あなたのコードはにHTMLImageElementを通過している

gl.texImage2D(bindPoint, mipLevel, internalFormat, width, height, border, 
       format, type, ArrayBufferViewOrNull); 

がありますtexImage2D

gl.texImage2D(bindPoint, mipLevel, internalFormat, format, type, HTMLElement); 

の2つの形態があります関数の第2の形式は、なぜそれが言い換えればArrayBufferViewOrNull

は、あなたが使用される形態ではなくWebGL2だけのChromeとFirefoxのみで2017年1月に出荷意識する存在WebGL2でgl.texImage2D

にお電話から1024, 1024, 0,を削除します。 Safari iOSを含むEdgeやSafariではまだ利用できません。

+0

私はfirefoxを更新し、webgl2コンテキストを使用していましたが、firefoxでしか利用できないと思います。 'gl.texImage2d'関数の2番目のバージョン(引数が多い)は' HTMLImageElement'で動作します。答えをいただきありがとうございます。引数の少ない最初のバージョンはwebgl1のコンテキストで動作します。 –

+1

WebGL2はFirefoxとChromeの両方で出荷されています – gman

関連する問題