【问题标题】:How to continue looping through GLfloat Points如何继续循环通过 GLfloat 点
【发布时间】:2022-01-18 22:44:09
【问题描述】:

我无法绘制简单的绘图。

我不确定这里有什么问题,但我有一组要点:

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;
}

【问题讨论】:

    标签: c opengl glut nurbs


    【解决方案1】:

    基于the documentationglMap1f 的第 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 来获得正确的号码。像这样的魔法常数之所以不好,正是因为它们会导致这类错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-12
      • 2020-05-25
      • 1970-01-01
      • 1970-01-01
      • 2021-07-26
      • 2014-09-06
      • 2011-08-19
      相关资源
      最近更新 更多