2012-10-06 4 views
2

Je voudrais savoir s'il est possible de construire un trustum carré 3D en appliquant une forme de transformation à glutSolidCube(GLDouble size). Je suppose qu'il y a une sorte de matrice de cisaillement qui, d'après ce que je peux dire, n'est pas une transformation intégrée.Créer un tronc de carré 3D en appliquant une transformation à un cube?

Remarque, je ne me soucie pas du tout de la visionneuse (ce qui, comme vous pouvez l'imaginer, fausse les recherches Google). J'aimerais simplement avoir un trustum carré en 3D dans ma scène. Toute idée sur la façon de produire un à partir d'un cube serait appréciée!

A Square Frustum

+1

Un de mes amis, m'a dit qu'il y a aussi une transformation de cisaillement qui transforme le cube en un tronc de cône. Il parle de coefficients négatifs dans la matrice de cisaillement. Mais maintenant je ne peux pas trouver cette matrice. Colud quelqu'un nous aide? – Gabrer

Répondre

2

On cisaille pas la matrice, il est une matrice de projection pour la projection en perspective. Vous multipliez les coordonnées des sommets des cubes unitaires par une matrice de projection inverse pour obtenir les coordonnées des sommets tronconiques. Pour obtenir les coordonnées du tronc de cône dans l'espace du monde, vous devez également multiplier les sommets par la matrice de caméra inverse (voir la matrice).

Regardez ici pour les formules détaillées: http://www.songho.ca/opengl/gl_projectionmatrix.html

Pour déformer le cube, il est préférable de créer le VBO avec des sommets souhaités ou tout simplement rendre un certain nombre de quadriceps déformés, si vous voulez une mise en œuvre de l'aide de la quick'n'dirty pipeline à fonction fixe.

P.S.

Il y a un extrait de code pour calculer les angles du tronc: http://www.gamedev.net/topic/606716-frustum-corners-from-view-projection/

+0

Il a explicitement demandé de ne pas la transformation OpenGL. Je pense qu'une transformation plus simple est dans le but de transformer le cube en trapèze. – linello

0

Oui, il est possible de transformer votre cube en une matrice donnée tronc très de projection. Définissez d'abord une distance focale d qui est le point de convergence du bord du tronc de cône. Puis multipliez tous les coins de votre volume par cette matrice:

P = [ 1 0 0 0 
     0 1 0 0 
     0 1 1/d 0 
     0 0 1 0 ]