我要发帖 回复

版主

34

主题

792

积分

0

专家分

:

私信
发表时间 : 2007-11-21 16:52:28 | 浏览 : 2168    评论 : 4
有没有反求NURBS控制点的函数啊?
OpenGL 红宝书里surface.c中有几个函数
GLfloat knots[8] = {0.0, 0.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0};
gluNurbsSurface(theNurb,
                   8, knots, 8, knots,
                   4 * 3, 3, &ctlpoints[0][0][0],
                   4, 4, GL_MAP2_VERTEX_3);
上面的几个参数为什么取那个值?能否详细讲解一下?
surface.rar (2.6 KB, 下载次数: 70)

最近VR访客

追求卓越
tan_dunming 评论于2007-11-23 10:38:13
问题已经解决。
大家可以看看《计算机辅助几何设计与非均匀有理B样条》高等教育出版社这本书。
有问题可以发帖。
一般情况下,knots 可以取红宝书中的参数,关键就是u_stride, v_stride要根据定点或者纹理而定。这样就没问题了。
比如纹理的话可以这样取值:
GLuint textureID;
GLfloat texpts[4][4][2] = {{{0.0, 0.0}, {0.0, 0.333}, {0.0, 0.667}, {0.0, 1.0}},   {{0.333, 0.0}, {0.333, 0.333}, {0.333, 0.667}, {0.333, 1.0}},
{{0.667, 0.0}, {0.667, 0.333}, {0.667, 0.667}, {0.667, 1.0}},   {{1.0, 0.0}, {1.0, 0.333}, {1.0, 0.667}, {1.0, 1.0}} };
GLfloat ctlpoints[4][4][3];
GLfloat knots_tex[8] = {0.0, 0.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0};
//init
   int u, v;
   for (u = 0; u < 4; u++) {
      for (v = 0; v < 4; v++) {
                 ctlpoints[v][0] = (GLfloat)u/3;
                 ctlpoints[v][1] = (GLfloat)v/3;
                 ctlpoints[v][2] = 0.0;      
          }
   }

glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, textureID);
glTexImage2D(......);

//draw
gluNurbsSurface(theNurb,
                   8, knots_tex, 8, knots_tex,
                   4* 2, 2, &texpts[0][0][0],
                   4, 4, GL_MAP2_TEXTURE_COORD_2);

[ 本帖最后由 tan_dunming 于 2007-11-23 10:40 AM 编辑 ]
追求卓越
tan_dunming 评论于2007-11-23 14:58:45
我试验多重纹理映射没有效果,可以使用多重纹理后拷贝纹理实现。
不知谁有这方面的研究,交流一下。
追求卓越
tan_dunming 评论于2007-11-28 16:21:54
glBlend(......)
追求卓越
pillwkai26 评论于2008-6-21 12:37:08

为什么有关编程的帖子比较容易上精华呢?嗯~这是个问题!

自己加的精华呀,呵呵

手机版|VR开发网 统计 津ICP备18009691号
网安备12019202000257

GMT+8, 2021-9-17 11:24 PM

返回顶部