Shader 如何计算;“查看逆矩阵”;

Shader 如何计算;“查看逆矩阵”;,shader,geometry-shader,Shader,Geometry Shader,我正在尝试一个与RenderMonkey一起推出的粒子系统示例,它使用“视图逆矩阵”为粒子效果在四边形上打广告 我可以看到RenderMonkey中的所有值,但我无法计算出它们如何计算“视图逆矩阵”,它不是视图矩阵的逆矩阵或视图投影的逆矩阵 据我所知,这些名称是“变量语义”: 其中V表示视图矩阵旋转部分的倒数,x、y、z表示视图位置。但我无法确认,直到我尝试它,因为渲染猴子错误。确认,我有广告牌工作。以下是java: /** * * @param viewMatrix *

我正在尝试一个与RenderMonkey一起推出的粒子系统示例,它使用“视图逆矩阵”为粒子效果在四边形上打广告

我可以看到RenderMonkey中的所有值,但我无法计算出它们如何计算“视图逆矩阵”,它不是视图矩阵的逆矩阵或视图投影的逆矩阵

据我所知,这些名称是“变量语义”:


其中V表示视图矩阵旋转部分的倒数,x、y、z表示视图位置。但我无法确认,直到我尝试它,因为渲染猴子错误。

确认,我有广告牌工作。以下是java:

/**
 * 
 * @param viewMatrix
 *            4x4 (16 floats)
 * @param viewPosition
 *            3x1 (3 floats)
 * @param resultMatrix
 *            4x4 (16 floats)
 */
public static void calculateViewInverse(float[] viewMatrix,
        float[] viewPosition, float[] resultMatrix) {
    // derived from:
    // http://swiftcoder.wordpress.com/2008/11/25/constructing-a-billboard-matrix/
    // A rotation matrix is a
    // "real special orthogonal matrix", which for our purposes means that
    // its transpose is also its inverse.
    resultMatrix[0] = viewMatrix[0];

    resultMatrix[1] = viewMatrix[4];
    resultMatrix[4] = viewMatrix[1];

    resultMatrix[2] = viewMatrix[8];
    resultMatrix[8] = viewMatrix[2];

    resultMatrix[5] = viewMatrix[5];

    resultMatrix[6] = viewMatrix[9];
    resultMatrix[9] = viewMatrix[6];

    resultMatrix[10] = viewMatrix[10];

    resultMatrix[3] = viewPosition[0];
    resultMatrix[7] = viewPosition[1];
    resultMatrix[11] = viewPosition[2];

    resultMatrix[12] = 0;
    resultMatrix[13] = 0;
    resultMatrix[14] = 0;

    resultMatrix[15] = 1;
}
 V.a V.e V.i x
 V.b V.f V.j y
 V.c V.g V.k z
 0   0   0   1
/**
 * 
 * @param viewMatrix
 *            4x4 (16 floats)
 * @param viewPosition
 *            3x1 (3 floats)
 * @param resultMatrix
 *            4x4 (16 floats)
 */
public static void calculateViewInverse(float[] viewMatrix,
        float[] viewPosition, float[] resultMatrix) {
    // derived from:
    // http://swiftcoder.wordpress.com/2008/11/25/constructing-a-billboard-matrix/
    // A rotation matrix is a
    // "real special orthogonal matrix", which for our purposes means that
    // its transpose is also its inverse.
    resultMatrix[0] = viewMatrix[0];

    resultMatrix[1] = viewMatrix[4];
    resultMatrix[4] = viewMatrix[1];

    resultMatrix[2] = viewMatrix[8];
    resultMatrix[8] = viewMatrix[2];

    resultMatrix[5] = viewMatrix[5];

    resultMatrix[6] = viewMatrix[9];
    resultMatrix[9] = viewMatrix[6];

    resultMatrix[10] = viewMatrix[10];

    resultMatrix[3] = viewPosition[0];
    resultMatrix[7] = viewPosition[1];
    resultMatrix[11] = viewPosition[2];

    resultMatrix[12] = 0;
    resultMatrix[13] = 0;
    resultMatrix[14] = 0;

    resultMatrix[15] = 1;
}