有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java这个函数的最后一个参数是什么?

我已经试着寻找这个问题的答案好几天了,但它确实没有在任何地方解释,而且很难做一个实验来确定答案

查看此功能的文档: http://developer.安卓.com/reference/安卓/opengl/GLES20.html#glUniformMatrix4fv%28int,%20int,%20boolean,%20float[],%20int%29 非常详尽,对吧

撇开讽刺不谈,在以下方面抵消什么好处: glUniformMatrix4fv(int位置、int计数、布尔转置、float[]值、int偏移量)

我在想,如果value[]包含例如4个矩阵,即float[4*4*4]数组,则偏移量确定将上载到GPU的以下16个float

因此,如果值为:

{
  0, 0, 0, 0,
  0, 0, 0, 0,
  0, 0, 0, 0,
  0, 0, 0, 0,
  1, 0, 0, 0,
  0, 1, 0, 0,
  0, 0, 1, 0,
  0, 0, 0, 1,
  0, 0, 0, 0,
  0, 0, 0, 0,
  0, 0, 0, 0,
  0, 0, 0, 0
}

我这样调用函数:

GLES20.glUniformMatrix4fv(location, 1, false, values, 16);

身份矩阵将上载到指定统一位置的GPU

我已经浏览了很多,并试图找到源代码,以确定是否是这样,但唉。 很抱歉,我问了一个API规范应该涵盖的问题,但事实并非如此


共 (1) 个答案

  1. # 1 楼答案

    GL的v函数在Java这样不支持指针的语言中有些难以解释。在C语言中,可以使用它们将使用地址所需的所有参数传递给连续的内存块。这是一种通过数组传递参数的简单方法

    由于在像C这样的语言中传递地址的灵活性,C语言绑定只需要一个参数来表示任意内存位置。为了复制在数组中选择任意位置以从中复制数据的能力,Java中需要offset

    glBufferData (...)有一个类似的构造,它使用java.nio.Buffer的“当前”位置来标记开始。这就是为什么如果通过反复调用put (...)来填充缓冲区,就必须将当前位置移回缓冲区的开头

    事实上,GLES20.glUniformMatrix4fv (...)的另一个重载(使用FloatBuffer)与glBufferData (...)的工作方式完全相同