• Nenhum resultado encontrado

Curvas e Superfícies

3.2. SUPERFÍCIES

3.2.11. Superfícies Racionais

O processo de geração de superfícies (seção 3.1.9) racionais também é uma exten- são do processo usado para gerar as curvas racionais, aplicando os mesmos concei- tos de coordenadas homogêneas. A tabela que segue compara as expressões.

P (s, t) = Forma Inteira Forma Racional Bézier i 0 n i, j j 0 m i,n j,m B J (s) J (t) = =

å å

i 0 n i, j j m i, j i,n j,m i n i, j j m w B J (s) J (t) w = = = =

å å

å å

0 0 0 Ji,n(s) Jj,m(t) B-Spline i 0 n i, j j 0 m i,k j,l B N (s) N (t) = =

å å

i 0 n i, j j 0 m i,k j,l i, j i 0 n i, j j 0 m w N (s) N (t) B w = = = =

å å

å å

Ni,k(s) N (t)j,l

Onde Bisão os pontos de controle, wi,j são os pesos de cada ponto de controle (coordenada homogênea) e Ni,k(s), Nj,l(t), Ji,n(s) e Jj,m(t) são as funções de interpo- lação usadas.

No caso das superfícies de B-Spline, o vetor de nós usado pode ser periódico e uniforme; não-periódico ou não-uniforme, podendo ser usados vetores de nós dife- rentes nas direções s e t, como no caso das curvas onde os pesos wi,jdão um grau de liberdade adicional para a forma da superfície a ser obtida. A maioria das proprieda-

des das superfícies não-racionais estende-se à sua forma similar racional. Por exem- plo, se rotações e translações forem aplicadas aos pontos de controle, a superfície será interior ao convex hull do poliedro que a envolve.

3.2.12. NURBS

O termo NURBS é a abreviatura de Non-Uniform Rational B-Splines Surfaces, ou seja, é uma B-Spline racional (originária da razão de polinômios). Non-Uniform significa que a influência da extensão de um controle de vértice não precisa ser a in- tervalos iguais do parâmetro t, podendo variar (o que é muito bom na modelagem de superfícies irregulares). Rational significa que a equação usada para representar a curva ou superfície é expressa pela razão de dois polinômios. A forma Rational (como comentado na seção anterior) fornece um modelo melhor de algumas im- portantes superfícies especialmente para formas cônicas e esféricas.

As superfícies NURBS não existem no mundo do desenho tradicional. Elas foram criadas especialmente para a modelagem em três dimensões no computador. As NURBS são construídas matematicamente e representam formas de um espaço 3D. O uso de NURBS oferece uma forma matemática comum tanto para a análise quan- to para a geração de formas livres. Ela provê uma flexibilidade adicional para proje- tar uma grande variedade de formas e pode ser avaliada de maneira razoavelmente rápida por algoritmos numericamente estáveis e precisos.

Essas superfícies são obtidas com o uso de matrizes Bi,jde nós não-uniformes e são uma das formas de representação mais usadas em projetos de engenharia, prin- cipalmente por englobar todas as outras formas de representação.

A forma geral das B-Splines racionais, descritas na seção anterior, é também usada nas formas não-uniformes. A única restrição é (como o nome indica) que os vetores de nós sejam não-uniformes. Ela pode fazer com que todas as demais formas de re- presentação sejam casos particulares dela, bastando seguir as seguintes restrições:

Tipo De Curva Restrição

B-Spline não-racional Fixar todos os pesos wi,j=1

Bézier racional Se o número de pontos de controle é igual à ordem em cada di- reção dos parâmetros e não existirem nós interiores duplicados Bézier não-racional As mesmas das racionais, além de fixar que o peso seja wi,j=1

Além disso, as NURBS têm a habilidade de representar superfícies quadráticas. A característica não-uniforme das NURBS nos leva a um importante ponto. Por se- rem geradas matematicamente na forma homogênea, NURBS possuem um parâmetro adicional em 3D. Especificamente, um “array” de valores chamados nós especifica a in- fluência de sua extensão para cada vértice da curva ou superfície. Os nós são invisíveis

ao usuário e não podem ser manipulados diretamente, sendo que, ocasionalmente, o seu comportamento é capaz de afetar a aparência de um objeto gerado por NURBS.

A função polinomial das curvas NURBs é definida como:

P(t) w B N (t) w N (t) i i 0 n i n,i i i 0 n n,i = = = =

å

å

Pw( )t

Todos os polinômios possuem um grau. Uma equação linear possui grau 1; uma quadrática, grau 2; e as NURBs dependerão do grau das equações. Por exemplo, as cú- bicas possuem grau 3. Graus mais elevados são possíveis, porém muitas vezes desne- cessários e complexos. Uma curva pode possuir níveis de continuidade maiores que C2, mas para modelagem em computadores, curvaturas contínuas são satisfatórias. Ge- ralmente, a distinção entre uma curva C2e uma outra de maior continuidade é imper- ceptível para usuário.

