Dessin Anticrénelage de cercle à l'aide de Shaders

Je suis nouveau sur le shader de la programmation. Je suis en train de dessiner un cercle avec glsl. J'ai utilisé un point avec une Taille et essayé de filtrer les points en dehors du rayon.(Modification de la valeur alpha).
Le code est comme suit:

Fragment Shader:

#version 130
varying  vec2 textureCoordinate;
const float circleBorderWidth = 0.08;//for anti aliasing
void main() {
      float d = smoothstep(circleBorderWidth,0.1, 1.0-length(textureCoordinate));
      gl_FragColor = vec4(0.0, 1.0, 0.0, d);
}

Vertex Shader:

#version 130
attribute vec4 coord3d;
attribute vec2 varPos;
varying vec2 textureCoordinate;
void
main()
{
        textureCoordinate = varPos;
        gl_FrontColor = gl_Color;
        gl_Position = vec4(coord3d.xyz,1.);
        gl_PointSize = coord3d.w;
}

Données:

float pos[] = {
    -1, -1,
     -1, 1,
     1, 1,
     1, -1,
};

float vertices[]={0.0,0.0f,0.0f,100.0f};

La Méthode De Tirage:

void drawScene() {
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    program->makeCurrent();
    glEnable(GL_POINT_SMOOTH);
    glEnable(GL_VERTEX_PROGRAM_POINT_SIZE);
    glEnable(GL_BLEND);
    glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

    if (varPosAttrib>=0) {
        glVertexAttribPointer( varPosAttrib, 2, GL_FLOAT, GL_FALSE,
                               0, pos ); //-->varPos in Vertex Shader.
        glEnableVertexAttribArray( varPosAttrib );
    }

    if (posAttrib>=0) {
        glVertexAttribPointer(posAttrib, 4, GL_FLOAT, GL_FALSE, 0, vertices); //-->coord3d in vertex shader
        glEnableVertexAttribArray(posAttrib);
        glDrawArrays(GL_POINTS, 0, 1);
    }
    glDisable(GL_POINT_SMOOTH);
    glDisable(GL_VERTEX_PROGRAM_POINT_SIZE);
    glDisable(GL_BLEND);
    program->release();
    glutSwapBuffers(); //Send the 3D scene to the screen
}

Cette résultats dans le dessin d'un carré si je remplace d avec la 1.0 à la ligne suivante (dans le fragment shader):

gl_FragColor = vec4(0.0, 1.0, 0.0, d); //-> if d is replaced by 1.0

J'ai essayé de remplacer les valeurs x et y dans gl_FragColor avec textureCoordinate.x et textureCoordinate.y. Le résultat était noir (donc je suppose que les valeurs sont 0.0). La chose que je ne comprends pas, c'est que si je prends la longueur de textureCoordinate que c'est toujours 1.0.(expérimenté par le remplacement de la valeur dans gl_fragcolor). Je suis incapable de comprendre que ce que je fais de mal ici. Je m'attendais à la textureCoordinate valeur pour interpoler à l'égard de la transmission de données (varPos).

OriginalL'auteur user1754682 | 2012-10-18