Kullanarak ölçeklendirilmiş daire gölgelendirici programlamada yeniyim. Glsl ile bir daire çizmeye çalışıyorum. Boyutlu bir nokta kullandım ve yarıçap dışındaki noktaları filtrelemeye çalıştım (alfa değerini değiştirme). aşağıdaki kod gibidir:Çizim Shader
Fragman 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;
}
Veri:
float pos[] = {
-1, -1,
-1, 1,
1, 1,
1, -1,
};
float vertices[]={0.0,0.0f,0.0f,100.0f};
Çizim Yöntem:
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
}
I (parça gölgelendirici) Aşağıdaki doğrultusunda 1.0 ile d
yerine, bu, bir kare çizim ile sonuçlanır:
gl_FragColor = vec4(0.0, 1.0, 0.0, d); // -> if d is replaced by 1.0
I yerine çalıştı X ve y değerleri, textureCoordinate.x
ve textureCoordinate.y
ile gl_FragColor
'da. Sonuç siyahtı (bu yüzden değerlerin 0.0 olduğunu varsayalım). Anlamadığım şey, textureCoordinate
uzunluğunu her zaman 1.0 olduğundan (gl_fragcolor
değerinde değiştirerek deneniyor) alabilmem. Burada yanlış yaptığım şeyi anlayamıyorum. Geçilen verilerle ilgili olarak (varPos
) textureCoordinate
değerini bekliyorum.