View Full Version : C++ Vectors problem in GLU NURBS interface??
pramod_49
07-11-2002, 07:38 AM
Hi,
I am trying to write a program to interactively model and manipulate the NURBS surfaces. For this i am using the GLU NURBS interface. The interface requires control points to be given in a 3D array. But in order to extend the surface dynamically i need to change the no. of control points during execution.
But the command is not excepting dynamically allocated arrays, ( with new or malloc). It does not even take in C++ vector class variables.
Does anybody know a way to work around this problem?
Thank you,
pramod.
Deiussum
07-11-2002, 09:58 AM
Post some code. You are probably using the gluNurbs methods wrong as they should have no knowledge of whether they are statically allocated or dynamically allocated arrays.
pramod_49
07-11-2002, 10:12 PM
I initialized NURBS object using
code:
--------------------------------------
theNurb = gluNewNurbsRenderer();
gluNurbsProperty(theNurb, GLU_SAMPLING_TOLERANCE, 50.0);
gluNurbsProperty(theNurb, GLU_DISPLAY_MODE, GLU_FILL);
--------------------------------------
Then i called the drawing function,
-----------------------------------
gluBeginSurface(theNurb);
gluNurbsSurface(theNurb,
8, &UKnots[0],8,&VKnots[0],
UKnots.size() - Degree - 1) * 4,4,
&ControlPoints[0][0][0],
4, 4,GL_MAP2_VERTEX_4);
gluEndSurface(theNurb);
-----------------------------------
This drawing function is working only when the ControlPoints array is statically allocated to the exact no. of control points. It does not seem to be working when i dynamically allocate the array and then fill it with data. I could not understand why ? Same is the case with the use of C++ vectors.
Thank you.
Deiussum
07-12-2002, 04:25 AM
Ok. I notice you have a 3 dimensional array. Am I correct in assuming you are probably doing something like so when trying to allocate it dynamically?
float ***ControlPoints;
ControlPoints = new float**[size];
for (x=0;x<size;x++)
{
ControlPoints[x] = new float*[size2];
for (y=0;y<size2;y++)
{
ControlPoints[x][y] = news float[size3];
}
}
If that's the case, you are NOT setting memory correctly. What you need is one contiguous range of memory. When you setup a static multi-dimensional array, it will make the memory contiguous for you.
Doing it like above however, starting at the location pointed to by ControlPoints, you are actually pointing at a pointer which points to another pointer, which points to one row of data. See why that won't work, yet?
You should be allocating your memory like so.
float *ControlPoints = new float[size1*size2*size3];
One other thing. Not a major thing, but I thought I'd mention it.
Using &UKnots[0] is identical to just using UKnots. Arrays are always represented as a pointer to the first element when you don't dereference a specific element. Just thought I'd mention it as I tend to find just UKnots more readable.
Powered by vBulletin® Version 4.2.0 Copyright © 2013 vBulletin Solutions, Inc. All rights reserved.