2010-01-07 15 views
2

J'écris une classe NURBS qui utilise l'extension GLU d'OpenGL pour faire du rendu, mais je viens de réaliser que je n'ai aucune idée de la façon de définir les poids des points de contrôle. Ce n'est pas dans le livre rouge ou la documentation GLU, et le web n'en parle pas non plus. Est-il possible que l'implémentation NURBS de GLU n'inclue pas cette fonctionnalité? Si c'est le cas, je suis surpris qu'ils aient fini par l'appeler NURBS et pas seulement B-splines.GLU NURBS - comment régler les poids des points de contrôle?

Édition: Modification des "poids des nœuds" aux "poids des points de contrôle".

+0

Désolé je ne peux pas aider, mais croiriez-vous que "glu nurbs knot poids" dans google renvoie * cette question * comme le hit? Tu n'as écrit que ça il y a 28 minutes! C'est trop bizarre. – goger

Répondre

4

Votre problème énoncé dans la terminologie NURBS est que vous voulez une courbe rationnelle au lieu d'une non rationnelle.

Regarder le prototype gluNurbsCurve nous avons:

void gluNurbsCurve(GLUnurbsObj *nobj, // NURBS object 
        GLint nknots,  // number of knots 
        GLfloat *knot,  // knot values 
        GLint stride,  // stride 
        GLfloat *ctlarray, // control points array 
        GLint order,  // order of data 
        GLenum type)  // data type 

L'un des paramètres est *knot, mais il est pas un tableau de poids. La façon dont glu gère les poids des nœuds est un peu confuse, vous pouvez lire à ce sujet here.

Le ctlarray et le dernier paramètre sont ceux qui vous intéressent. Le dernier paramètre, type, est l'un des types d'évaluateurs bidimensionnels. Généralement, vous pouvez utiliser GL_MAP2_VERTEX_3 pour non rationnel ou GL_MAP2_VERTEX_4 pour les points de contrôle rationnels, respectivement. Pour plus de détails, voir le Red Book.

+0

Je ne suis pas concerné par la façon de définir l'espacement des connaissances, mais plutôt comment définir des poids. Je pense que j'ai peut-être confondu le problème en me référant aux «poids des nœuds», alors que j'aurais dû faire référence aux poids des points de contrôle (corrigés maintenant). Je n'ai pas trouvé de réponse à la question des poids sur votre lien. Peux-tu élaborer? –

+0

Je suppose que j'ai trouvé une solution à votre problème. J'ai édité ma réponse. –

+0

Coordonnées homogènes! Bien sûr! Un grand merci pour votre réponse –