1

OpenGL シーン座標をスクリーン座標に変換するのに問題があります。

ndcを取得するには、座標にモデルビューマトリックスを掛けてから投影マトリックスを掛ける必要があると思いました。しかし、私は奇妙な座標を取得しています。

ここに私のコードがあります

GLKVector3 coor = GLKVector3Make(point.x, point.y, 0);
GLKMatrix4 modelview = GLKMatrix4MakeWithArray(glProjectionMatrix);
GLKMatrix4 projetion = GLKMatrix4MakeWithArray(modelViewMatrix.data);

GLKVector3 eyeCoor = GLKMatrix4MultiplyVector3(modelview, coor);
GLKVector3 ndcCoor = GLKMatrix4MultiplyVector3(projetion,eyeCoor);

CGPoint p = CGPointMake(ndcCoor.x, ndcCoor.y);

何か案が ?

4

2 に答える 2

1

さらに簡単: GLKit Math 関数 GLKMathProject を使用します。

GLKVector3 GLKMathProject (
   GLKVector3 object,
   GLKMatrix4 model,
   GLKMatrix4 projection,
   int *viewport
);

だから、あなたの場合、例えば

int viewport[] = {0, 0, 320, 480};
GLKVector3 windowVector = GLKMathProject(coor, modelview, projetion, viewport);
CGPoint p = CGPointMake(windowVector.x, windowVector.y);

原点は左下にあることに注意してください。したがって、原点が左上にある UIKit 座標を使用している場合は、y 座標を切り替えます。

CGPoint p = CGPointMake(windowVector.x, window.bounds.size.height - windowVector.y);
于 2012-11-27T10:19:30.380 に答える