我正在尝试在openGL es 2.0中制作广告应用程序。 最小化这里的问题,我可以解释为例,我创建了一个矩形动画立方体,并在其上面放置了一些广告图像。模型和动画在3DS Max中创建并转换为.pod,它完美地进入了电视屏幕。
现在我想知道它以像素为单位覆盖了多少屏幕,如果我的投影是1280x720,因为缩放和翻译已经在广告客户手中并且他不知道坐标。广告客户只知道像素的语言。因此,如果他以像素为单位增加X轴刻度,我需要将它们转换为OpenGL坐标,并且还必须自己调整平移,这样立方体就不会超出屏幕。
简而言之,如何在屏幕中获取立方体拍摄的像素数?有什么简单的方法吗?
答案 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);
}