gpt4 book ai didi

c - 我应该先翻译还是先旋转?

转载 作者:行者123 更新时间:2023-12-04 03:06:42 25 4
gpt4 key购买 nike

我正在尝试创建一个简单的场景,我可以在其中四处走动,标准是能够平移并使用 key 四处走动。但是,在我的绘制场景功能中,当我平移场景而不是旋转时,平移无法正常工作,因为整个场景只是围绕我旋转,导致对象穿过我。当我旋转而不是平移场景时,我可以正确平移,但是,我只能向某个方向移动,因此如果我向右平移 90 度,我将向左移动而不是向前移动。无论如何,我可以将这两种效果放在一起吗?

这是我用来绘制 View 的代码:


glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
glPushMatrix();

glTranslated(xposition, 0, zposition); //This is where I translate my views
glRotated(yrot, 0, 1, 0); //

glEnableClientState(GL_NORMAL_ARRAY);
glEnableClientState(GL_COLOR_ARRAY);
glEnableClientState(GL_VERTEX_ARRAY);
glBindBuffer(GL_ARRAY_BUFFER_ARB, quadVBO);

glNormalPointer(GL_FLOAT, 0, (void*)sizeof(sideArray));
glColorPointer(3, GL_FLOAT, 0, (void*)sizeof(sideArray)+sizeof(normals));
glVertexPointer(3, GL_FLOAT, 0, 0);

glDrawArrays(GL_QUADS, 0, sizeof(sideArray)/sizeof(GLfloat)/3);

glPopMatrix();
glFlush();
glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_COLOR_ARRAY);
glDisableClientState(GL_NORMAL_ARRAY);
glBindBufferARB(GL_ARRAY_BUFFER_ARB, 0);

以下是一些说明我现在问题的图片:

旋转然后翻译:

图1

http://dl.dropbox.com/u/2747708/Screen%20Shot%202012-04-03%20at%2010.17.39%20PM.PNG

图2

我可以模仿相机的转动

http://dl.dropbox.com/u/2747708/Screen%20Shot%202012-04-03%20at%2010.17.48%20PM.PNG

图3

然而,当我向前走时,它只向一个方向走,而不是我正在看的方向。

http://dl.dropbox.com/u/2747708/Screen%20Shot%202012-04-03%20at%2010.18.30%20PM.PNG

http://dl.dropbox.com/u/2747708/Screen%20Shot%202012-04-03%20at%2010.18.39%20PM.PNG

翻译然后旋转:

图1

http://dl.dropbox.com/u/2747708/Screen%20Shot%202012-04-03%20at%2010.19.44%20PM.PNG

图2

我可以自由地四处走动,径直走向我正在看的任何方向。

http://dl.dropbox.com/u/2747708/Screen%20Shot%202012-04-03%20at%2010.19.52%20PM.PNG

图3

但是,当我旋转场景时,整个事物都会旋转,这会导致对象穿过我并且不再像我旋转然后平移我的 View 那样在 View 中“平移”。

http://dl.dropbox.com/u/2747708/Screen%20Shot%202012-04-03%20at%2010.20.01%20PM.PNG

最佳答案

你的问题不在于转换的顺序。您应该旋转然后平移。

问题是您在移动时没有考虑旋转。运动公式:

movementX = sin(direction);
movementY = cos(direction);

其中方向是从北顺时针旋转的弧度数,正 X 是东,正 Y 是北。

关于c - 我应该先翻译还是先旋转?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9994346/

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