当我运行此代码时,控制台将“无效值”显示为错误。我在书中研究过,但没有找到解决办法。他们甚至没有提到这个价值是什么。我认为存储在gluNewQuadric返回的指针中的地址号可能超出gluquaric类型的范围,但无法确定或修复它

#include <stdio.h>
#include <stdlib.h>
#include <GL/glut.h>

#ifndef CALLBACK
#define CALLBACK
#endif

void CALLBACK erro(GLenum coderro)
{
    const GLubyte *estring;
    estring=gluErrorString(coderro);
    fprintf(stderr, "Erro de quadrica: %s\n", estring);
    exit(0);
}


void tela ()
{
    GLUquadric *quadrica;
    glClearColor(1.0, 1.0, 1.0, 1.0);
    glClear(GL_COLOR_BUFFER_BIT);

    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glOrtho(-30.0, 30.0, -30.0, 30.0, 1, 100);

    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    glTranslated(0.0, 0.0, -20.0);

    glColor3f(1.0, 0.0, 0.0);
    quadrica=gluNewQuadric();
    gluQuadricCallback(quadrica, GLU_ERROR, erro);
    gluQuadricDrawStyle(quadrica, GLU_FILL);
    gluDisk(quadrica, 0.0, 5.0, 1, 1);

    glFlush();
}

int main (int argc, char **argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode( GLUT_SINGLE | GLUT_RGB );
    glutInitWindowSize(500, 500);
    glutCreateWindow("Tesselacao");
    glutDisplayFunc(tela);
    glutMainLoop();
}

最佳答案

gluDisk规范:

 void gluDisk(    GLUquadric* quad,
     GLdouble inner,
     GLdouble outer,
     GLint slices,
     GLint loops);

参数
[...]
slices指定z轴周围的细分数。
这意味着slices必须至少为3,因为要生成形状,磁盘周围至少需要3个点。
例如
gluDisk(quadrica, 0.0, 5.0, 3, 1);将生成一个三角形
gluDisk(quadrica, 0.0, 5.0, 5, 1);将生成一个五角大楼。

关于c - 调用gluNewQuadric时出现“无效值”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54263677/

10-09 23:11