gpt4 book ai didi

c - 从 glOrtho 切换到 gluPerspective

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

我在 (0,0) 处抽了一辆汽车,并设置了一些障碍,但现在我主要关心的是从 glPerspective 切换到 glOrtho,反之亦然。当我从透视切换到正射时,我得到的只是黑屏。

void myinit(){
glClearColor(0.0,0.0,0.0,0.0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(60,ww/wh,1,100);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(-5,5,3,backcarx,topcarx,0,0,0,1);
}

void menu(int id){
/*menu selects if you want to view it in ortho or perspective*/
if(id == 1){
glClear(GL_DEPTH_BUFFER_BIT);
glViewport(0,0,ww,wh);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-2,100,-2,100,-1,1);
glMatrixMode(GL_MODELVIEW);
glutPostRedisplay();
}
if(id == 2){
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(60,ww/wh,1,100);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
viewx = backcarx - 10;
viewy = backcary - 10;
gluLookAt(viewx,viewy,viewz,backcarx,topcarx,0,0,0,1);
}
}

我试过使用清晰的深度缓冲区,但仍然不起作用。

最佳答案

你的心理障碍在于:

void myinit(){
glClearColor(0.0,0.0,0.0,0.0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(60,ww/wh,1,100);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(-5,5,3,backcarx,topcarx,0,0,0,1);
}

OpenGL 未初始化! 是的,有些操作只是偶尔执行,例如加载纹理。但总的来说,OpenGL 是一个基于状态的绘图系统。这意味着,你在使用它之前就设置了所有与绘图相关的东西。 “myinit”函数中的那段代码实际上属于显示函数。一旦你有了它,进行切换就变得微不足道了:设置一个枚举变量并根据变量的值在绘制之前设置正确的投影。

作为一般规则:OpenGL 绘图操作——以及设置转换状态属于那组操作——只属于绘图代码。因此,您的“菜单”功能根本没有意义。它是一个事件处理程序。事件处理程序处理输入,它们不生成输出。在事件处理程序中,您更改变量的值,然后标记要执行的输出。


因评论而更新:

typedef enum ProjectionType_t { Ortho, Perspective } ProjectionType;

ProjectionType projection;

void onMenu(int entry)
{
swtich(entry) {
case ...:
projection = Ortho; break;
case ...:
projection = Perspective; break;
}

glutPostRedisplay();
}

void display(void)
{
glClear(...);

glViewport(...);

glMatrixMode(GL_PROJECTION);
glLoadIdentity();
switch(projection) {
case Ortho:
glOrtho(...); break;

case Perspective:
gluPerspective(...); break;
}

glMatrixMode(GL_MODELVIEW);
glLoadIdentity();

...

}

关于c - 从 glOrtho 切换到 gluPerspective,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13272046/

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