La Texture et la couleur en GLSL?
Je ne peux pas comprendre, comment faire avec OpenGL ES 2.0, des Résultats similaires à OpenGL ES 1.1. Je veux utiliser effectivement un Sampler2D (à mon mélange de texture avec le Canal Alpha pour le Framebuffer) et également définir une Couleur. La texture doit être peints dans la couleur - comme dans OpenGL ES 1.1
Mon FragmentShader ressemble à ceci:
varying lowp vec4 colorVarying;
varying mediump vec2 texcoordVarying;
uniform sampler2D texture;
void main(){
gl_FragColor = texture2D(texture, texcoordVarying) + colorVarying;
}
Mais la partie "+ colorVarying" détruit mon alphachannel avec du noir (parce que j'ai aussi ajouter colorVarying, si le AlphaValue est 0) et fait un étrange effet de dégradé... Comment est la texture & canal de couleur combinés en fonction fixes pipeline? Mon Remplacement pour glColor4f est:
void gl2Color4f(GLfloat r, GLfloat g, GLfloat b, GLfloat a){
const GLfloat pointer[] = {r, g, b, a};
glVertexAttribPointer(ATTRIB_COLOR, 2, GL_FLOAT, 0, 0, pointer);
glEnableVertexAttribArray(ATTRIB_COLOR);
}
Et je suis en utilisant glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); si c'est en quelque sorte pertinent...
Pour la couleur 1.0, 0.0, 1.0, 1.0 voici ce que je reçois aujourd'hui:
Et je veux obtenir:
Quelques idées pour accomplir cette?
Toute aide serait appréciée.
OriginalL'auteur Constantin | 2011-02-14
Vous devez vous connecter pour publier un commentaire.
De combiner votre sommet de la couleur à votre texture de la façon dont OpenGL ES 1.1 le fait par défaut, vous voulez que votre fragment shader:
Noter que
GL_MODULATE
multiplie la texture avec la couleur, plutôt que d'en rajouter.Vous êtes témoins d'un gradient dans l'image, parce que le passage d'un pas de 0 vertex array spécification des fonctions OpenGL ES (les deux 1.1 et 2.0) ne risque pas d'entraîner une foulée de 0—plutôt, OpenGL ES calcule la foulée pour vous, en supposant serrés les éléments du format/type que vous avez spécifié. Comme un résultat, vous êtes en train de lire après la fin de votre tableau dans la mémoire vive. Si vous voulez la même valeur dans tous les sommets, vous devez définir la valeur de l'attribut et de désactiver les associés de tableau:
OriginalL'auteur Pivot
Pivots réponse est très bien fonctionné pour moi. Je voulais juste ajouter comment il pourrait ressembler à une version plus récente de GLSL (3.3+):
Ce n'est que le fragment shader.
OriginalL'auteur Roovy