【问题标题】:why does not my opengl program work?为什么我的 opengl 程序不起作用?
【发布时间】:2015-04-08 20:44:01
【问题描述】:

我正在编写一个程序来在我的 XY 平面上绘制一个正方形并使其旋转 360 度,但它不起作用。

void setupRC()  
{  
    glClearColor(0,0,1,1);  
    glColor3f(1,0,0);  
}  
void timerfunc(int value)  
{  
    glutPostRedisplay();  
    glutTimerFunc(33, timerfunc ,1);  
}    
void RenderScene()   
{  
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);  
    glMatrixMode(GL_MODELVIEW);  
    glLoadIdentity();  
    static GLfloat rot = 0.0f,x =0.0f , y=10.0f , z=0.0f;  
    rot++;  
    x = 10 * cos(rot);  
    y = 10 * sin(rot);  
    glPushMatrix();
glRotatef(rot,0.0,1.0,0.0);
glBegin(GL_POLYGON);
    glVertex3i(10,-10,0);
    glVertex3i(10,10,0);
    glVertex3i(-10,10,0);
    glVertex3i(-10,-10,0);
    glVertex3i(10,-10,0);
    glEnd();  
    glPopMatrix();  
    glutSwapBuffers();  
}  
void ChangeSize(GLint w, GLint h)  
{  
    if(h==0)  
        h = 1;  
    GLfloat aspectratio = (GLfloat)w/(GLfloat)h;  

    glViewport(0,0,w,h);  
    glMatrixMode(GL_PROJECTION);  
    glLoadIdentity();  
    gluPerspective(60.0f, aspectratio, -1.0, 400.0);  
    glMatrixMode(GL_MODELVIEW);  
    glLoadIdentity();  

}  

int main(int argc , char **argv)  
{  
    glutInit(&argc, argv);  
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH);  
    glutInitWindowSize(800,600);  
    glutInitWindowPosition(0,0);  
    glutCreateWindow("chelsea");  
    glutTimerFunc(33, timerfunc , 1);  
    setupRC();  
    glutDisplayFunc(RenderScene);  
    glutReshapeFunc(ChangeSize);  
    glutMainLoop();  

    return 0;  
}  

我没有得到任何输出,只是一个空白屏幕。

【问题讨论】:

  • 好吧,先生,我也列出了我的主要功能,它会创建一个窗口,调用重塑功能,显示功能和设置功能
  • 程序有效。感谢您的帮助

标签: opengl


【解决方案1】:

gluPerspective(60.0f, 纵横比, -1.0, 400.0);

看起来不对,近剪裁平面需要是正数

【讨论】:

  • 我们怎样才能找到近处和远处?
  • 设置接近 0.1 等非常小的值 - Z 值小于此值的所有内容都不会显示。 far 参数也一样,大于这个的所有东西都会消失。
  • 那么先生,这个 z 值从哪里开始?我的意思是,如果 z = 0 表示什么,我在那里写的就是我从 superbible 那里得到的。他们使用了 -ve 值。我也编辑了我的程序。再看看。我对 gluperspective 部分没有做太多。检查我包含的 glRotatef。谢谢
  • 你必须为你的应用解决这个问题。基本上你想看到的东西离相机的最小距离和最大距离是多少。它不能是 0。所以如果我理解正确,0.1 和 20.0 对你的程序来说是合理的。 z = 0 从“相机”位置开始零距离,但你不能使用它,因为如果你这样做,数学就无法解决小于零没有意义,因为你看不到相机位置的东西。您希望它们尽可能接近您的需要,因为它们越大,z 缓冲区的精度就越差。
  • 我仍然处于阴影中,让我说一下,我理解的是,近值是相机与原点之间的距离,即 z=0,远值是相机之间的距离我希望相机能看到多远?
【解决方案2】:

你真的应该使用glRotatef 进行旋转,因为如果你想要一个围绕XY 旋转的平面,你的代码是错误的(xy 对于rot 的某些值将是0,你会得到什么都看不见)。

您或许应该使用glColor 命令为您的多边形添加颜色。

正如 JB 所说,您的 gluPerspective 呼叫似乎也错误。参考this link

【讨论】:

  • 好的,先生,让我试试。谢谢你,我已经在 setupRC() glColor3f 中给出了颜色
  • 啊,没认出来,好吧。
  • 我让它工作了。谢谢大家的帮助。非常感谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-25
  • 2016-06-13
  • 2013-10-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多