CAITULO 6 Crvs y Sperfces 6. Representcon rmétrc Representcón prmétrc: y x,y,z x z
Se: z z z z y y y y x x x x z y x [ ], ˆ ˆ ˆ ˆ,, ˆ ˆ z y x ˆ z z z z y y y y x x x x,, y se llmn coefcentes lgebrcos. [ ] pr se tene,, Resolvendo pr,,, se tene: Reemplzndo en y rreglndo fctores, se tene: Llmemos: F
F F F 4 Lego: F F F F4,,, se llmn coefcente geométrcos. En form Mtrcl Se : [ ][ ] T U A or otro ldo: [ ] [ ] [ F F F F ][ ] T o 4 FB F [ ] F [ ] 4 44444 M F UM UMB pr UA Lego A MB UMB [,]
Ls crvs nterores defnds por los pntos de comenzo y fnles, demás de ss pendentes, se llmn crvs de Hermte. 6. Vectores Tngentes Otr form de escrbr n tngente n crv: t z t x t y Donde tx, ty, tz son los cosenos drectores, tles qe: t t x t y t z Se defne: k lego k * t Así los grdos de lbertd de l crv están ddos por: 6 por los pntos y. 4 por los cosenos drectores de mbs tngentes. por ls mgntdes de los vectores tngentes. En totl grdos de lbertd. [ ] T B
Se pede escrbr como: [ k t k t ] T B Sólo vrndo k 6. Reprmetrzcón Algns veces se reqere cmbr los prámetros de n crv, sn vrr l poscón n l form de ést. Vemos el cso generl: v v T v v [ ] B [ q q q q ] T B Como no debe hber cmbo de poscón, se tene qe cmplr: q q Qé ps con ls pendentes?
L relcón qe exste entre y v, esto es vf, debe ser de tles crcterístcs qe no ltérel form de l crv. Est se cmple s hy n relcón lnel entre ello, entonces podemos sponer qe: Así v b v dv d v b v b v v v d v dv Lego: q v v v q v v v 6.4 Form Trncd v v Usemos ls fórmls nterores
q q q q v v v q v v q v v v v q q 6.5 Form de Ctro ntos 4 4 < < < 4 Spongmos n mtrz k, tl qe: [ ] [ ] 4 T T k q q q q UMB Lego:
T T [ ] [ U U U U ] MB 4 4 De qí [ ] T U U U U [ ] T B M 4 4 De se tene qe: k M B k [ U U U U 4 ] [ ] T 4 T De donde: [ ] k B 4 r, /, /,, se obtene: k / 9 9 / 9 / 9 / k / 7 7 / 7 7 / 7 / 7 4 / 7 / 7 / 7 4 / 7 Se [ ] T 4 UMB B k UMK con Mk N UN
N 9 / 9 / 7 / 45/ 9 7 / 8 9 / 9 / 9 / Expndendo se lleg 4,5 9 5,5,5,5 9,5 8 4,5 4,5 4,5 4 6.6 Crvs de Bezer En generl, n crv de Bezer se pede proxmr clqer número de fentes de control. El número de fentes de control determn el grdo del polnomo. L crv de Bezer es más fáclmente determnd por fncones Blendng. Spongmos qe tenemos n poscones con pntos de control: x, y, z con k vrndo entre y n. k k k k Se pede descrbr n crv qe ps por los pntos y n, y se proxm los pntos ntermedos: n k k BEZ k, n [,] BEZk,n son los polnomos de Bernsten BEZ k, n k nk C n, k Donde: n! C n, k k! n k!
En form scesv se pede defnr: BEZ k, n BEZ k, n BEZ k, n n > k represent n eccón prmétrc como: x y z n k n k n k xk BEZ yk BEZ zk BEZ k, n k, n k, n Como regl, n crv de bezer es n polnomo de grdo no menos qe el número de pntos de control. 4
6.6. ropeddes de crvs de Bezer Un propedd útl es qe l crv sempre ps por el prmer y últmo pnto de control. Condcones de borde: n Ls dervds: ' n n ' n n n n Segnds dervds: [ ] [ ] '' n n '' n n n n n n Otr propedd mportnte de clqer crv de Bezer es qe sempre está std dentro del convex hll. 5 4
6.6. Composcón de Crvs y los tres pntos,,, deben ser colneles pr tener contndd de º dervd. 6.6. Crvs de Bezer cúbcs Son ls más sds y se genern con ctro pntos de control: BEZ BEZ,, BEZ, BEZ, ' k ' ' 6 '' 6 ' En form Mtrcl:
[ ] 4 M BEZ 6 BEZ M 6.7 Sperfces de Bezer Se peden tlzr dos grpos ortogonles de crvs de Bezer pr dseñr n sperfce. L eccón de l sperfce en form prmétrc es: m n k n k m k BEZ v BEZ v,,,, Con,k qe especfc n bccón de m por n pntos de control.
v v L form Mtrcl es:, v donde [ ][ v BEZ T v M M BEZ ] v M BEZ 6
Efecto de levntr n pnto de control Vectores tngentes n vértce, v, v
,, v v, 9 L norml n vértce se clcl por el prodcto crz entre dos tngentes. or eemplo: b N b 6.8 Crvs B-splnes Un crv Splne está formd por crvs polnomles, por rcos o sectores. S S C S or eemplo, l crv C está formd por los rcos S, S y S. A s vez S, S y S podrín ser crvs de Bezer, ls cles están defnds por los polnomos de Bernsten.
6.8. Constrccón de Splnes sndo polnomos como bse. De l sgente crv: gt bt t brrdo o spn ct t ntos knet Soporte t t b t c t t t 4 Un Splne de grdo m tene contndd m- en cd pnto knot. Es decr g t C m. m Consdérese el constrr n crv t bsándose en n sere de fncones gkt polnomles. or eemplo: donde t 4 k k g k t gk t g t k k,,,, 4
Se tene qe t en cd spn está ddo por n sm de polnomos, con n peso k pr cd no de ellos. Eemplo: etc t t g t g t g t t t g t g t t t g t Esto se pede grfcr como: t gt g 4 5 7 6 g g g g 4 / /4 4 4 t 4 5 6
De lo nteror se desprende qe en n stn o brrdo clqer prte de es crv eqvle n sm de polnomos ponderdos por los pntos de control. Se pede pensr entonces qe pede exstr n polnomo generl, el cl srv como bse pr cd cso. 6.8. Crv B-splne L eccón pr n crv B-splne está dd por: n k k B k, d mín d n máx Donde k es n connto de n pntos de control. El rngo del prámetro depende hor de como se elgen los prámetros de l B- spln. Ls fncones Blendng Bk,d son polnomos de grdo d-. Ls fncones Blendg están defnds por l fórml recrsv de Cox-de Boor: B k, s k otro cso k k k d B B, B, k, d k d k d k d k k d k Donde cd fncón Blendng está defnd sobre d ntervlos del rngo totl de. El connto de sbntervlos fnles se llm vector knot. Los vlores pr mín y máx dependen del número de pntos de control, el vlor elegdo pr d y de como se elgen los sbntervlos vector knot.
El vlor / se sme como en cso de ocrrr en l fórml nteror. Ls B-splnes permten qe se cmbe el número de pntos de control sn cmbr el grdo del polnomo. Tmbén se peden ñdr o modfcr los pntos de control pr mnplr ls forms de ls crvs. Cmbo en el pnto de control Ls crvs B-splnes tenen ls sgentes propeddes:. L crv polnoml tene el grdo d y contndd C d sobre el rngo de.. r n pntos de control, l crv se descrbe con n fncones Blendng.. Cd fncón Blendng Bk,d está defnd sobre d sbntervlos del rngo totl de, comenzndo en el vlor not k. 4. El rngo del prámetro está dvddo en nd sbntervlos por los nd vlores especfcdos por el vector knot. 5. Con vlores knot mrcdos como,,... n d l crv B-splne resltnte está defnd en el ntervlo d- hst el vlor knot n. 6. Cd seccón de l crv splne entre dos vlores scesvos de knot está nflencd por d pntos de control. 7. Clqer pnto de control pede fectr l form de lo más d seccones de crvs. En generl hy tres clses de vectores knot: nforme, nforme berto y no-nforme. Ls b-splne se descrben comúnmente de cerdo l tpo de vector knot.
6.8. B-splnes nformes Cndo el espco entre vlores knot es constnte, l crv resltnte se llm B-splne nforme. or eemplo:.5,.,.5,.,.5,.,.5,. A mendo los vlores knot son normlzdos entre y..,.,.4,.6,.8,. B-splnes nformes tenen fncones Blendng nformes. Esto es, pr vlores ddos de n y d, tods ls fncones Blendng tenen l msm form. Eemplo: n d El vector knot debe contener dn7 vlores knot.,,,, 4, 5, 6 y el rngo de es de 6, con nd6 sbntervlos. L crv polnoml es de grdo d-. Con n4 pntos de control, l crv está descrt por n4 fncones Blendng. Cd n de ls ctro fncones Blendng spn d sbntervlos del rngo totl de. Así
, B 4 4 4, B 5 4 5 4 5 4, B 6 5 6 5 4 46 5 4, B
B, B, 4 5 6 4 5 6 B, B, 4 5 6 4 5 6 El prmer pnto de control mltplc l fncón B,. Así, cmbndo l poscón del prmer pnto de control sólo fect l crv hst. Tods ls fncones Blendng están presentes entre d- y n4. Este es el rngo de l crv polnoml. En este rngo, l sm de ls fncones es gl. esto qe el rno de l crv polnoml resltnte s entre y 4, se peden determnr los pntos de comenzo y térmno, evlndo ls fncones blendng en estos pntos. comenzo fnl
Tmbén ls dervds están dds por: ' ' comenzo fnl 6.8.4 B-splnes berts y nformes En este cso de B-splne el vector knot es nforme, excepto en el prncpo y fn de éste. or eemplo.,,,,, pr d y n,,,,,,,, pr d 4 y n 4 r clqer vlor de d y n se pede generr n vector knot como d n d d d n > n r vlores de en el rngo de nd. Con est sgncón los prmeros d knots tenen n vlor y los últmos d knots tenen n vlor n-d. L crv polnoml pr n B-splne bert por el prmer y últmo pnto de control. En esto es smlr l crv de Bezer. Eemplo: d y n 4 cnco pntos de control knot vector,,,, 4, 5, 6, 7, 8,,,,,,, El rngo totl de está dvddo en ses sbntervlos, y cd fncón Blendng está defnd en tres sbntervlos.
, < B Está defnd desde < < 4, B < < <, B < < 5, B, 4 < B,5 B,,6 B,
B, B,,6,6 B 4, 6.9 Sperfces Esto es smlr l cso Bezer. En efecto, l eccón de l sperfce es:, v n k k n k, k Bk, d Bk, d 6.9. Splnes Rconles Un fncón rconl es smplemente l rzón entre dos polnomos. Así, n splne rconl es l rzón de dos fncones splnes.
n k n W k k W k k B B k, d k, d Donde k es el connto de n pntos de control. Los prámetros Wk son fctores de peso pr los pntos de control. Mentrs myor se el vlor de n Wk, más cerc del pnto de control está l crv. Esto es Wk emp l crv hc el pnto de control. Cndo todos los Wk son, entonces tenemos ls B-splnes conocds porqe el denomndor de es l sm de ls fncones Blendng. Ls splnes rconles tenen dos mportntes vents sobre ls no rconles. rmero, ells peden representr exctmente fncones cóncs como círclos y elpses. Fncones no rconles qe son polnomos sólo peden proxmr ests fncones cóncs. L otr vent es qe son nvrntes con respecto n trnsformcón de vst en perspectv. Esto sgnfc qe se pede plcr n trnsformcón los pntos de control y se obtene l correct vst de ell. Constrr n splne rconl se llev cbo de l msm mner qe pr ls no rconles. Ddo el connto de pntos de control, el grdo del polnomo, los fctores de peso y el vector knot, se plcn ls eccones de recrrenc. 6.9. NURBS NURBS es el térmno qe se tlz pr ndcr B-splnes rconles no nformes. r dbr seccones cóncs con NURBS, se s n fncón cdrátc splne d con tres pntos de control. Se pede hcer esto con n splne defnd por el vector knot berto: ls fncones de peso son:,,,,,
W W W r r r < y B, B, r B r r B r,, B, B, Se obtenen vrs cóncs con los vlores sgentes: r >, W > hperbol r, W prábol r, W < elpse r, W segmento recto Hpérbol rábol Segmento Recto Elpse
Se pede tmbén generr n crto de círclo elgendo Wcosφ y elgendo los pntos de control:,,,, φ,, Eemplo Utlzndo OpenGl Crvs OpenGL contene bstntes fncones qe fcltn el dbo de crvs y sperfces de Bezer especfcndo los pntos de control y el rngo de los prámetros y v. Entonces, nvocndo l fncón evldor propd el evldor, se generrán los pntos qe defnen l crv o sperfce. r dbr n crv de bezer se debe proceder de l sgente form Especfcr los pntos de control, por eemplo: GLnt nnmonts 4; GLflot ctrlonts[4][] -4.f,.f,.f, // nto fnl -6.f, 4.f,.f, // nto de control 6.f, -4.f,.f, // nto de control 4.f,.f,.f ; // nto fnl
Defnmos l Crv Bezer glmpfgl_ma_vertex_, // Tpo de dto generdo.f, // Rngo menor de.f, // Rngo speror de, // Dst. entre los pntos nnmonts, //nm. de pntos de control &ctrlonts[][]; // Mtrz de pntos de control glenblegl_ma_vertex_; // Actv el evldor // Us n frn de línes pr "conectr los pntos" glbegngl_line_stri; for ; < ; // Evlú l crv en este pnto glevlcoordfglflot ; glend; El prmer prámetro de glmpf, GL_MA_VERTEX_, ctv el evldor pr generr terns de coordends de vértce x,y,z, en oposcón GL_MA_VERTEX_4 qe generrí ls coordends y n componente lf. Los dos sgentes prámetros especfcn los vlores mínmo y máxmo del vlor prmétrco de est crv. El crto prámetro especfc el número de vlores de com flotnte entre los vértces de l mtrz de pntos de control. El últmo prámetro es n pntero n bffer qe contene los pntos de control empledos en defnr l crv. Aqí psmos n pntero l prmer elemento de l mtrz. Un vez qe se h credo el mpedo de l crv, llmmos l evldor pr hcer so de este mpedo. L fncón glevlcoordf tom n únco rgmento: n vlor prmétrco lo lrgo de l crv. Est fncón evlú entonces l crv en este vlor y llm nternmente glvertex pr dbr ese pnto. Hcendo n bcle en el domno de l crv e nvocndo glevlcoord pr prodcr vértces, podemos dbr l crv con n smple tr de línes. OpenGL pede fcltr ún más ls coss. Defnmos n rell con l fncón glmpgrd, qe le dce OpenGL qe cree n rell de pntos seprdos sobre el domno. Entonces llmmos glevlmesh pr conectr los pntos sndo l prmtv especfcd GL_LINES o GL_OINTS. or eemplo: // Us fncones de más lto nvel pr mper n rell, y evlr todo // Mp de n rell de pntos de glmpgrdd,.,.; // Evl l rell, sndo línes glevlmeshgl_line,,; Reemplz por completo este códgo: // Us n frn de línes pr "conectr los pntos"
glbegngl_line_stri; for ; < ; // Evlú l crv en este pnto glevlcoordfglflot ; glend; El sgente eemplo mestr l crecón de n smple crv de bezer con 5 pntos de control. Defnmos nestros pntos de control GLnt nnmonts 5; GLflot ctrlonts[5][] -4.f,.f,.f, // nto fnl -.f, 4.f,.f, // nto de control.f, -7.f,.f, // nto de control.f, 4.f,.f, // nto de control 4.f,.f,.f ; // nto fnl vod fstcll TFormMn::IdleLoopTObect*, bool& done done flse; RenderGLScene; SwpBffershdc; vod fstcll TFormMn::FormCreteTObect *Sender hdc GetDCHndle; SetxelFormtDescrptor; hrc wglcretecontexthdc; fhrc NULL ShowMessge":-~ hrc NULL"; fwglmkecrrenthdc, hrc flse ShowMessge"Cold not MkeCrrent"; w ClentWdth; h ClentHeght; glenblegl_deth_test; glenblegl_cull_face; glclercolor.f,.f,.f,.f; vod fstcll TFormMn::SetxelFormtDescrptor IXELFORMATDESCRITOR pfd szeofixelformatdescritor,, FD_DRAW_TO_WINDOW FD_SUORT_OENGL FD_DOUBLEBUFFER, FD_TYE_RGBA,
4,,,,,,,,,,,,,,,,, FD_MAIN_LANE,,,, ; xelformt ChoosexelFormthdc, &pfd; SetxelFormthdc, xelformt, &pfd; vod fstcll TFormMn::FormReszeTObect *Sender GLflot rngo; w ClentWdth; h ClentHeght; fh h ; glvewport,, w, h; glmtrxmodegl_rojection; gllodidentty; rngo8; glfrstm-rngo,rngo, -rngo, rngo,,5; glmtrxmodegl_modelview; gllodidentty; gltrnsltef,,-; vod fstcll TFormMn::RenderGLScene glclergl_color_buffer_bit GL_DETH_BUFFER_BIT; DrwObects; glflsh; vod fstcll TFormMn::DrwObects //Defne l Bezer, Sólo necestmos eectr ésto n vez y pede // estr en l fncón de nco glmpfgl_ma_vertex_, // Tpo de dto generdo.f, // Rngo menor de.f, // Rngo speror de, // Dstnc entre los pntos lmcendos nnmonts, // nmero de pntos de control &ctrlonts[][]; // Mtrz de pntos de control // Actv el evldor
glenblegl_ma_vertex_; glcolorf,,; glmpgrdd,.,.; // Evl l rell, sndo línes glevlmeshgl_line,,; glmpgrdd,.,.; // Evl l rell, sndo línes glevlmeshgl_line,,; // Db los pntos d control Drwonts; vod fstcll TFormMn::FormntTObect *Sender glclergl_color_buffer_bit GL_DETH_BUFFER_BIT; glflsh; DrwObects; El resltdo se mestr en l sgente fgr
Eemplo Utlzndo OpenGl Sperfces Crer n sperfce D de Bezer se prece mcho l versón en D. Además de defnr pntos lo lrgo del domno de, tmbén debemos defnrlos lo lrgo del domno de v. El sgente eemplo mestr l mll lámbrc de n sperfce D de Bezer. El prmer cmbo respecto l eemplo nteror es qe hemos defndo tres grpos dconles de pntos de control pr l sperfce lo lrgo del domno de v. r mntener l smplcdd de l sperfce, los pntos de control son gles excepto en el vlor Z. Esto crerá n sperfce nforme, como s sencllmente extrérmos n Bezer D lo lrgo del ee Z. // Número de pntos de control pr est crv GLnt nnmonts ; GLflot ctrlonts[][][] -4.f,.f, 4.f, -.f, 4.f, 4.f, 4.f,.f, 4.f, //V -4.f,.f,.f, //V -.f, 4.f,.f, 4.f,.f,.f, -4.f,.f, -4.f, //V -.f, 4.f, -4.f, 4.f,.f, -4.f ; vod RenderScenevod glclergl_color_buffer_bit; glmtrxmodegl_modelview; glshmtrx; // Rot l mll sobre sí msm pr qe se más fácl de ver glrottef45.f,.f,.f,.f; glrottef6.f,.f,.f,.f; glmpfgl_ma_vertex_,.f,.f,,,.f,.f, 9,, &ctrlonts[][][]; // Actv el evldor
glenblegl_ma_vertex_; // Utlz ls fncones de myor nvel pr mper // en n rell, lego evlú todo // Mpe n rell de pntos de glmpgrdf,.f,.f,,.f,.f; // Evl l rell, sndo línes glevlmeshgl_line,,,,; // Db los pntos de control Drwonts; glopmtrx; glflsh; Ahor, nestro códgo de genercón, demás de rotr l fgr pr consegr n efecto meor, llmmos glmpf en lgr de glmpf. Esto especfc pntos de control lo lrgo de dos domnos y v en vez de sólo no. El resltdo fnl es el mostrdo en l sgente fgr: El lstdo de l fncones prncples de nestro progrm es el sgente: GLnt nnmonts ; GLflot ctrlonts[][][] -4.f,.f, 4.f, -.f, 4.f, 4.f, 4.f,.f, 4.f, //V
-4.f,.f,.f, //V -.f, 4.f,.f, 4.f,.f,.f, -4.f,.f, -4.f, //V -.f, 4.f, -4.f, 4.f,.f, -4.f ; TFormMn *FormMn; fstcll TFormMn::TFormMnTComponent* Owner : TFormOwner Applcton->OnIdle IdleLoop; sze 5.f; vod fstcll TFormMn::IdleLoopTObect*, bool& done done flse; RenderGLScene; SwpBffershdc; vod fstcll TFormMn::FormCreteTObect *Sender hdc GetDCHndle; SetxelFormtDescrptor; hrc wglcretecontexthdc; fhrc NULL ShowMessge":-~ hrc NULL"; fwglmkecrrenthdc, hrc flse ShowMessge"Cold not MkeCrrent"; w ClentWdth; h ClentHeght; glenblegl_deth_test; glenblegl_cull_face; glclercolor.f,.f,.f,.f; vod fstcll TFormMn::SetxelFormtDescrptor IXELFORMATDESCRITOR pfd szeofixelformatdescritor,, FD_DRAW_TO_WINDOW FD_SUORT_OENGL FD_DOUBLEBUFFER, FD_TYE_RGBA, 4,
,,,,,,,,,,,,,,,, FD_MAIN_LANE,,,, ; xelformt ChoosexelFormthdc, &pfd; SetxelFormthdc, xelformt, &pfd; vod fstcll TFormMn::FormReszeTObect *Sender GLflot rngo; w ClentWdth; h ClentHeght; fh h ; glvewport,, w, h; glmtrxmodegl_rojection; gllodidentty; rngo6; glfrstm-rngo,rngo, -rngo, rngo,,5; glmtrxmodegl_modelview; gllodidentty; gltrnsltef,,-5; vod fstcll TFormMn::DrwObects glrottef45.f,.f,.f,.f; glrottef6.f,.f,.f,.f; glmpfgl_ma_vertex_,.f,.f,,,.f,.f, 9,, &ctrlonts[][][]; glenblegl_ma_vertex_; glmpgrdf,.f,.f,,.f,.f; glevlmeshgl_line,,,,; Drwonts;
vod fstcll TFormMn::FormntTObect *Sender glclergl_color_buffer_bit GL_DETH_BUFFER_BIT; glflsh; DrwObects; vod fstcll TFormMn::SlrClckTObect *Sender ext; vod Drwontsvod nt ; glontsze5.f; glbegngl_oints; for ; < nnmonts; glvertexfvctrlonts[][]; glend; Eemplo Utlzndo OpenGl NURBS Tmbén podemos crer n sperfce con crcterístcs de mterles, pr esto procedemos gregndo ls propeddes de mterl e lmncón qe hemos vsto en cpítlos nterores, l sgente fgr mestr n eemplo de ello odemos sr evldores en nestros procesos fndmentles pr evlr sperfces de bezer de clqer grdo, pero con ls crvs más comples será necesro ensmblr sperfces ndependentes. A medd qe ñdmos más pntos de control, es más dfícl crer n crv qe mnteng n
ben contndd. odemos dsponer de n nvel de control myor con ls fncones NURBS de l lbrerí gl. NURBS sgnfc Non-Unform Rtonl B-Splne conctendo-b rconl no nforme. L potenc rel de ls NURBS es exprmr l nflenc de los ctro pntos de control de n segmento clqer de l crv pr prodcr l svdd necesr. Este control se relz trvés de n secenc de vlores denomndos ndos. r cd pnto de control defnmos dos vlores nodles. El rngo de vlores pr ndos se st l domno prmétrco de y v, y no peden ser descendentes. Esto se debe qe los vlores de ndo determnn l nflenc de los pntos de control qe cen dentro de ese rngo en el espco /v. L secenc de ndos defne l ntensdd de l nflenc de cd pnto en el domno. S se repte el vlor de n ndo, los pntos cercnos este vlor prmétrco tene n myor nflenc. L repetcón de los vlores de ndo se denomn mltplcdd nodl. Un myor mltplcdd nodl decrece l crvtr de l crv o sperfce dentro de es regón. Ls fncones NURBS de l lbrerí gl proporconn tlddes de lto nvel pr generr sperfces. No debemos llmr explíctmente los evldores o estblecer los mps y rells. r generr n NURBS, prmero cremos n obeto NURBS l qe nos referremos cd vez qe llmemos ls fncones NURBS relconds pr modfcr l prenc de l crv o sperfce. L fncón glnewnrbsrenderer cre n generdor pr l NURBS, y gldeletenrbsrenderer lo destrye. Los sgentes frgmentos demestrn el so de ests fncones: //ntero n obeto NURBS GLUnrbsOb *pnrbnull; //Defncón del obeto NURBS pnrbglnewnrbsrenderer;... //Efectmos nestrs modfccones NURBS... //Borr el obeto NURBS s se creó f pnrb gldeletenrbsrendererpnrb; Un vez qe hemos credo n generdor NURBS, podemos defnr vrs propeddes NURBS de lto nvel, como est: //Defncón de l tolernc de mestreo glnrbsropertypnrb, GLU_SAMLIG_TOLERANCE, 5.of; //Cremos n sperfce sóld rellenndo // smos GLU_OUTLINE_OLYGON pr crer n mll polgonl glnrbsropertypnrb, GLU_DISLAY_MODE, GLflotGLU_FILL;
Normlmente nvocremos ests fncones en nestr rtn de nco, meor qe hcerlo repetdmente en nestro códgo. En este eemplo, GLU_SAMLING_TOLERANCE defne cómo es de sve l mll qe defne l sperfce, y GLU_FILL le dce OpenGL qe rellene l mll en lgr de generr n fgr lámbrc. L defncón de l sperfce se ps en form de mtrces de pntos de control y secencs de ndos l fncón glnrbssrfce. Como se mestr qí, est fncón tmbén está encerrd entre llmds glbegnsrfce y glendsrfce. // Gener l NURBS // Comenz l defncón NURBS glbegnsrfcepnrb; // Evl l sperfce glnrbssrfcepnrb, // ntero l generdor NURBS 8, Knots, // Núm. de ndos y mtrz de ndos drecc. 8, Knots, // Núm. de ndos y mtrz de ndos drecc. v 4 *, // Dstnc entre pntos de control drecc., // Dstnc entre pntos de control drecc. v &ctrlonts[][][], // ntos de control 4, 4, // Ordenes y v de sperfce GL_MA_VERTEX_; // Tpo de sperfce // sperfce termnd glendsrfcepnrb; odemos hcer más llmds glnrbssrfce pr crer clqer número de sperfces NURBS, pero ls propeddes qe defnmos pr el generdor NURBS segrán tenendo efecto. Usndo los pntos de control y los vlores nodles mostrdos en el sgente segmento de códgo, prodcremos l sperfce NURBS qe hy contncón. // L mll se extende ctro nddes de -6 6 lo lrgo // de los ees x e y, descns en el plno Z v x,y,z GLflot ctrlonts[4][4][] -6.f, -6.f,.f, //, v -6.f, -.f,.f, // v -6.f,.f,.f, // v -6.f, 6.f,.f, / v -.f, -6.f,.f, // v -.f, -.f, 8.f, // v -.f,.f, 8.f, // v -.f, 6.f,.f, // v.f, -6.f,.f, // v.f, -.f, 8.f, // v.f,.f, 8.f, // v.f, 6.f,.f, // v 6.f, -6.f,.f, // v 6.f, -.f,.f, // v
6.f,.f,.f, // v 6.f, 6.f,.f; // v // Secenc de ndos de ls NURBS GLflot Knots[8].f,.f,.f,.f,.f,.f,.f,.f; El sgente eemplo mestr ls fncones prncples de l crecón y vslzcón de n sperfce NURBS GLflot ponts[][][] ntos. GLnt nmonts; GLnt nnmonts ; GLflot ctrlonts[4][4][] -6.f, -6.f,.f, //, v -6.f, -.f,.f, // v -6.f,.f,.f, // v -6.f, 6.f,.f, // v -.f, -6.f,.f, // v -.f, -.f, 8.f, // v -.f,.f, 8.f, // v -.f, 6.f,.f, // v.f, -6.f,.f, // v.f, -.f, 8.f, // v.f,.f, 8.f, // v.f, 6.f,.f, // v 6.f, -6.f,.f, // v 6.f, -.f,.f, // v 6.f,.f,.f, // v 6.f, 6.f,.f; // v // Secenc de ndos de ls NURBS GLflot Knots[8].f,.f,.f,.f,.f,.f,.f,.f; TFormMn *FormMn; fstcll TFormMn::TFormMnTComponent* Owner : TFormOwner Applcton->OnIdle IdleLoop; sze 5.f; vod fstcll TFormMn::FormCreteTObect *Sender
hdc GetDCHndle; SetxelFormtDescrptor; hrc wglcretecontexthdc; fhrc NULL ShowMessge":-~ hrc NULL"; fwglmkecrrenthdc, hrc flse ShowMessge"Cold not MkeCrrent"; w ClentWdth; h ClentHeght; glenblegl_deth_test; glenblegl_cull_face; glclercolor.f,.f,.f,.f; vod fstcll TFormMn::SetxelFormtDescrptor IXELFORMATDESCRITOR pfd szeofixelformatdescritor,, FD_DRAW_TO_WINDOW FD_SUORT_OENGL FD_DOUBLEBUFFER, FD_TYE_RGBA, 4,,,,,,,,,,,,,,,,, FD_MAIN_LANE,,,, ; xelformt ChoosexelFormthdc, &pfd; SetxelFormthdc, xelformt, &pfd; vod fstcll TFormMn::FormReszeTObect *Sender GLflot rngo; w ClentWdth; h ClentHeght; fh h ; glvewport,, w, h; glmtrxmodegl_rojection; gllodidentty; rngo; glfrstm-rngo,rngo, -rngo, rngo,,5; glmtrxmodegl_modelview;
gllodidentty; gltrnsltef5,-5,-5; glrottef,,,; vod fstcll TFormMn::RenderGLScene glclergl_color_buffer_bit GL_DETH_BUFFER_BIT; DrwObects; glflsh; vod fstcll TFormMn::DrwObects GLUnrbsOb *pnrbnull; //Defncón del obeto NURBS pnrbglnewnrbsrenderer; glnrbsropertypnrb, GLU_SAMLING_TOLERANCE, 5.f; glnrbsropertypnrb, GLU_DISLAY_MODE, GLflotGLU_FILL; glbegnsrfcepnrb; glnrbssrfcepnrb, 8, Knots, 8, Knots, 4 *,, &ctrlonts[][][], 4, 4, GL_MA_VERTEX_; //Borr el obeto NURBS s se creó f pnrb gldeletenrbsrendererpnrb; cretesrfce; drwsrfce; vod fstcll TFormMn::FormntTObect *Sender glclergl_color_buffer_bit GL_DETH_BUFFER_BIT; glflsh; DrwObects; od fstcll TFormMn::SlrClckTObect *Sender
ext; vod cretesrfce GLflot mterldffse[].,.,.,. ; GLflot mterlspeclr[].,.,.,. ; GLflot mterlshnness[] 8 ; GLflot speclr[].f,.f,.f,.f; GLflot specref[].f,.f,.f,.f; glmterlfv GL_FRONT, GL_DIFFUSE, mterldffse ; glmterlfv GL_FRONT, GL_SECULAR, mterlspeclr ; glmterlfv GL_FRONT, GL_SHININESS, mterlshnness ; glmterlfvgl_front, GL_SECULAR, specref; glenble GL_LIGHTING ; glenble GL_LIGHT ; gldepthfnc GL_LEQUAL ; glenble GL_DETH_TEST ; glenble GL_AUTO_NORMAL ; glenble GL_NORMALIZE ; nrbsrfce glnewnrbsrenderer; glnrbsroperty nrbsrfce, GLU_SAMLING_TOLERANCE, 5. ; glnrbsroperty nrbsrfce, GLU_DISLAY_MODE, GLU_FILL ; vod drwsrfce GLflot knots[6],,,,,,,,,,,,,,,,,,,,,,,,, ; glcolorf.,.,. ; glbegnsrfce nrbsrfce ; glnrbssrfce nrbsrfce, 6, knots, 6, knots, *,, &ponts[][][],,, GL_MA_VERTEX_ ; glendsrfce nrbsrfce ; El resltdo fnl es el mostrdo en l sgente fgr: