这是一种代码风格&设计问题,也许是在处理权衡问题。这可能很明显。
背景故事:
当从C ++迁移到Java时,我遇到了一些不同,我现在不知道如何处理。
在所有opengl调用中,您传递一个带偏移量的数组和一个aditional param,它告诉函数传递的数组是如何构造的。以glDrawArrays为例。
因此在绘图时,最好将我的所有顶点都放在一个数组中,即FloatBuffer。 但是,我还需要那些顶点来进行物理调用。
问题:
我应该为物理创建一个单独的缓冲区,并在每次更新时将其结果复制到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的数组一样,或者它应该只是作为普通的浮点数组偏移。
谢谢:)
答案 0 :(得分:1)
你不能在GPU上进行物理计算吗? JOCL或着色器可能是一条路线。通常你会试图阻止在CPU上进行所有顶点转换(在java,C等等)并且每帧都将它发送到GPU。
如果您真的必须在java(CPU)中执行此操作,则可以调整数学类(Vec,Point等)以将数据存储在FloatBuffer中。但是,与原始浮点数相比,这肯定会更慢,因为对FB的读/写操作并非没有开销。
不知道你在做什么,FB的副本 - >数学对象和背部甚至可行。如果不够快......稍后优化:)