0

我想在水龙头上添加一个 CC3Node。但是,我使用的代码产生了一个奇怪的东西。我的对象被放置在触摸位置,但在第三象限(这样我的屏幕将被分成 4)

这是问题的一个例子:在此处输入图像描述

总结一下,当我点击白色方块的中心时,我得到了 hello world 放在象限的中心等。当我点击右上角时,我得到了重叠的紫色 hello world白色方块。

这是我正在使用的代码:

CGSize winSz = [[CCDirector sharedDirector] winSizeInPixels];
    GLfloat aspect = winSz.width / winSz.height;

    // Express touchPoint X & Y as fractions of the window size
    GLfloat xtp = ((2.0 * touchPoint.x) / winSz.width) - 1;
    GLfloat ytp = ((2.0 * touchPoint.y) / winSz.height) - 1;

    // Get the tangent of half of the camera's field of view angle
    GLfloat effectiveFOV = ((ViewInterface*)[ViewInterface sharedViewInterface]).currentScene.activeCamera.fieldOfView / ((ViewInterface*)[ViewInterface sharedViewInterface]).currentScene.uniformScale;
    GLfloat halfFOV = effectiveFOV / 2.0;
    GLfloat tanHalfFOV = tanf(DegreesToRadians(halfFOV));

    // Get the distance from the camera to the projection plane
    GLfloat zCam = ((ViewInterface*)[ViewInterface sharedViewInterface]).currentScene.activeCamera.globalLocation.z;

    // Calc the X & Y coordinates on the Z = 0 plane using trig and similar triangles
    CC3Vector tp3D = cc3v(tanHalfFOV * xtp * aspect * zCam,
                          tanHalfFOV * ytp * zCam,
                          0.0f);

tp3D 是我使用 .location 属性在节点中设置的最终坐标。

我的图层正在接收手势并执行以下操作:

-(void) handleTapSelection: (UITapGestureRecognizer*) gesture {

    if ( [self cc3ValidateGesture: gesture] && (gesture.state == UIGestureRecognizerStateEnded) ) {
            CGPoint touchPoint = [self cc3ConvertUIPointToNodeSpace: gesture.location];
            [[StateInterface sharedStateInterface] tapDetected:gesture inView:nil locationInView:touchPoint];
            //[self.mashUpScene pickNodeFromTapAt: touchPoint];
        }
}

如果我不首先使用此方法进行转换:cc3ConvertUIPointToNodeSpace,那么我会反转上下抽头。

我验证了winSz中返回的屏幕大小确实是正确的大小(2048、1320)。

此外,tp3D x 和 y 总是负数,这很奇怪......代码来自这里: http: //www.cocos2d-iphone.org/forum/topic/14790

4

1 回答 1

1

你有没有看过 CoCos3d DemoMash,它对 cocos3d 的所有功能都有解释和代码,你想要做的,已经在那里实现了。

于 2013-03-24T17:28:45.507 回答