VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 568|回复: 2

OpenGL bezier或nurbs曲面控制点的问题(十万火急)

[复制链接]

2

主题

4

帖子

5.00

积分

新手上路

Rank: 1

积分
5.00
发表于 2020-1-23 06:20:02 | 显示全部楼层 |阅读模式
现在书本和网上所有的曲面例子都只有4x4个控制点,我把它扩展到8x8个控制点,可以正常绘制曲面,可是达到10x10以上就无法显示,不知道错在哪里?难道控制点数目有限制?可是如3dsmax软件可以插入无数的控制点啊。我需要一张曲面来建立一个人体模型,8x8个控制点肯定是不够的。请看代码:

/* 控制点*/
  GLfloat ctrlpoints[8][8][3] = {

/* 调用二维求值程序 */
glMap2f(GL_MAP2_VERTEX_3, 0, 1, 3, 8, 0, 1, 24, 8, &ctrlpoints[0][0][0]);
    glEnable(GL_MAP2_VERTEX_3);

/* 求值 */
 for (j = 0; j <= 8; j++)
    {
      glBegin(GL_LINE_STRIP);
      for (i = 0; i <= 30; i++)
        glEvalCoord2f((GLfloat)i/30.0, (GLfloat)j/8.0);
      glEnd();
        }

这样画的bezier曲面没有什么问题,可是把8改成10以上时,就画不出来了,到底什么原因?

/* 控制点*/
  GLfloat ctrlpoints[10][10][3] = {

/* 调用二维求值程序 */
glMap2f(GL_MAP2_VERTEX_3, 0, 1, 3, 10, 0, 1, 30, 10, &ctrlpoints[0][0][0]);
    glEnable(GL_MAP2_VERTEX_3);

/* 求值 */
 for (j = 0; j <= 8; j++)
    {
      glBegin(GL_LINE_STRIP);
      for (i = 0; i <= 30; i++)
        glEvalCoord2f((GLfloat)i/30.0, (GLfloat)j/8.0);
      glEnd();
        }

是不是我把控制点、节点和阶数搞混了?那么,如果想画一个有几百个控制点的bezier或nurbs曲面该什么办呢?最好给出源码。万分感谢!




回复

使用道具 举报

0

主题

55

帖子

32.00

积分

新手上路

Rank: 1

积分
32.00
发表于 2020-2-17 09:30:01 | 显示全部楼层
for (j = 0; j <= 10; j++)
    {
      glBegin(GL_LINE_STRIP);
      for (i = 0; i <= 30; i++)
        glEvalCoord2f((GLfloat)i/30.0, (GLfloat)j/10.0);
      glEnd();
        }
试试。
回复

使用道具 举报

2

主题

4

帖子

5.00

积分

新手上路

Rank: 1

积分
5.00
 楼主| 发表于 2020-3-17 01:30:01 | 显示全部楼层
rsq666
没有用的,glEvalCoord2f((GLfloat)i/30.0, (GLfloat)j/10.0);这里和控制点无关,只是分多少网格的问题。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表