OpenGL ES坐标来筛选像素

时间:2016-02-22 07:23:05

标签: c++ opengl-es

我正在尝试在openGL es 2.0中制作广告应用程序。 最小化这里的问题,我可以解释为例,我创建了一个矩形动画立方体,并在其上面放置了一些广告图像。模型和动画在3DS Max中创建并转换为.pod,它完美地进入了电视屏幕。

现在我想知道它以像素为单位覆盖了多少屏幕,如果我的投影是1280x720,因为缩放和翻译已经在广告客户手中并且他不知道坐标。广告客户只知道像素的语言。因此,如果他以像素为单位增加X轴刻度,我需要将它们转换为OpenGL坐标,并且还必须自己调整平移,这样立方体就不会超出屏幕。

简而言之,如何在屏幕中获取立方体拍摄的像素数?有什么简单的方法吗?

1 个答案:

答案 0 :(得分:0)

通过将管道渲染到“OpenGL坐标/顶点”来应用的MVP matrix {&#39}。最终提取屏幕坐标。

因此可以使用它inverse来计算顶点。

现在问题是顶点的多种组合,视图和投影矩阵可以给出相同的屏幕坐标,即从顶点位置到屏幕坐标的映射不唯一

因此我们通过修复所有其他变量(在翻译的情况下)将等式中的未知数减少为 x y )可能只是 z (如果是缩放)。

例如,对于翻译,代码可以是:

Point3D get3dPoint(Point2D point2D, int width,
    int height, Matrix viewMatrix, Matrix projectionMatrix) {

    double x = 2.0 * point2D.x / clientWidth - 1;
    double y = - 2.0 * point2D.y / clientHeight + 1;
    Matrix4 viewProjectionInverse = inverse(projectionMatrix *
         viewMatrix);

    double fixedZ = 1.0;
    Point3D point3D = new Point3D(x, y, fixedZ); 
    return viewProjectionInverse.multiply(point3D);

}