2011-08-07 2 views
1

이 코드 형식은 &이며, 아마도 tradeoffs를 다루고 있습니다. 아마 분명합니다.OpenGL 및 자체 라이브러리에서 벡터 (및 다른 구조체)를 전달합니다.

스토리 :

것은 내가 지금 처리하는 방법을 잘 모르겠습니다 차이가 발생 자바, C++에서 마이그레이션.

모든 OpenGL 호출에서 전달 된 배열의 구조를 함수에 알려주는 오프셋 및 추가 매개 변수가있는 배열을 전달합니다. 예를 들어 glDrawArrays을 가져 가십시오.

그래서 드로잉을 할 때 모든 정점을 배열, 즉 FloatBuffer로 갖는 것이 가장 좋습니다. 그러나 물리학 호출에 대한 정점이 필요합니다.

질문 :

나는 그들이 OpenGL을 함수에 전달 될 수 있기 때문에 Vec3f 및 Point3f 클래스를 다루는 모든 업데이 트를 물리학에 대한 별도의 버퍼를 생성하고 FloatBuffer에 그 결과를 복사해야합니다 그들은 수 있기 때문에 (또는 그럴 수 있습니까?).

또는 배열과 함께 오프셋을 사용하는 구조체를 다루기 위해 별도의 클래스를 사용해야합니까?

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의 물리 계산을 할 수 없습니다

답변

1

감사? JOCL 또는 쉐이더가 가능한 경로입니다. 일반적으로 CPU (Java, C 등)의 모든 정점 변형을 방지하고 모든 프레임에 GPU로 전송합니다.

당신이 정말로 java (CPU)에서해야한다면 수학 클래스 (Vec, Point 등)를 적용하여 FloatBuffer에 데이터를 저장할 수 있습니다. 그러나 이것은 FB에 대한 읽기/쓰기 작업이 오버 헤드가 없기 때문에 원시 플로트와 비교할 때 확실히 느립니다.

실제로하고있는 것을 모른 채로 FB -> 수학 오브젝트와 뒷면의 복사본을 만들 수도 있습니다. 그것이 충분히 빠르지 않다면 ... 나중에 최적화하십시오 :

+0

더 설명하려면 : 나는 안드로이드 용으로 개발 중입니다. 이제는 FB가 시스템 메모리이고 부동 소수점 배열이 Java 가상 공간에 있다는 것을 알고 있습니다. 하나의 큰 배치로 복사하면 성능이 향상됩니다. 그러나 그 해답은 주목 받았다. 감사:) – Greg