-1

次のコードで 3D モデルを回転させています。

_mesh = [[NGLMesh alloc] initWithFile:@"01.obj" settings:settings delegate:self];

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{

    [super touchesMoved:touches withEvent:event];

    UITouch *touch;
    CGPoint pointA,pointB;

    if ([touches count]== 1) {

        touch = [[touches allObjects]objectAtIndex:0];
        pointA = [touch locationInView:self.view];
        pointB = [touch previousLocationInView:self.view];
        //      _mesh.rotateY -= (pointA.x - pointB.x) * 0.5f;
        //      _mesh.rotateX -= (pointA.y - pointB.y) * 0.5f;

        _mesh.rotateY += (pointA.x - pointB.x) * 0.5f;
    _mesh.rotateX += (pointA.y - pointB.y) * 0.5f;
    }
}

コードは想定どおりに回転しますが、ビューのどこをタップしても回転します。インポートしたモデルの中で触れている間だけ回転させたいです。どうすればいいですか?

4

2 に答える 2

1

次のコードはある程度役立つかもしれませんが、

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{  
[super touchesMoved:touches withEvent:event];

UITouch *touch;
CGPoint pointA,pointB;
if ([touches count]== 1)
{
    touch = [[touches allObjects]objectAtIndex:0];
    pointA = [touch locationInView:self.view];
    pointB = [touch previousLocationInView:self.view];

    NGLTouching touchingStruct = [_camera touchingUnderPoint: pointA];

    if (touchingStruct.mesh)   
    {
        _mesh.rotateY += (pointA.x - pointB.x) * 0.5f;
        _mesh.rotateX += (pointA.y - pointB.y) * 0.5f;
    }
}

それでも、メッシュのバウンディング ボックスは変更されません。このブログ投稿を参照できます。

于 2013-07-16T09:29:57.757 に答える
1

このためには、デリゲートを使用CGRectContainsPointして、3D モデル オブジェクト フレーム (画面に対応する) と現在のタッチ位置との比較を手動で取得する必要があります。touchesMoved

_mesh.rotate結果CGRectContainsPointが YES を返す場合にのみコードを記述します。

注: NinevehGLには、フレームワークに関連することを議論するための独自のフォーラムがあります。適切で迅速な回答を得るために、そこにクエリを投稿してください。

于 2012-12-05T09:18:14.690 に答える