Untitled
unknown
plain_text
a year ago
3.1 kB
7
Indexable
#include <GL/glut.h> GLUnurbsObj* theNurb; // массив точек определяющего многоугольника const int ctlLen = 3; GLfloat originalCarray[][4] = { {-1.0, -0.7, 0.0,1.0}, {-0.5, 0.7, 0.0,1.0}, {0.0, -0.7, 0.0,1.0}, {0.5, 0.7, 0.0,1.0}}; GLfloat ctlarray[][4] = { {-1.0, -0.7, 0.0,1.0}, {-0.5, 0.7, 0.0,1.0}, {0.0, -0.7, 0.0,1.0}, {0.5, 0.7, 0.0,1.0} }; void init(void) { glClearColor(1.0, 1.0, 1.0, 1); // gluNewNurbsRenderer – создает NURBS объект theNurb = gluNewNurbsRenderer(); // установка свойства неравномерного рационального B-сплайна gluNurbsProperty(theNurb, GLU_SAMPLING_TOLERANCE, 25.0); } void Display() { // Массив, содержащий значения открытого равномерного узлового вектора GLfloat knot[] = { 0.0,0.0,0.0,1.0,2.0,3.0,3.0,3.0 }; GLfloat knot1[] = { 0.0,0.0,1.0,2.0,3.0,4.0,4.0 }; glClear(GL_COLOR_BUFFER_BIT); glLineWidth(1.0); glPointSize(5.0); glColor3f(0.0, 0.5, 1.0); glBegin(GL_POINTS); for (int i = 0; i < ctlLen; i++) { glVertex3f(originalCarray[i][0], originalCarray[i][1], originalCarray[i][2]); } glEnd(); gluNurbsCurve(theNurb, 7, knot1, 4, &originalCarray[0][0], 2, GL_MAP1_VERTEX_4); glColor3f(0.5, 0.5, 0.5); glLineWidth(2.0); // theNurb – NURBS объект, 8 – количество элементов в массиве knot, // knot – массив содержащий значения узлового вектора, // 4 – количество чисел(координат) для описания контрольной точки (точки // определяющего многоугольника) здесь точка содержит однородную координату // параметр ctlarray – указывает на массив контрольных точек // 3 – степень NURBS кривой плюс единица // GL_MAP1_VERTEX_4 – тип Безье вычислителя для рациональных контрольных точек gluNurbsCurve(theNurb, 8, knot, 4, &ctlarray[0][0], 3, GL_MAP1_VERTEX_4); glColor3f(1, 0, 0); for (int i = 0; i < 4; i++) { ctlarray[2][i] = originalCarray[2][i] * 0.25; } gluNurbsCurve(theNurb, 8, knot, 4, &ctlarray[0][0], 3, GL_MAP1_VERTEX_4); glColor3f(0.0, 1.0, 0.0); for (int i = 0; i < 4; i++) { ctlarray[2][i] = originalCarray[2][i] * 5; } gluNurbsCurve(theNurb, 8, knot, 4, &ctlarray[0][0], 3, GL_MAP1_VERTEX_4); glColor3f(0.0, 0.0, 1.0); for (int i = 0; i < 4; i++) { ctlarray[2][i] = originalCarray[2][i] * 0; } gluNurbsCurve(theNurb, 8, knot, 4, &ctlarray[0][0], 3, GL_MAP1_VERTEX_4); glFlush(); } void main() { glutInitDisplayMode(GLUT_RGBA | GLUT_SINGLE); glutInitWindowSize(480, 480); glutInitWindowPosition(100, 100); glutCreateWindow(" "); init(); glutDisplayFunc(Display); glutMainLoop(); }
Editor is loading...