gpt4 book ai didi

c++ - gluLookAt 的兼容性函数

转载 作者:行者123 更新时间:2023-11-30 02:45:23 24 4
gpt4 key购买 nike

我刚买了一台新电脑,现在必须让我的演示程序与 SDL2/OpenGL 一起运行。我使用该程序尝试了各种技术并使用了 gluLookAt(显然,不应该再使用它,甚至永远不应该使用它)。

现在我正在寻找一种方法来替换 gluLookAt 方法,方法是构建一个与 gluLookAt 相同的转换矩阵。我遇到了this声称可以替代 gluLookAt(答案 - 不是问题)。

我的实现看起来像这样(我假设 j ^ k 表示 j 和 k 的叉积 - 如果我错了请纠正我):

//Compat method: gluLookAt deprecated
void util_compat_gluLookAt(GLfloat eyeX, GLfloat eyeY, GLfloat eyeZ, GLfloat lookAtX, GLfloat lookAtY, GLfloat lookAtZ, GLfloat upX, GLfloat upY, GLfloat upZ) {
Vector3f up (upX, upY, upZ);
Vector3f lookAt (-lookAtX, -lookAtY, -lookAtZ);
Vector3f eye (eyeX, eyeY, eyeZ);
Vector3f i = up ^ lookAt;
Matrix4x4 mat (new GLfloat[16]
{i.getX(), upX, lookAt.getX(), 0,
i.getY(), upY, lookAt.getY(), 0,
i.getZ(), upZ, lookAt.getZ(), 0,
0, 0, 0, 1});
Vector3f translate = mat * (Vector3f()-eye); // Not yet correctly implemented: Negative of vector eye ([0,0,0]-[eyeX,eyeY,eyeZ])
mat.setItem(3,0,translate.getX());
mat.setItem(3,1,translate.getX());
mat.setItem(3,2,translate.getX());
glMultMatrixf(mat.transpose().getComponents());
}

谁做错了事 - 我的信息来源还是我?我该如何解决这个问题?注意:我不会在我的实际项目中使用它,但我的演示程序仍然需要它,它也将被审查以进行评分。

最佳答案

我只是想实现 gluLookAt 兼容性方法,例如 gluLookAt 在旧版本的 Mesa3D 中实现:( glu.c of Mesa3D 3.2 )

现在它看起来如下并且可以工作:

//Compat method: gluLookAt deprecated
void util_compat_gluLookAt(GLfloat eyeX, GLfloat eyeY, GLfloat eyeZ, GLfloat lookAtX, GLfloat lookAtY, GLfloat lookAtZ, GLfloat upX, GLfloat upY, GLfloat upZ) {
Vector3f x, y, z;
z = Vector3f(eyeX-lookAtX, eyeY-lookAtY, eyeZ-lookAtZ).normalize();
y = Vector3f(upX, upY, upZ);
x = y ^ z;
y = z ^ x;
x = x.normalize();
y = y.normalize();
// mat is given transposed so OpenGL can handle it.
Matrix4x4 mat (new GLfloat[16]
{x.getX(), y.getX(), z.getX(), 0,
x.getY(), y.getY(), z.getY(), 0,
x.getZ(), y.getZ(), z.getZ(), 0,
-eyeX, -eyeY, -eyeZ, 1});
glMultMatrixf(mat.getComponents());
}

我知道这是 OpenGL 今天不使用的一种方式,但不知何故所有教程似乎都使用 gluLookAt 并因此传达了 OpenGL 中相机的存在。我自己还是要摆脱这种关于OpenGL的观点……

关于c++ - gluLookAt 的兼容性函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24492274/

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