【问题标题】:Why multiple function call not working in Opengl?为什么多个函数调用在 Opengl 中不起作用?
【发布时间】:2021-06-06 13:53:34
【问题描述】:

我尝试在我的 Opengl 项目中使用不同的函数来制作各种对象并通过一个函数(如 display())调用。但是它不起作用,当我调用两个函数然后显示一个函数另一个没有显示时,我不知道为什么,

我试过这种方式:

#include <windows.h>  // for MS Windows
#include <GL/glut.h>  // GLUT, include glu.h and gl.h
#include <math.h>


void box() {

    glClearColor(1.0f, 1.0f, 1.0f, 1.0f); // Set background color to black and opaque
    glClear(GL_COLOR_BUFFER_BIT);         // Clear the color buffer (background)
    // Draw a Red 1x1 Square centered at origin
    glBegin(GL_POLYGON);              // Each set of 4 vertices form a quad
    glColor3f(1.0f, 0.0f, 0.0f); // Red
    glVertex2f(-0.9f, -0.7f);
    glVertex2f(-0.9f, 0.7f);
    glVertex2f(0.9f, 0.7f);
    glVertex2f(0.9f, -0.7f);    // x, y

    glEnd();


    glFlush();  // Render now


}

void triangle()
{
    glClearColor(1.0f, 1.0f, 1.0f, 1.0f); // Set background color to black and opaque
    glClear(GL_COLOR_BUFFER_BIT);
    glBegin(GL_POLYGON);              // Each set of 4 vertices form a quad
    glColor3f(0.0f, 1.0f, 0.0f); // green

    glVertex2f(-0.9f, -0.7f);
    glVertex2f(-0.4f, 0.7f);
    glVertex2f(0.1f, -0.7f);    // x, y

    glEnd();


    glFlush();  // Render now
}
void display()
{
    box();
    triangle();
}

/* Main function: GLUT runs as a console application starting at main()  */
int main(int argc, char** argv) {
    glutInit(&argc, argv);
    glutInitWindowSize(1000, 600);// Set the window's initial width & height
    glutCreateWindow("OpenGL Setup Test");
    //gluOrtho2D(-0.1,0.7,-0.1,0.3); // Create a window with the given title
    //glutInitWindowSize(500, 500);// Set the window's initial width & height
    glutDisplayFunc(display);// Register display callback handler for window re-paint
    glutMainLoop();           // Enter the event-processing loop
    return 0;
}

请给点建议。

【问题讨论】:

  • glClear(GL_COLOR_BUFFER_BIT)清除所有颜色

标签: c++ opengl glut


【解决方案1】:

您在渲染每个形状之前清除缓冲区,从而擦除您刚刚绘制的前一个形状。相反,您应该每个display 只清除一次。 glFlush 也是如此:

void box() {
    // Draw a Red 1x1 Square centered at origin
    glBegin(GL_POLYGON);
    glColor3f(1.0f, 0.0f, 0.0f); // Red
    glVertex2f(-0.9f, -0.7f);
    glVertex2f(-0.9f, 0.7f);
    glVertex2f(0.9f, 0.7f);
    glVertex2f(0.9f, -0.7f);    // x, y
    glEnd();
}

void triangle()
{
    glBegin(GL_POLYGON);
    glColor3f(0.0f, 1.0f, 0.0f); // green
    glVertex2f(-0.9f, -0.7f);
    glVertex2f(-0.4f, 0.7f);
    glVertex2f(0.1f, -0.7f);    // x, y
    glEnd();
}

void display()
{
    glClearColor(1.0f, 1.0f, 1.0f, 1.0f); // Set background color to white and opaque
    glClear(GL_COLOR_BUFFER_BIT);         // Clear the color buffer (background)
    box();
    triangle();
    glFlush();  // Render now
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-03
    • 1970-01-01
    • 2021-10-04
    • 2013-11-25
    • 2012-01-23
    • 1970-01-01
    • 2022-12-03
    相关资源
    最近更新 更多