Était-ce utile?

La solution

DOT3-éclairage est souvent désigné comme l'éclairage par pixel. Avec un éclairage au sommet de l'éclairage est calculée à chaque sommet et l'éclairage obtenu est interpolée sur le triangle. Dans l'éclairage par pixel, comme son nom l'indique, l'objet est de calculer l'éclairage à chaque pixel.

La façon dont cela se fait sur le matériel à fonction fixe que l'iPhone est avec soi-disant combineurs de registre. Le nom DOT3 vient de cet état rendu:

glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_DOT3_RGB);

Regardez cette entrée de blog sur Wolfgang Blog Engels pour plus d'informations sur exactement comment le mettre en place.

Quand vous faites éclairage par pixel, il est populaire d'utiliser aussi un soi-disant carte normale. Cela signifie que la normale de chaque point sur un objet est stocké dans une carte spéciale de texture, une carte normale. Cela a été popularisé dans le jeu DOOM 3 par le logiciel ID où très bas modèles de polygones utilisés où mais avec des cartes normales haute résolution. La raison pour l'utilisation de cette technique est que l'oeil est plus sensible aux variations de l'éclairage de la variation de la forme.

J'ai vu dans votre autre question que la raison pour laquelle c'est venu que vous vouliez réduire l'empreinte mémoire des données de sommet. Cela est vrai, au lieu de stocker trois composants pour une normale dans tous les sommets, il vous suffit de stocker deux composants pour les coordonnées de texture à la carte normale. L'activation de l'éclairage par pixel viendra avec un coût de performance mais je ne suis pas sûr que ce sera une victoire nette, comme d'habitude le conseil est d'essayer de voir.

Enfin, l'intensité de la lumière diffuse en un point est proportionnelle au cosinus de l'angle entre la normale à la surface et la direction de la lumière. Pour deux vecteur est défini les :

a dot b = |a||b| cos(theta)

|a| et |b| est la longueur des vecteurs a et b respectivement et theta est l'angle entre eux. Si la longueur est égale à un, et |a| |b| sont appelés vecteurs unitaires et la formule simplifie à:

a dot b = cos(theta)

cela signifie que l'intensité de la lumière diffuse est donnée par le produit scalaire entre la normale de surface et la direction de la lumière. Cela signifie que tous éclairage diffus est une forme de DOT3-éclairage, même si le nom est venu de se référer à la nature par pixel.

Autres conseils

De :

  

repoussage met une texture sur un modèle dans lequel la luminosité de chaque texel définit la hauteur de ce texel.

     

La hauteur de chaque texel est ensuite utilisé pour perturber l'éclairage à travers la surface.

     

normal mapping met une texture sur un modèle où la couleur de chaque texel est en réalité trois valeurs qui définissent la direction de cet emplacement sur les points de surface.

     

Une couleur (255, 0, 0) par exemple, peut signifier que la surface à cet emplacement pointe vers le bas de l'axe X positif.

     

En d'autres termes, chaque texel est normal.

     

Le nom Dot3 vient de ce que vous faites avec ces Normales.

     

Disons que vous avez un vecteur qui pointe dans la direction de vos points de source lumineuse. Et disons que vous avez le vecteur qui est la normale à un texel spécifique sur votre modèle qui vous indique dans quelle direction que les points de texels.

     

Si vous faites une équation mathématique simple appelé un « produit scalaire » sur ces deux vecteurs normaux, comme suit:

     

Dot = N1x N2X + N1Y N2Y + N1z * N2Z

     

Ensuite, la valeur résultante est un nombre qui vous indique comment pointent dans la même direction bien ces deux vecteurs.

     

Si la valeur est -1, ils pointent dans des directions opposées, ce qui signifie en fait que le texel pointe à la source lumineuse, et la source lumineuse est dirigée vers le texel, de sorte que le texel doit être allumé.

     

Si la valeur est 1, alors qu'ils pointent dans la même direction, ce qui signifie que le texel est dirigée vers l'extérieur à partir de la source lumineuse.

     

Et si la valeur est 0, alors l'un des points de vecteurs à 90 degrés par rapport à l'autre. À savoir: Si vous êtes debout sur le sol à la recherche vers l'avant, alors votre point de vue vecteur est de 90 degrés par rapport à la normale du sol qui pointe vers le haut.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top