El modelatge de superfícies és una part fonamental en la creació de gràfics en 3D. Aquest procés implica la representació de formes complexes mitjançant superfícies matemàtiques. En aquest tema, explorarem els conceptes clau, les tècniques i els algorismes utilitzats per modelar superfícies en tres dimensions.
Conceptes Clau
- Superfícies Paramètriques
Les superfícies paramètriques es defineixen mitjançant funcions que depenen de dos paràmetres, generalment \(u\) i \(v\). Aquestes funcions generen punts en l'espai 3D.
Exemple: \[ \mathbf{S}(u, v) = (x(u, v), y(u, v), z(u, v)) \]
- Superfícies de Bézier
Les superfícies de Bézier són una extensió de les corbes de Bézier a dues dimensions paramètriques. Són àmpliament utilitzades en gràfics per ordinador per la seva flexibilitat i facilitat de manipulació.
Exemple: \[ \mathbf{S}(u, v) = \sum_{i=0}^{n} \sum_{j=0}^{m} B_i^n(u) B_j^m(v) \mathbf{P}{ij} \] On \(B_i^n(u)\) i \(B_j^m(v)\) són polinomis de Bézier i \(\mathbf{P}{ij}\) són punts de control.
- Superfícies NURBS
Les superfícies NURBS (Non-Uniform Rational B-Splines) són una generalització de les superfícies de Bézier que permeten una major flexibilitat i precisió en el modelatge de formes complexes.
Exemple: \[ \mathbf{S}(u, v) = \frac{\sum_{i=0}^{n} \sum_{j=0}^{m} N_i^p(u) N_j^q(v) w_{ij} \mathbf{P}{ij}}{\sum{i=0}^{n} \sum_{j=0}^{m} N_i^p(u) N_j^q(v) w_{ij}} \] On \(N_i^p(u)\) i \(N_j^q(v)\) són funcions base B-spline, \(w_{ij}\) són pesos i \(\mathbf{P}_{ij}\) són punts de control.
Tècniques de Modelatge
- Patch de Bézier
Els patches de Bézier són segments de superfícies de Bézier que es poden unir per formar superfícies més grans i complexes.
- Subdivisió de Superfícies
La subdivisió de superfícies és una tècnica iterativa que refina una malla inicial per obtenir una superfície suau. Un exemple comú és l'algorisme de Catmull-Clark.
- Modelatge per Desplaçament
El modelatge per desplaçament utilitza textures de desplaçament per modificar la geometria d'una superfície, afegint detalls fins sense augmentar significativament el nombre de polígons.
Algorismes de Modelatge
Algorisme de Catmull-Clark
L'algorisme de Catmull-Clark és un mètode de subdivisió utilitzat per crear superfícies suaus a partir de malles poligonals.
Passos de l'algorisme:
- Afegir nous punts de vèrtex en el centre de cada cara.
- Afegir nous punts de vèrtex en el centre de cada aresta.
- Recalcular les posicions dels vèrtexs originals.
- Connectar els nous punts per formar la malla subdividida.
Algorisme de Marching Cubes
L'algorisme de Marching Cubes és utilitzat per generar superfícies isosuperfícies a partir de dades volumètriques.
Passos de l'algorisme:
- Dividir el volum en cubs.
- Determinar la intersecció de la superfície amb les arestes de cada cub.
- Generar polígons que aproximen la superfície dins de cada cub.
Exercicis Pràctics
Exercici 1: Crear una Superfície de Bézier
Objectiu: Crear una superfície de Bézier simple utilitzant punts de control.
Instruccions:
- Defineix una matriu de punts de control.
- Implementa la fórmula de la superfície de Bézier.
- Visualitza la superfície generada.
Codi Exemple:
import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D # Definir punts de control P = np.array([[[0, 0, 0], [1, 0, 2], [2, 0, 0]], [[0, 1, 2], [1, 1, 3], [2, 1, 2]], [[0, 2, 0], [1, 2, 2], [2, 2, 0]]]) # Funció de Bézier def bezier_surface(u, v, P): n, m, _ = P.shape S = np.zeros(3) for i in range(n): for j in range(m): B_i = (np.math.factorial(n-1) / (np.math.factorial(i) * np.math.factorial(n-1-i))) * (u**i) * ((1-u)**(n-1-i)) B_j = (np.math.factorial(m-1) / (np.math.factorial(j) * np.math.factorial(m-1-j))) * (v**j) * ((1-v)**(m-1-j)) S += B_i * B_j * P[i, j] return S # Generar punts de la superfície U = np.linspace(0, 1, 30) V = np.linspace(0, 1, 30) X, Y, Z = np.zeros((30, 30)), np.zeros((30, 30)), np.zeros((30, 30)) for i, u in enumerate(U): for j, v in enumerate(V): S = bezier_surface(u, v, P) X[i, j], Y[i, j], Z[i, j] = S # Visualitzar la superfície fig = plt.figure() ax = fig.add_subplot(111, projection='3d') ax.plot_surface(X, Y, Z, rstride=1, cstride=1, color='b', alpha=0.6, edgecolor='k') plt.show()
Exercici 2: Implementar l'Algorisme de Catmull-Clark
Objectiu: Implementar l'algorisme de Catmull-Clark per subdividir una malla poligonal.
Instruccions:
- Defineix una malla poligonal inicial.
- Implementa els passos de l'algorisme de Catmull-Clark.
- Visualitza la malla subdividida.
Codi Exemple:
# Aquest exercici és més avançat i requereix una implementació detallada de l'algorisme de Catmull-Clark. # Es recomana utilitzar llibreries com PyMesh o Trimesh per gestionar malles poligonals.
Resum
En aquesta secció, hem explorat els conceptes clau i les tècniques de modelatge de superfícies en 3D, incloent superfícies paramètriques, superfícies de Bézier i NURBS. També hem vist algorismes importants com el de Catmull-Clark i el de Marching Cubes. A més, hem proporcionat exercicis pràctics per ajudar a consolidar els coneixements adquirits. Amb aquestes eines, estaràs preparat per crear i manipular superfícies complexes en gràfics 3D.
Matemàtiques 3D
Mòdul 1: Fonaments d'Àlgebra Lineal
- Vectors i Espais Vectorials
- Matrius i Determinants
- Sistemes d'Equacions Lineals
- Autovalors i Autovectors
Mòdul 2: Transformacions Lineals
- Definició i Propietats
- Matrius de Transformació
- Rotacions, Translacions i Escalats
- Composició de Transformacions