美文网首页
OpenGL ES 3D世界坐标转换为屏幕坐标

OpenGL ES 3D世界坐标转换为屏幕坐标

作者: X1aoHey | 来源:发表于2019-01-16 16:09 被阅读24次
    - (CGPoint)worldToScreen:(GLKVector4)vector
    {
        GLKMatrix4 mvp = GLKMatrix4Multiply(GLKMatrix4Multiply(_projectionMatrix, _cameraMatrix), _modelViewMatrix) ;
        GLKVector4 ndc = GLKMatrix4MultiplyVector4(mvp, vector);
        
        float x = ndc.x / ndc.w;
        float y = ndc.y / ndc.w;
        
        float k1 = self.frame.size.width / 2 ;
        float k2 = -self.frame.size.height / 2;
        
        float b1 = k1;
        float b2 = -k2;
        
        x = k1 * x + b1;
        y = k2 * y + b2;
        
        CGPoint p = CGPointMake(x, y);
        
        return p;
    }
    

    基本思路:
    Position * ModelMatrix * ViewMatrix * ProjMatrix,之后再进行Viewport映射就好了

    Position 是本地坐标空间
    ModelMatrix 是模型矩阵
    ViewMatrix 是视区矩阵(观察矩阵,又叫相机矩阵)
    ProjMatrix 是投影矩阵

    上面的vector 是3D坐标补齐W值之后的四维向量,如坐标为(5,30,23),对应的四维向量为(5,30,23,1)。

    相关文章

      网友评论

          本文标题:OpenGL ES 3D世界坐标转换为屏幕坐标

          本文链接:https://www.haomeiwen.com/subject/bwmmdqtx.html