java - 在 opengl 和自己的库中传递 vector (和其他结构)

标签 java opengl jogl

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

背景故事:

从 C++ 迁移到 Java 时,我遇到了一个差异,我现在不知道如何处理。

在所有 opengl 调用中,您都会传递一个带有偏移量的数组和一个附加参数,该参数告诉函数传递的数组的结构如何。拿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 数组的行为一样,还是应该像普通 float 组一样偏移。

谢谢:)

最佳答案

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

如果您确实必须在 Java(CPU)中执行此操作,您可以调整您的数学类(Vec、Point 等)以将数据存储在 FloatBuffer 中。但与原始 float 相比,这肯定会慢一些,因为对 FB 的读/写操作并非没有开销。

在不知道你实际在做什么的情况下,从 FB -> 数学对象来回复制甚至是可行的。如果不够快...稍后优化:)

关于java - 在 opengl 和自己的库中传递 vector (和其他结构),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6972164/

相关文章:

java - sun.java2d.opengl=true 不适用于 Windows Netbeans 平台应用程序

java - 相机旋转

java - 源栅格波段和源色彩空间分量的数量不匹配

java - 让 java IAIK PKCS11 包装器适用于 nfast

java - 在 Java 开关中声明和初始化变量

java - 在 JMS 消息上添加传出拦截器

c++ - 如何从点画正方形?

c++ - opengl 着色器程序中的重复顶点

c++ - 四个旋转顶点之间的 HitTest

performance - 10,000 个静态立方体的 OpenGL 性能