着色器中的纹理查找与句柄属性

时间:2015-01-29 15:24:01

标签: opengl-es webgl opengl-es-2.0 gpu gpu-programming

我的问题与生成具有噪音功能的高度图等有关。

WebGL提供了两个有趣的功能:gl.texImage2Dgl.readPixels。我会说它们有点相似,第一个将图像数据从画布上传到当前绑定的WebGLTexture,第二个用画布中的像素数据填充Uint8Array缓冲区。

另据我了解,如果接受不同的参数,gl.texImage2D几乎与gl.readPixels相同。

我见过各种(WebGL)高度图实现,我记得所有这些都使用texImage2D而没有人使用readPixels

假设我们有一个由顶点组成的平面,只有[x,z]坐标,我们正在寻找y坐标来扭曲我们的平面。所以我们可以通过纹理查找找到[y]坐标,所以我们将纹理绑定到我们的程序或者我们可以使用canvas中的数据绑定另一个缓冲区并将[y]作为属性读取。

  

在思考纹理查找如何工作以及属性如何工作之后   纹理查找必须比属性更重?但是多少钱?

< ---这是我与纹理查找工作原理有关的主要问题

  

但后来我不明白为什么人们会如此使用纹理呢?

< ---如果第一个问题属实,则第二个问题是关于gl.texImage2Dgl.readPixels,它是如何从javascript开始的。你有没有看过readPixels的演示?我没有看到任何优势吗?

1 个答案:

答案 0 :(得分:1)

texImage2D / texSubImage2DreadPixels之间的区别在于它们完全相反。一个人将数据发送到gpu,另一个人将数据读回,如果你需要javascript中的数据,这个数据是唯一有用的。

人们使用纹理作为高度图而不是属性的原因是因为它更容易修改。这是一种便利,而不是一种规则。如果需要,可以使用属性实现它。渲染它很可能会稍快一点,修改它会慢得多。

如果您只想加载一次地形,再也不要再触摸数据,请使用属性。如果你想要修改它,请使用纹理。

我希望这个答案更清晰。没有意识到甚至试图解释纹理和属性之间的区别来回答它也没那么有意义。