c - 来自 Mesa 的 gluPickMatrix 代码

标签 c opengl

我正在研究一些OpenGL代码,我找到了gluPickMatrix函数的Mesa代码:

void gluPickMatrix(GLdouble x, GLdouble y, GLdouble width, GLdouble height, 
GLint viewport[4])
{
 GLfloat m[16];
 GLfloat sx, sy;
 GLfloat tx, ty;

 sx = viewport[2] / width;
 sy = viewport[3] / height;
 tx = (viewport[2] + 2.0 * (viewport[0] - x)) / width;
 ty = (viewport[3] + 2.0 * (viewport[1] - y)) / height;

 #define M(row, col) m[col*4+row]
  M(0, 0) = sx;
  M(0, 1) = 0.0;
  M(0, 2) = 0.0;
  M(0, 3) = tx;
  M(1, 0) = 0.0;
  M(1, 1) = sy;
  M(1, 2) = 0.0;
  M(1, 3) = ty;
  M(2, 0) = 0.0;
  M(2, 1) = 0.0;
  M(2, 2) = 1.0;
  M(2, 3) = 0.0;
  M(3, 0) = 0.0;
  M(3, 1) = 0.0;
  M(3, 2) = 0.0;
  M(3, 3) = 1.0;
 #undef M

 glMultMatrixf(m);
}

在这种情况下,我的疑问在于 M 宏和“col*4+row”操作。这个方程,据我理解,就是获取pick矩阵的索引,然后给它们赋值。

这个宏是比简单地使用 m[0] = some 更好的方法吗?

速度更快吗?或者更有效率?

最佳答案

无论如何,它都不会更快,编译器会看到扩展的代码(预处理器在编译器到达之前扩展宏)。

这只是一种方便,可以节省键入几个字符,并使代码更具可读性 - 对等效常量进行硬编码会不太清晰。

关于c - 来自 Mesa 的 gluPickMatrix 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8660454/

相关文章:

c - 递增指针而不是递增数组及其索引

opengl - 如何使用远程 GPU 进行硬件加速 3D 渲染?

c++ - Windows 10 桌面窗口管理器交换时间?

opengl - 使用 OpenGL 可以加速哪些几何计算

windows - 具有多个设备(监视器)的 OpenGL 上下文

java - 四边形出现在其他人面前,而他们不在

C - 删除递归函数中的重复结果

c - 如何使用参数和数组查找 C 中最大和最小元素?

c - 如何在_Static_assert 中使用const int?

c - 为什么它要求相同但在代码中只有 1 个 printf()?