Этот вопрос также размещен на форуме Apple Dev, но у меня нет ответов там, поэтому, надеюсь, кто-то здесь поймает то, что я здесь делаю неправильно!GLKMathProject возвращает {NaN, y, z}
Я относительно не знаком с OpenGLES и GLKit, и я пытаюсь получить координаты экрана объекта, который я нарисовал в {x, y, z} в пространстве объектов. Я написал небольшой удобный метод:
-(GLKVector3)projectX:(float)x Y:(float)y Z:(float)z zRot:(float)rot scale:(float)s
{
GLKVector3 retVal;
CGSize viewSize = self.view.bounds.size;
GLKVector3 object = GLKVector3Make(x, y, z);
int viewPort[4];
viewPort[0] = 0;
viewPort[1] = 0;
viewPort[2] = (int)viewSize.width;
viewPort[3] = (int)viewSize.height;
float aspect = fabsf(viewPort[2]/viewPort[3]);
GLKMatrix4 projectionMatrix = GLKMatrix4MakePerspective(GLKMathDegreesToRadians(65), aspect, 0.1f, 100);
GLKMatrix4 baseModelViewMatrix = GLKMatrix4MakeTranslation(0.0, 0.0, 0.0);
// _rotation is an iVar that takes the device angle into consideration.
baseModelViewMatrix = GLKMatrix4Rotate(baseModelViewMatrix, _rotation, 0.0, 0.0, 1.0f);
GLKMatrix4 modelViewMatrix = GLKMatrix4MakeTranslation(x, y, z);
modelViewMatrix = GLKMatrix4Rotate(modelViewMatrix, rot, 0.0, 0.0, 1.0);
modelViewMatrix = GLKMatrix4Scale(modelViewMatrix, s, s, 1.0);
modelViewMatrix = GLKMatrix4Multiply(baseModelViewMatrix, modelViewMatrix);
retVal = GLKMathProject(object, modelViewMatrix, projectionMatrix, &viewPort[0]);
return retVal;
}
Я тогда называть это, как я рисую объект:
GLKVector3 t = [self projectX:myObject.x Y:myObject.y Z:myObject.z zRot:myObject.angle scale:1.0]; //typically myObject.angle=0.0
debugUITextView.text = NSStringFromGLKVector3(t);
Но все это я получаю что-то вдоль линий «{NaN , 100.23367, 0.99888} "- фактические значения Y и Z меняются - X всегда NaN. Я попытался удалить строки, масштаб и повернуть матриц, а также забивания прямые номера в таких как
GLKVector3 object = GLKVector3Make(0.5, 1, 0);
Но всегда тот же самый результат. Значения y и z кажутся правильными; когда я перетаскиваю объект вниз/вверх по экрану, y уменьшается/увеличивается. Может ли кто-нибудь сказать мне, есть ли волшебный трюк для использования GLKMathProject, пожалуйста !? Thanks, Todd.