gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 08:33:23 25 4
gpt4 key购买 nike

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

背景故事:

从 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com