Sposób tworzenia powierzchni NURBS w OpenGL jest bardzo podobny do metody generowania krzywych NURBS. Jedyna róż- nica polega na tym, że funkcje służące do rysowania powierzchni NURBS wymagają podania większej liczby argumentów. Wynika to z faktu, że powierzchnie NURBS, podobnie jak powierzchnie Beziera, są funkcjami dwóch parametrów u i v.
     Przed przystąpieniem do narysowania powierzchni NURBS należy umieścić w odpowiednich tablicach współrzędne jej wierz- chołków oraz wartości liczbowe węzłów. Wykorzystanie tej samej sekwencji węzłów dla kierunków u i v jest możliwe tylko wtedy, gdy ilość węzłów w obu kierunkach jest taka sama. W przeciwnym wy- padku konieczne jest określenie odrębnego ciągu węzłów dla każ- dego z kierunków.
     Sposób budowania tablic zawierających dane wierzchołków przedstawiłem kilka stron wcześniej, a bardziej szczegółowo omówiłem ten problem w rozdziałach poświęconych krzywympowierzchniom Beziera.
     Do rysowania powierzchni NURBS w OpenGL służy funkcja gluNurbsSurface. Należu umieścić ją w procedurze rysunkowej, między instrukcjami gluBeginSurface i gluEndSurface.
     Aby na narysowanej powierzchni NURBS były widoczne efekty związane z oświetleniem, trzeba wcześniej przygotować i włączyć źródło światła. W procedurze tworzenia sceny, poniżej definicji powierzchni NURBS, należy dodać linię uruchamiającą auto- matyczne wyznaczanie normalnych do tworzonej powierzchni. Dzięki temu stanie się ona "czuła" na oświetlenie.
     Pełny kod przykładowego programu do generowania powierz- chni NURBS, oczywiście wraz z niezbędnymi komentarzami, moż- na pobrać ze strony pliki.
     
     

gluBeginSurface (pNurb); // początek definicji
     gluNurbsSurface (
                pNurb, // wskaźnik do renderera
                    8, // ilość węzłów w kierunku u
              Wezly_u, // węzły w kierunku u
                    8, // ilość węzłów w kierunku v
              Wezly_v, // węzły w kierunku v
                   12, // odległość między wierz-
                       // chołkami w kierunku u

                    3, // odległość między wierz-
                       // chołkami w kierunku v

       &nPkt[0][0][0], // wsp. x 1-ego wierzchołka
                    4, // rząd w kierunku u
                    4, // rząd w kierunku v
    GL_MAP2_VERTEX_3); // generowane dane
gluEndSurface (pNurb); // koniec definicji