Я создаю приложение дополненной реальности, используя Android SDK / NDK и Qualcomm AR SDK. Часть моего приложения требует, чтобы я передавал несколько массивов с плавающей точкой в исходную часть программы для работы с измерениями модели.
Моя проблема в том, что, когда я передаю их в качестве параметров, они кажутся выходящими по-другому с другой стороны. Я опубликую урезанную версию моего кода:
#define LOGE(...) __android_log_print(ANDROID_LOG_ERROR , "NATIVE LOG", __VA_ARGS__)
float* vertArray;
JNIEXPORT void JNICALL
Java_com_qualcomm_QCARSamples_ImageTargets_ImageTargets_loadModelDimensions(JNIEnv* env, jobject obj, jfloatArray tVertices)
{
//used to free the memory at the end
int verticesLength = env->GetArrayLength(tVertices);
//the float* where the jfloatArray passes the elements
vertArray = env->GetFloatArrayElements(tVertices, 0);
//testing purposes below
char bufferResult[200];
sprintf(bufferResult, "Array: %f", vertArray[0]);
LOGE(bufferResult);
}
Метод LOGE позволяет мне отправить строку обратно в android logcat, элемент vertArray [0] равен 11.2222, но до сих пор я получал такие результаты, как:
Массив: 3.365105
Array: 3.270681
Массив: 3.280375
До сих пор я тестировал использование обычного массива C для проверки работоспособности sprintf, и я также передал jint вместо jfloatArray, и он также отображается правильно.
Есть ли причина, по которой он будет возвращать ~ 3 каждый раз, независимо от того, какой элемент массива я запрашиваю? (Я передаю в 4 массива, и все они делают то же самое)
EDIT:
Java-вызов:
//native call to load dimensions
loadModelDimensions(Vertices);