如何继续循环遍历 GLfloat Points
How to continue looping through GLfloat Points
我在画简单的图时遇到了问题。
我不确定这里的问题是什么,但我有一些要点:
GLfloat ctrlpoints[13][3] = {
{0.1, 0.1, 0.0},
{0.7, 0.1, 0.0},
{0.9, 0.1, 0.0},
{0.9, 0.3, 0.0},
{0.7, 0.3, 0.0},
{0.6, 0.3, 0.0},
{0.55, 0.25, 0.0},
{0.5, 0.2, 0.0},
{0.2, 0.2, 0.0},
{0.12, 0.2, 0.0},
{0.1, 0.3, 0.0},
{0.07, 0.2, 0.0},
{0.1, 0.1, 0.0} };
我希望代码中的所有点都连接起来,但它在第 6 组点后停止。
我的其余代码:
void init(void)
{
glClearColor(0.0, 0.0, 0.0, 0.0);
glShadeModel(GL_FLAT);
glMap1f(GL_MAP1_VERTEX_3, 0.0, 1.0, 3, 5, &ctrlpoints[0][0]);
glEnable(GL_MAP1_VERTEX_3);
}
void display(void)
{
int i;
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1.0, 1.0, 1.0);
glBegin(GL_LINE_STRIP);
for (i = 0; i <= 30; i++)
glEvalCoord1f((GLfloat)i / 30.0);
glEnd();
glPointSize(0.5);
glColor3f(1.0, 1.0, 0.0);
glBegin(GL_POINTS);
for (i = 0; i < 12; i++)
glVertex3fv(&ctrlpoints[i][0]);
glEnd();
glFlush();
}
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize(500, 500);
glutInitWindowPosition(100, 100);
glutCreateWindow(argv[0]);
init();
glutDisplayFunc(display);
glutMainLoop();
return 0;
}
基于the documentation,glMap1f
的第5个参数是点数。您将其设置为 5
,这就是用于评估的控制点数。您应该将其替换为 13,或使用 sizeof
自动计算该数字:
int npoints = sizeof(ctrlpoints)/sizeof(ctrlpoints[0]);
glMap1f(GL_MAP1_VERTEX_3, 0.0, 1.0, 3, npoints, &ctrlpoints[0][0]);
这不是你要问的,但在这个循环中你渲染的点数(12)也比你声明的点数(13)少:
for (i = 0; i < 12; i++)
您应该类似地使用 npoints
来获得正确的数字。像这样的魔术常量之所以不好,正是因为它们会导致此类错误。
我在画简单的图时遇到了问题。
我不确定这里的问题是什么,但我有一些要点:
GLfloat ctrlpoints[13][3] = {
{0.1, 0.1, 0.0},
{0.7, 0.1, 0.0},
{0.9, 0.1, 0.0},
{0.9, 0.3, 0.0},
{0.7, 0.3, 0.0},
{0.6, 0.3, 0.0},
{0.55, 0.25, 0.0},
{0.5, 0.2, 0.0},
{0.2, 0.2, 0.0},
{0.12, 0.2, 0.0},
{0.1, 0.3, 0.0},
{0.07, 0.2, 0.0},
{0.1, 0.1, 0.0} };
我希望代码中的所有点都连接起来,但它在第 6 组点后停止。
我的其余代码:
void init(void)
{
glClearColor(0.0, 0.0, 0.0, 0.0);
glShadeModel(GL_FLAT);
glMap1f(GL_MAP1_VERTEX_3, 0.0, 1.0, 3, 5, &ctrlpoints[0][0]);
glEnable(GL_MAP1_VERTEX_3);
}
void display(void)
{
int i;
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1.0, 1.0, 1.0);
glBegin(GL_LINE_STRIP);
for (i = 0; i <= 30; i++)
glEvalCoord1f((GLfloat)i / 30.0);
glEnd();
glPointSize(0.5);
glColor3f(1.0, 1.0, 0.0);
glBegin(GL_POINTS);
for (i = 0; i < 12; i++)
glVertex3fv(&ctrlpoints[i][0]);
glEnd();
glFlush();
}
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize(500, 500);
glutInitWindowPosition(100, 100);
glutCreateWindow(argv[0]);
init();
glutDisplayFunc(display);
glutMainLoop();
return 0;
}
基于the documentation,glMap1f
的第5个参数是点数。您将其设置为 5
,这就是用于评估的控制点数。您应该将其替换为 13,或使用 sizeof
自动计算该数字:
int npoints = sizeof(ctrlpoints)/sizeof(ctrlpoints[0]);
glMap1f(GL_MAP1_VERTEX_3, 0.0, 1.0, 3, npoints, &ctrlpoints[0][0]);
这不是你要问的,但在这个循环中你渲染的点数(12)也比你声明的点数(13)少:
for (i = 0; i < 12; i++)
您应该类似地使用 npoints
来获得正确的数字。像这样的魔术常量之所以不好,正是因为它们会导致此类错误。