javascript - webgl drawArray 中间结果

标签 javascript webgl

    setMatrixUniforms();
    gl.drawArrays(gl.TRIANGLES, 0, triangleVertexPositionBuffer.numItems);

一旦设置了矩阵,(用于投影等)传递给drawArrays的点将被相应地投影并绘制。我想知道是否有任何方法可以获得这些变换点的最终位置。

最佳答案

一个简单的解决方案是使用纯 JavaScript 和矩阵库重新计算 WebGL 之外的位置。

例如,如果您想知道应用模型 View 矩阵后点 (0, 0, 0) 会变成什么,只需将其与该矩阵相乘即可​​。

var point = [0, 0, 0];
var result = mat4.multiplyVec3(mvMatrix, point, []);

或者,如果您想要在顶点着色器末尾输出的最终变换点,它通常只是您的点乘以模型 View 矩阵,然后乘以投影矩阵。

// Create a model view projection matrix by multiplying the two matrices together
var mvpMatrix = mat4.create();
mat4.multiply(pMatrix, mvMatrix, mvpMatrix);

// Multiply the point (0,0,0) by the model view projection matrix to get the result
var point = [0, 0, 0, 1];
var result = mat4.multiplyVec4(mvpMatrix , point, []);

如果您想知道所有顶点的最终结果,您可以循环遍历每个顶点并计算其结果。

// Create a model view projection matrix by multiplying the two matrices together
var mvpMatrix = mat4.create();
mat4.multiply(pMatrix, mvMatrix, mvpMatrix);

var  results = [];

// Calculate the transformed points for each vertex
for(var i = 0; i < (vertices.length/3); i++) {
    var point = [vertices[i*3], vertices[i*3+1], vertices[i*3+2], 1];
    results[i] = mat4.multiplyVec4(mvpMatrix, point);
}

在上面的示例中,vertices 数组是一维的。

由于这种方法非常简单,并且您正在重新计算 WebGL 已经计算的内容,因此如果您必须重新计算大量点,则可能会太慢。然而,对于很多用例来说,这都可以正常工作。

关于javascript - webgl drawArray 中间结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28683701/

相关文章:

javascript - 在 Sencha Touch 2 上尝试一个简单的列表示例,我得到 "Uncaught TypeError"

javascript - Babel 编译代码中的 this 语法是什么?

javascript - 为什么我的 WebGl 帧率在 Chrome 中缓慢下降?

javascript - 复制网格数千次并制作动画而不会对性能造成太大影响?

javascript - 用于确认表行删除的 Bootstrap 模式

javascript - 更改子元素 CSS 包含类 active

javascript - 加速 THREE.js 的方法

canvas - 将网络摄像头流作为 WebGL 纹理进行操作?

three.js - 如何停止轨迹球 Controller ? [三.js]

javascript - 用于创建带有象限的散点图的库