OpenGL 使用 gluLookat()

Posted

技术标签:

【中文标题】OpenGL 使用 gluLookat()【英文标题】:OpenGL using gluLookat() 【发布时间】:2011-12-17 02:54:57 【问题描述】:

我需要 gluLookAt() 方面的帮助。我在调用 glOrtho() 后尝试使用它(我认为这是正确的),试图从 y 轴上略微抬高的视图向下查看 z 轴。根据我对 gluLookAt() 的了解,前三个参数是视图的来源或“眼睛”,接下来的三个参数是眼睛正在看的位置,最后三个是视角?

我尝试了很多不同的设置,但无法在屏幕上渲染任何内容,所有尝试都导致黑屏。 我已经在网上搜索了整个例子来实践它的使用,除了函数的解释之外找不到任何东西(我想我理解但无法开始工作)。

我不会发布我尝试过的任何代码,因为我尝试过的不同方法太多了,现在我只剩下一堆乱七八糟的代码,坦率地说我不想要让任何人的眼睛流血。

我的问题是,任何人都可以发布或更好地描述一个使用 gluLookAt() 的小程序示例

这是我目前拥有的糟糕的代码(仅用于测试):

#include <SDL/SDL.h>
#include <SDL/SDL_opengl.h>
#include <GL/glu.h>
#include <windows.h>

void init_ortho(int width, int height)



SDL_Init(SDL_INIT_EVERYTHING);
SDL_SetVideoMode(width,height,32,SDL_OPENGL);
SDL_WM_SetCaption( "OpenGL Test", NULL );

glClearColor( 0, 0, 0, 0 );
glViewport(0, 0, 640, 480);
glMatrixMode( GL_PROJECTION );
glLoadIdentity();
glOrtho( 0, width , height , 0, 0, 20 );
glMatrixMode( GL_MODELVIEW );
gluLookAt(0,0,0, 300,300, 5, 0,1,0);
glLoadIdentity();
glClear(GL_COLOR_BUFFER_BIT);



int Check(int keystroke, int x)



if (keystroke == 65)
x += 10;

return x;



int main(int argc, char **argv)

init_ortho(640, 480);

glLoadIdentity();

int x = 300;
bool quit = false;

while (quit == false)



for (int i = 0; i < 300; i++)




if (GetAsyncKeyState(i) == -32767)


    x = Check(i, x);
if (x > 400)
quit = true;
    glTranslatef(x,300,10);
glColor4f(1.0,1.0,1.0,1.0);

glBegin(GL_QUADS);
glVertex3f(0,  0,0);
glVertex3f(100, 0,0);
glVertex3f(100,100,0);
glVertex3f(0, 100,0);
glEnd();

glLoadIdentity();

SDL_GL_SwapBuffers();

glClear( GL_COLOR_BUFFER_BIT );








SDL_Quit();

return 0;

【问题讨论】:

发布一些代码会有所帮助。 我编辑了帖子以包含一些糟糕的代码 【参考方案1】:

最后三个是视角?

错了。最后一个参数定义了相机“直立”的方向。想象一个相机,你把一根棍子放在它上面。上面的那根棍子是向上向量。


很抱歉告诉你这个,但是:你做这一切的方式是非常错误的。

首先,您没有适当的事件处理循环。您需要在某处致电SDL_WaitEventSDL_PollEvent。此外,在某些动画的程序主循环中使用for 0...300 循环是绝对没有意义的。

然后,您的 gluLookAt 将创建一个视图转换,使渲染三角形的外观边缘。

无法修复代码。我说从头开始,并采取适当的教程。

【讨论】:

我知道这段代码大部分都是垃圾,我唯一关心的是让 gluLookAt() 实际查看除空白屏幕之外的其他内容,我知道我在代码中做错了,但我没有知道如何 感谢您的回答,我有没有办法让 gluLookAt() 在这段代码中工作? @Michael:gluLookAt 是您遇到的最少的问题。你需要完全重构你的代码,否则你将很难让某些东西正确显示。 如果我从代码中调用 gluLookAt(),我会得到一个四边形,当我按下字母“A”时,它会在屏幕上移动(当 z 方向的平移为 0 -10 时)用于绘制四边形 我按照 Lazyfoo 教程使用 SDL 和 OpenGL 制作了一些不错的程序。我只是希望有一些像样的教程甚至是我能找到的使用 gluLookAt() 的示例程序

以上是关于OpenGL 使用 gluLookat()的主要内容,如果未能解决你的问题,请参考以下文章

Opengl视点转换如何gluLookAt

两个Sphere和gluLookAt函数之间的OpenGL碰撞

在 OpenGL 上绘制点的意外 gluLookAt 行为

OpenGL的gluLookAt和glOrtho的关系

OpenGL gluLookat 不适用于着色器

gluLookAt 似乎产生了错误的视图,OpenGL