当我运行此代码时,控制台将“无效值”显示为错误。我在书中研究过,但没有找到解决办法。他们甚至没有提到这个价值是什么。我认为存储在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/