我正在使用 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 阵列:3.270681 阵列:3.280375
到目前为止,我已经使用普通的 C 数组进行了测试,以检查 sprintf 是否有效,我还通过了 jint 而不是 jfloatArray 并且也正确显示。
无论我要求数组中的什么元素,它每次都会返回 ~3 是否有原因?(我传入 4 个数组,它们都做同样的事情)
编辑:Java调用:
//native call to load dimensions
loadModelDimensions(Vertices);