Java 在opengl和自己的库中传递向量(和其他结构)
这是一个代码风格和设计问题,可能涉及权衡。这可能是显而易见的 背景故事: <> >从C++迁移到java时,我遇到了一个不同的问题,我现在不确定如何处理。 在所有opengl调用中,都会传递一个带有偏移量的数组,并使用一个常规参数告诉函数传递的数组是如何构造的。举个例子 所以在绘图时,最好将所有顶点都放在一个数组中,一个浮动缓冲区。 然而,我的物理计算也需要这些顶点 问题: 我是否应该为物理创建一个单独的缓冲区,并在每次更新时将其结果复制到FloatBuffer,处理Vec3f和Point3f类,因为它们不能传递给opengl函数,因为它们可能是碎片化的(或者可以?) 或者,我应该有一个单独的类来处理我的结构,它将偏移量与数组一起处理Java 在opengl和自己的库中传递向量(和其他结构),java,opengl,jogl,Java,Opengl,Jogl,这是一个代码风格和设计问题,可能涉及权衡。这可能是显而易见的 背景故事: >从C++迁移到java时,我遇到了一个不同的问题,我现在不确定如何处理。 在所有opengl调用中,都会传递一个带有偏移量的数组,并使用一个常规参数告诉函数传递的数组是如何构造的。举个例子 所以在绘图时,最好将所有顶点都放在一个数组中,一个浮动缓冲区。 然而,我的物理计算也需要这些顶点 问题: 我是否应该为物理创建一个单独的缓冲区,并在每次更新时将其结果复制到FloatBuffer,处理Vec3f和Point3f类,因
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虚拟空间中有一个浮点数组。知道了这一点,在一个大批量复制应该会提高我的性能。然而,答案是正确的。谢谢:)