gpt4 book ai didi

opengl - 使用 gluLookAt() 横向移动; C++

转载 作者:行者123 更新时间:2023-12-04 07:04:41 37 4
gpt4 key购买 nike

我正在尝试使用 openGl C++ 中的“gluLookAt()”来做一个简单的任务:“基于相机的运动”。我想要的是允许凸轮通过以下方案的键移动:

Directional keys:

← = Turn left

→ = Turn right

↑ = Look upward

↓ = Look downward

W, S, A, D

W = Move forward

S = Move backward

A = Move left (sideways)

D = Move right (sideways)

Q, E

Q = Left spin

E = Right spin



到目前为止,我设法完成了我需要的所有类型的运动,除了使用键“A”和“D”的侧身。无论我尝试多少次,当我按下其中一个键时,凸轮都不会按照我希望的方式移动。有人告诉我,我需要执行某种类型的“交叉产品”,但是,尽管对此进行了一些试验,但我真的很迷茫。
//variables

float x1 = 0.0f, x2 = 0.0f, x3 = 0.0f, y1 = 1.0f, y2 = 1.0f, y3 = 1.0f, z1 = 5.0f, z2 = -1.0f, z3 = 0.0f;

//the camera

gluLookAt( x1, y1, z1, x1+x2, y2, z1+z2, x3, y3, z3);

//methods

void special(int key, int xx, int yy)
{

switch (key) {
case GLUT_KEY_LEFT :
camAngle -= 0.09f;
x2 = sin(camAngle);
z2 = -cos(camAngle);
break;
case GLUT_KEY_RIGHT :
camAngle += 0.09f;
x2 = sin(camAngle);
z2 = -cos(camAngle);
break;
///////////////////////////////////////////////////////

void normal(unsigned char key, int x, int y)
{

float part = 0.9f;

switch (key) {
case 'w' :
x1 += x2 * part ;
z1 += z2 * part ;
break;
case 's' :
x1 -= x2 * part ;
z1 -= z2 * part ;
break;
case 'a' :
??????????????????
break;
case 'd' :
??????????????????

最佳答案

由于您没有发布所有代码并且它在奇怪的地方被切断,因此不清楚您上面的所有事情在哪里发生。但是如果你想左右移动相机,应该相当容易。 gluLookAt()的定义是:

gluLookAt (cameraX, cameraY, cameraZ, lookAtX, lookAtY, lookAtZ, upX, upY, upZ);

在不改变角度的情况下左右移动相机被称为“搬运”,有时第一人称射击者将其称为向左或向右扫射的角色。为此,您需要将相机和观察点移动相同的量,如下所示:
gluLookAt (cameraX + deltaX, cameraY + deltaY, cameraZ + deltaZ, lookAtX + deltaX, lookAtY + deltaY, lookAtZ + deltaZ, upX, upY, upZ);

对于左右,deltaX 可能是 + 或 - 某个数量,deltaY 和 deltaZ 可能是 0。

关于opengl - 使用 gluLookAt() 横向移动; C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18166547/

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