Javascript 从Array THREE.js创建纹理
我正在开发一个地形生成器,但我不知道如何绘制颜色。我希望能够产生一个图像,将采取我的整个平面几何。我的问题是,如何根据我的高度贴图创建一个覆盖整个平面几何体(无环绕)的图像?我可以想出一种方法,但我不确定它是否能完全覆盖平面几何,而且效率很低。我会用画布上的颜色在二维视图中绘制它。然后我将画布转换为纹理,这是最好的/唯一的方法吗 更新:使用DataTexture,我遇到了一些错误。我完全不知道我哪里出错了。下面是我得到的错误:Javascript 从Array THREE.js创建纹理,javascript,canvas,three.js,terrain,Javascript,Canvas,Three.js,Terrain,我正在开发一个地形生成器,但我不知道如何绘制颜色。我希望能够产生一个图像,将采取我的整个平面几何。我的问题是,如何根据我的高度贴图创建一个覆盖整个平面几何体(无环绕)的图像?我可以想出一种方法,但我不确定它是否能完全覆盖平面几何,而且效率很低。我会用画布上的颜色在二维视图中绘制它。然后我将画布转换为纹理,这是最好的/唯一的方法吗 更新:使用DataTexture,我遇到了一些错误。我完全不知道我哪里出错了。下面是我得到的错误: WebGL:drawerelements:绑定到纹理单元0的纹理不可
WebGL:drawerelements:绑定到纹理单元0的纹理不可渲染。它可能不是2的幂次函数,并且具有不兼容的纹理过滤,或者不是“纹理完整”。或者纹理是带有线性过滤的浮点或半浮点类型,而OES_Float_linear或OES_Half_Float_linear扩展未启用。
DataTexture和PlaneGeometry的大小均为512^2。我能做些什么来解决这个问题 以下是我使用的一些代码: 编辑:我修好了。这是我使用的工作代码
function genDataTexture(){
//Set the size.
var dataMap = new Uint8Array(1 << (Math.floor(Math.log(map.length * map[0].length * 4) / Math.log(2))));
/* ... */
//Set the r,g,b for each pixel, color determined above
dataMap[count++] = color.r;
dataMap[count++] = color.g;
dataMap[count++] = color.b;
dataMap[count++] = 255;
}
var texture = new THREE.DataTexture(dataMap, map.length, map[0].length, THREE.RGBAFormat);
texture.needsUpdate = true;
return texture;
}
/* ... */
//Create the material
var material = new THREE.MeshBasicMaterial({map: genDataTexture()});
//Here, I mesh it and add it to scene. I don't change anything after this.
函数genDataTexture(){
//设置大小。
var dataMap=new Uint8Array(1如果数据已经存在于您的Javascript代码中,那么最佳的方法是使用DataTexture
——请参阅常规文档,或者查看THREE.ImageUtils.generateDataTexture()
这是一种非常方便的方法。我遇到了一些错误。我在问题中添加了它们。你能告诉我哪里出了问题吗?我找到了。谢谢THREE。ImageUtils.generateDataTexture()
已被删除,请参阅