Continuidade e grau estão relacionados. O grau 3 pode gerar curvas de continui- dade C2. Esse é o motivo pelo qual curvas de maior grau não são necessárias para

modelagem de NURBs. Curvas de graus maiores são também menos estáveis nume- ricamente, o que as torna não recomendáveis.

Diferentes segmentos de curvas NURBs podem ter diferentes níveis de continuida- de dependendo do posicionamento dos pontos de controle pelo usuário. Em particu- lar, quando posicionamos dois pontos de controle em um mesmo lugar ou muito próximos, o nível de continuidade será reduzido. Dois pontos de controles coinci- dentes aguçam a curvatura, enquanto três coincidentes criam uma quebra angular na curva. Essa propriedade de uma NURBs é conhecida como multiplicidade.

Existem três pontos de controles no ápice da esquerda e dois no ápice da direita nas curvas da Figura 3.29. Movendo um dos controles de vértices para longe do ou- tro, o nível de continuidade da curva será aumentado. A multiplicidade também é aplicada quando os pontos de controle são fundidos, gerando a criação de curvas refinadas ou quebradas. Refinar uma curva significa adicionar mais pontos de con- trole à curva. (Figura 3.29). Quando uma curva é refinada, sugerimos reparametri- zá-la. A reparametrização ajusta os parâmetros para que a curva se comporte ade- quadamente quando em edição.

z z z

x x x

y

y y

Os reparametrizadores mais úteis são os de comprimento de curva e os unifor- mes. No primeiro caso, os espaços entre os nós são reparametrizados com base na raiz quadrada do comprimento de cada segmento da curva. No segundo caso, ocor- re a reparametrização uniforme dos espaços entre os nós.

3.2.12.1. NURBS em OpenGL

Antes de chamarmos qualquer função NURBS, temos de dizer ao OpenGL que cria- remos um NURB. Isso pode ser feito pela chamada de função

nurbSurface = gluNewNurbsRenderer( );

Cada chamada a essa função retorna um ponteiro para a GLUnurbsObj, que deve ser usado com as demais funções NURBS. Dessa maneira, podemos criar quantos patches NURBS desejarmos ajustando suas propriedades individualmente.

Para ajustarmos as propriedades de um NURBS, chamamos a função gluNur- bsProperty( ).

gluNurbsProperty( GLUnurbsObj *nurb, GLenum property, GLfloat value );

As propriedades devem ser uma das que seguem:

GLU_SAMPLING_TOLERANCE: especifica o comprimento máximo em pixel dos polígonos que compõem a malha. Quanto menor, mais suave parecerá a malha, po- rém demandará mais tempo para o render. O valor padrão é de 50 pixels.

GLU_DISPLAY_MODE: define como um NURBS deve ser renderizado entre as seguin- tes opções: GLU_FILL, GLU_OUTLINE_POLYGON, ou GLU_OUTLINE_ PATCH GLU_CULLING: este é um valor booleano. GL_TRUE significa que uma superfície NURBS deve ser descartada se os seus pontos de controle estiverem fora da janela de visualização. O padrão é GL_FALSE.

GLU_AUTO_LOAD_MATRIX: este também é um valor booleano. GL_TRUE sig- nifica que um NURBS utiliza as matrizes de projeção corrente, modelview e view- port. GL_FALSE requer a especificação de matrizes através da função gluLoadSam- plingMatrices( ).

Agora que ajustamos as propriedades basta desenhar a curva através da função:

gluNurbsSurface( GLUnurbsObj *nurb, GLint uKnotCount, GLfloat *uKnot, GLint vKnotCount, GLfloat *vKnot, GLint uStride, GLint vStride, GLfloat *ctrlArray, GLint uOrder, GLint vOrder, GLenum type );

nurb é o ponteiro do objeto NURBS

uKnotCount especifica o número de nós na direção paramétrica uuKnot especifica um array de nós crescente na direção u

vKnotCount especifica o número de nós na direção paramétrica vvKnot especifica um array de nós crescente na direção v

uStride especifica o equilíbrio entre pontos de controles sucessivos na direção paramétrica u em ctrlArray

vStride especifica o equilíbrio entre pontos de controles sucessivos na direção paramétrica v em ctrlArray

uOrder especifica a ordem da superfície NURBS na direção uvOrder especifica a ordem da superfície NURBS na direção v

type especifica o tipo de superfície, que poderá ser GL_MAP2_VERTEX_3 or GL_MAP2_COLOR_4

Se desejar desenhar uma linha curva, em vez de uma superfície, você poderá chamar a função gluNurbsCurve( ) que possui os mesmos parâmetros, menos a direção v.

Documentos relacionados