gpt4 book ai didi

c - 来自 Mesa 的 gluPickMatrix 代码

转载 作者:行者123 更新时间:2023-11-30 15:59:37 27 4
gpt4 key购买 nike

我正在研究一些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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com