Solved

NURBS and B-splines

Posted on 2003-11-07
11
1,105 Views
Last Modified: 2007-12-19
I am trying to create an interactive NUBRS (with openGL) in C where user is available to select the points with the click of the mouse. However, as soon as I made 25 points the nurb dissapier from the screen .. does anyone have any idea why would be doing something like that.

Here is the part of my code that does it

void render_bspline(void)
{
      GLUnurbsObj *theNurb;
        GLfloat      knots[MAX_POINTS*2];
      int i=0;
      
      for(;i<=(numpoints*2);i++)
      {
            if(i<((numpoints*2)/2))
                  knots[i] =0.0;
            else
                  knots[i]=1.0;
      }
  theNurb = gluNewNurbsRenderer();
  gluNurbsProperty(theNurb, GLU_SAMPLING_TOLERANCE, 25.0);
      
  glPushMatrix();
        glColor3f(1.0,0.0, 0.0 );
        gluBeginCurve(theNurb);
                  gluNurbsCurve(theNurb, numpoints*2, knots,3,&ctlpoints[0][0], numpoints,GL_MAP1_TEXTURE_COORD_2);
                  gluNurbsCurve(theNurb, numpoints*2, knots,3,&ctlpoints[0][0], numpoints,GL_MAP1_NORMAL);
                    gluNurbsCurve(theNurb, numpoints*2, knots,3,&ctlpoints[0][0], numpoints,GL_MAP1_VERTEX_3);
        gluEndCurve(theNurb);
      gluDeleteNurbsRenderer(theNurb);
  glPopMatrix();
}

Thanks for taking your time to look at this
L.
0
Comment
Question by:ledeni
  • 4
  • 2
  • 2
11 Comments
 
LVL 45

Expert Comment

by:Kdo
ID: 9712056


What's the value of MAX_POINTS?

Kent
0
 

Author Comment

by:ledeni
ID: 9712150
hey Kent .. thanks for looking at it ... MAX_POINTS is 255 .. that I am also using as a array max points for that control points ... so my array is initializes as
cntrlpoints[MAX_POINTS][3] and that array gets populated with the values that I select with the mouse on the open window. And since my understanding that knots are 2 times number of control points that is why I initiate the knots as MAX_POINTS * 2

Thanks a bunch once more

L.
0
 

Author Comment

by:ledeni
ID: 9712161
And one more thing ... and that is that the numpoints is the current selected number of points on the screen
0
 
LVL 45

Accepted Solution

by:
Kdo earned 100 total points
ID: 9714538

What is the value of numpoints when you enter the function?

Also, as a matter of technique, if you're passing the array ctlpoints to a function you can use the name instead of taking the address of the first element.

              gluNurbsCurve(theNurb, numpoints*2, knots, 3, &ctlpoints[0][0], numpoints, GL_MAP1_TEXTURE_COORD_2);

becomes:

              gluNurbsCurve(theNurb, numpoints*2, knots, 3, ctlpoints, numpoints, GL_MAP1_TEXTURE_COORD_2);


Kent
0
Are your end users making ugly email signatures?

Have you left it up to your end users to create their own email signatures? Are they forgetting to add the company logo or using garish font colors? Take control and ensure all users have the same email signature.

 

Author Comment

by:ledeni
ID: 9715317
Hey Kent

numpoints is 2 when I enter the function ... b.c. at least I think I should not be drawing the b-spline before I have at least 2 points. However I think that my problem is my understanding the entire process of knots, nurbs, etc etc ...

Maybe you can be more of assistance to me if you can just point me in direction of how many knots I should be having at some point for e.g. if I have chosen 2 points on the screen .. then should there be a 4 knots to it ... and should my order by number of points selected. all in all how gluNurbCurve works for dynamicly populated array of elements.

Thanks again for looking at this ... and I will just bump up some more points on this question now ... thanks again
0
 

Author Comment

by:ledeni
ID: 9723364
Hey Kent .. just thought to let you know (or anyone else) that I have figured out the nerb drawing ... I was wondering if anyone would know what type of openGL command lines I can use to spin this 2D nurb around the Z axis to get the 3D image.

Thanks ... a bunch once more for looking at this ..

L.
0
 
LVL 45

Assisted Solution

by:sunnycoder
sunnycoder earned 100 total points
ID: 9729849
0
 
LVL 45

Expert Comment

by:sunnycoder
ID: 9729871
you may also like to read this --- it des not have nerbs but rotation -- yes
http://www.mfcogl.com/OpenGL%20-%20draw%20cylinder%20between%202%20pts.htm
0

Featured Post

Netscaler Common Configuration How To guides

If you use NetScaler you will want to see these guides. The NetScaler How To Guides show administrators how to get NetScaler up and configured by providing instructions for common scenarios and some not so common ones.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Summary: This tutorial covers some basics of pointer, pointer arithmetic and function pointer. What is a pointer: A pointer is a variable which holds an address. This address might be address of another variable/address of devices/address of fu…
This is a short and sweet, but (hopefully) to the point article. There seems to be some fundamental misunderstanding about the function prototype for the "main" function in C and C++, more specifically what type this function should return. I see so…
The goal of this video is to provide viewers with basic examples to understand and use pointers in the C programming language.
The goal of this video is to provide viewers with basic examples to understand opening and writing to files in the C programming language.

863 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

20 Experts available now in Live!

Get 1:1 Help Now