以下代码似乎无法正确转换float []数组,以将其作为统一的vec4 []传递给顶点着色器。为什么这不起作用?
private static short STRIDE = 4;
private final float[] modelMatrix = new float[16];
private float[] worldVertices = new float[12];
private static float[] modelVertices = {1f, 0f, 0f, 1f,
0f, 1f, 0f, 1f,
0f, 0f, 1f, 1f };
setIdentityM(modelMatrix, 0);
[计算增量]
translateM(modelMatrix, 0, dx, dy, dz);
// PROBLEM CODE:
for (short i = 0; i < 3 * STRIDE; i += STRIDE)
multiplyMV(worldVertices, i, modelMatrix, 0, modelVertices, i);
然后将worldVertices传递给顶点着色器。用分量数学代替循环会产生正确的结果。执行模型向量乘法以保持数组一维的最佳方法是什么?
解决!
源vec4数组的偏移似乎不起作用,它需要一个float [4] rHs,但仍然可以将结果存储在float [4 * n] lHs中。
float[] t = new float[4];
for (int i = 0; i < length; i++) {
for (int j = 0; j < 4; j++) t[j] = source[j + i * 4];
multiplyMV(result, i * 4, Matrix, 0, t, 0);
}