我是Java语言的新手,并且正在使用WebGL并在下面的代码中得到错误"texture.image is undefined"
。当我使用Firebug调试它时,this.starshipTexture.image
正在初始化并很好地加载了图像文件,但是当调用handleLoadedTexture(texture)
时,texture
参数显示为未定义。
starship.prototype.initTexture = function () {
var starshipImage = new Image();
this.starshipTexture = gl.createTexture();
this.starshipTexture.image = starshipImage;
starshipImage.onload = function () {
handleLoadedTexture(this.starshipTexture)
}
starshipImage.src = "starship.gif";
}
function handleLoadedTexture(texture) {
gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, true);
gl.bindTexture(gl.TEXTURE_2D, texture);
//CRASHES ON THIS NEXT LINE
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, texture.image);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR_MIPMAP_NEAREST);
gl.generateMipmap(gl.TEXTURE_2D);
gl.bindTexture(gl.TEXTURE_2D, null);
}
感谢您的智慧!
最佳答案
问题在于,在“加载”处理程序内的this
并不一定是您所需要的。
而是在设置处理程序之前将其填充到一个临时变量中:
var theStarship = this;
starshipImage.onload = function () {
handleLoadedTexture(theStarship.starshipTexture)
};
关于javascript - Javascript:为什么“纹理”参数未定义?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8205423/