Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在opengl和自己的库中传递向量(和其他结构)_Java_Opengl_Jogl - Fatal编程技术网

Java 在opengl和自己的库中传递向量(和其他结构)

Java 在opengl和自己的库中传递向量(和其他结构),java,opengl,jogl,Java,Opengl,Jogl,这是一个代码风格和设计问题,可能涉及权衡。这可能是显而易见的 背景故事: >从C++迁移到java时,我遇到了一个不同的问题,我现在不确定如何处理。 在所有opengl调用中,都会传递一个带有偏移量的数组,并使用一个常规参数告诉函数传递的数组是如何构造的。举个例子 所以在绘图时,最好将所有顶点都放在一个数组中,一个浮动缓冲区。 然而,我的物理计算也需要这些顶点 问题: 我是否应该为物理创建一个单独的缓冲区,并在每次更新时将其结果复制到FloatBuffer,处理Vec3f和Point3f类,因

这是一个代码风格和设计问题,可能涉及权衡。这可能是显而易见的

背景故事:

<> >从C++迁移到java时,我遇到了一个不同的问题,我现在不确定如何处理。 在所有opengl调用中,都会传递一个带有偏移量的数组,并使用一个常规参数告诉函数传递的数组是如何构造的。举个例子

所以在绘图时,最好将所有顶点都放在一个数组中,一个浮动缓冲区。 然而,我的物理计算也需要这些顶点

问题

我是否应该为物理创建一个单独的缓冲区,并在每次更新时将其结果复制到FloatBuffer,处理Vec3f和Point3f类,因为它们不能传递给opengl函数,因为它们可能是碎片化的(或者可以?)

或者,我应该有一个单独的类来处理我的结构,它将偏移量与数组一起处理

public static void addVec3(float[] vec3in_a, int offset_a, float[] vec3in_b, int offset_b, float[] vec3out, int offset_out)
偏移量应该代表什么。它们应该考虑vec3的大小并适当地移动(offset_a*=3),就像vec3的数组一样,还是应该像普通浮点数组一样偏移


谢谢:)

你不能在GPU上做物理计算吗?或者着色器将是一种可能的路径。通常,您试图阻止在CPU上执行所有顶点转换(在java、C等语言中),并在每一帧将其发送到GPU

如果您真的必须在java(CPU)中这样做,您可以调整您的数学类(Vec、Point等)以将数据存储在浮动缓冲区中。但这肯定会比基本浮点慢,因为对FB的读/写操作不是没有开销的


在不知道您实际在做什么的情况下,从FB->math object来回复制甚至是可行的。如果速度不够快。。。稍后优化:)

你不能在GPU上进行物理计算吗?或者着色器将是一种可能的路径。通常,您试图阻止在CPU上执行所有顶点转换(在java、C等语言中),并在每一帧将其发送到GPU

如果您真的必须在java(CPU)中这样做,您可以调整您的数学类(Vec、Point等)以将数据存储在浮动缓冲区中。但这肯定会比基本浮点慢,因为对FB的读/写操作不是没有开销的


在不知道您实际在做什么的情况下,从FB->math object来回复制甚至是可行的。如果速度不够快。。。稍后优化:)

进一步解释:我正在为android开发。现在我明白了FB是系统内存,Java虚拟空间中有一个浮点数组。知道了这一点,在一个大批量复制应该会提高我的性能。然而,答案是正确的。谢谢:)进一步解释:我正在为android开发。现在我明白了FB是系统内存,Java虚拟空间中有一个浮点数组。知道了这一点,在一个大批量复制应该会提高我的性能。然而,答案是正确的。谢谢:)