c++ - 有没有办法在使用 openGL 应用变换后跟踪点

标签 c++ c opengl

我正在尝试找到一种方法来在应用变换后跟踪 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。

最佳答案

如果您不想复制 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];

关于c++ - 有没有办法在使用 openGL 应用变换后跟踪点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24482361/

相关文章:

c++ - 项目错误 : Unknown module(s) in QT: quick

c++ - 收集唯一的排序 vector

c++ - 我在使用 boolean 接受器时遇到问题

c++ - 浮点,相等比较是否足以防止被零除?

使用 C 语言更改 BIOS 设置

c++ - OpenCL 编译器异常情况

java - UV 和 ST 纹理坐标之间的差异

c# - gl.DrawArrays 中的 AccessViolationException

c++ - 这个收购围栏是否被观察到?

opengl - 未声明的标识符texture2DLodOffset的调用无效