使用openGL应用转换后有没有办法跟踪点

Posted

技术标签:

【中文标题】使用openGL应用转换后有没有办法跟踪点【英文标题】:Is there a way to track point after applying transformations with openGL 【发布时间】:2014-06-30 02:52:50 【问题描述】:

我正在尝试找到一种方法在应用转换后跟踪 x、y、z 中的任意点。

类似的东西

 glTranslated(0,2,4);
 glScaled(3,4,5);
 glTranslated(2,4,5);
 glRotated(24,0,1,0);
 point = Point(3,4,2)


 printf ("the point is now in %f,%f and %f",point.x,point.y,point.z);

我正在使用 C 和 openGL 2。

【问题讨论】:

当然,只需对点应用相同的转换即可。 您可以将所有变换记录在一个矩阵中,然后访问该矩阵以找到任何原始点的新位置。 gluProject? 可能是查看 glm 库的好时机? 【参考方案1】:

如果您不想复制 OpenGL 构建和组合矩阵的方式,最简单的方法可能是获取当前矩阵:

GLfloat mat[16];
glGetFloatv(GL_MODELVIEW_MATRIX, mat);

然后您可以将此矩阵与您要转换的点相乘。请记住,OpenGL 以列主要顺序存储矩阵。因此,将其应用于点(x, y, z),乘法将是:

xNew = mat[0] * x + mat[4] * y + mat[8] * z + mat[12];
yNew = mat[1] * x + mat[5] * y + mat[9] * z + mat[13];
zNew = mat[2] * x + mat[6] * y + mat[10] * z + mat[14];

【讨论】:

以上是关于使用openGL应用转换后有没有办法跟踪点的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法在使用cropperjs裁剪后转换初始照片坐标中的一个点

有没有办法在无头机器上使用使用硬件加速 OpenGL 的应用程序?

OpenGL 转换

有没有办法在 GTK3 应用程序中拥有 OpenGL 上下文?

使用 openGL/SDL 绘制点

有没有办法防止 OpenGL 分析器附加到我的应用程序?