gpt4 book ai didi

java - 从 javax.vecmath.Matrix4f 创建 float[]

转载 作者:太空宇宙 更新时间:2023-11-04 13:53:18 25 4
gpt4 key购买 nike

在传递到 glUniformMatrix4fv 之前,我应该使用 mMVPMatrix 的内容填充 float[]

我正在使用 javax.vecmath 库。

初始化变量

Matrix4f mMVPMatrix = new Matrix4f();
Matrix4f mProjectionMatrix;
Matrix4f mViewMatrix;

GLEventListener.init()中设置值

mProjectionMatrix = createPerspectiveProjection(60.0f, width / height, 0.1f, 100.0f); // method that returns an object of type `Matrix4f`
mViewMatrix = new Matrix4f();
mViewMatrix.setIdentity();

更新GLEventListener.display()

mMVPMatrix = mProjectionMatrix;
mMVPMatrix.mul(mViewMatrix);

在绘制过程中获取对 glsl 变量的引用

mMVPMatrixHandle = gl2.glGetUniformLocation(shaderProgram, "uMVPMatrix");
gl2.glUniformMatrix4fv(mMVPMatrixHandle, 1, false, mMVPMatrix, 0);

uMVPMatrix 是一个 glsl 变量..

#version 120

uniform mat4 uMVPMatrix;
attribute vec4 vPosition;

void main() {
gl_Position = uMVPMatrix * vPosition;
}

最佳答案

默认情况下,OpenGL 假定矩阵按列主序存储。基于Matrix4f documentation ,矩阵元素的编号是行主数。例如:

m01: The second element of the first row.

因此,如果 mMatrix4f,您可以构建一个 float 组 v,其元素按列主要顺序排列:

float[] v = {m.m00, m.m10, m.m20, m.m30,
m.m01, m.m11, m.m21, m.m31,
m.m02, m.m12, m.m22, m.m32,
m.m03, m.m13, m.m23, m.m33};

glUniformMatrix4fv() 的第三个参数还允许您选择在将矩阵加载到制服中时是否应转置矩阵。如果您的值是列主的,您将使用 false。但是,如果由于某种原因您的值按行主序排列,您也可以使用 true 作为参数,而不是打乱值。

关于java - 从 javax.vecmath.Matrix4f 创建 float[],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30089482/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com