gpt4 book ai didi

objective-c - 结构体在传递给方法后具有未定义的值

转载 作者:行者123 更新时间:2023-11-30 17:29:49 24 4
gpt4 key购买 nike

我对一对 GLKVector3 结构有一个奇怪的问题。我通过两次调用 objc 方法 axisForIndex: 得到它们,然后将它们传递给 C 函数 getContactPoint执行计算。然而,当两个参数都调用axisForIndex:时为零,在我进入该方法后,它们的值“消失”——也就是说,first.x 的值在方法外部可能是 0.55,但在内部却是 0。当我在调试器中查看它们时,它们的字段都没有填写,当我打印描述时,我得到类似 (GLKVector3) varName = <variable not available> 的内容。 。但是,检查调用 getContactPoint 的方法中的值被调用之前和之后表明它们应该是这样的。我使用 Xcode6-Beta6 编译并运行代码。

代码如下:

    GLKVector3 first = [self axisForIndex: oneAxisIndex]; // the structs I want to use
GLKVector3 second = [other axisForIndex: twoAxisIndex];

//in this method they have garbage values
result.contactLocation = getContactPoint(first,
second,
ptOnEdgeOne,
ptOnEdgeTwo);

//test to see if the result was computed correctly
if (result.contactLocation.x == 0 && result.contactLocation.y == 0 && result.contactLocation.z == 0) {

NSLog(@"%ld,%ld", (unsigned long)oneAxisIndex, (unsigned long)twoAxisIndex);
}

result.interpenetration = bestOverlap;

return result;

这里是 getContactPoint 的实现,该方法的值未定义。

GLKVector3 getContactPoint(GLKVector3 axisOne,
GLKVector3 axisTwo,
GLKVector3 ptOnEdgeOne,
GLKVector3 ptOnEdgeTwo) {

GLKVector3 toSt = GLKVector3Subtract(ptOnEdgeOne, ptOnEdgeTwo);

GLfloat dpStaOne = GLKVector3DotProduct(axisOne, toSt);
GLfloat dpStaTwo = GLKVector3DotProduct(axisTwo, toSt);

GLfloat smOne = GLKVector3Length(axisOne);
GLfloat smTwo = GLKVector3Length(axisTwo);

GLfloat dotProductEdges = GLKVector3DotProduct(axisTwo, axisOne);

GLfloat denom = smOne * smTwo - dotProductEdges * dotProductEdges;

GLfloat a = (dotProductEdges * dpStaOne - smTwo * dpStaOne)/denom;
GLfloat b = (smOne * dpStaTwo - dotProductEdges * dpStaOne)/denom;

GLKVector3 nearestPtOnOne = GLKVector3MultiplyScalar(GLKVector3Add(ptOnEdgeOne, axisOne), a);
GLKVector3 nearestPtOnTwo = GLKVector3MultiplyScalar(GLKVector3Add(ptOnEdgeTwo, axisTwo), b);

return GLKVector3Add(GLKVector3MultiplyScalar(nearestPtOnOne, 0.5), GLKVector3MultiplyScalar(nearestPtOnTwo, 0.5));
}

axisForIndex 的实现。

    -(GLKVector3) axisForIndex: (NSUInteger) index
{

GLKVector4 vec = GLKMatrix4GetColumn(self.transformationMatrix, index);

return GLKVector3Make(vec.x, vec.y, vec.z);
}

最佳答案

您收到 <variable not available> 的原因调试器中出现的错误可能是由于编译器优化造成的。

您是否会尝试关闭构建的编译器优化(build设置 > 优化级别)并再次运行调试器?

参见:https://stackoverflow.com/a/13041747/3367343

关于objective-c - 结构体在传递给方法后具有未定义的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25493057/

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