Estaba tratando de configurar los sprites de puntos en OpenGL para cambiar el tamaño con la distancia tal como lo haría un sprite con billboarded, pero no puedo obtener los valores en GL_POINT_DISTANCE_ATTENUATION_ARB
para hacer algo útil. ¿Hay una correlación de valores a esto que coincida con una proyección dada? ¿Es lo que estoy tratando de hacer posible?¿Es posible utilizar sprites de puntos OpenGL para simular sprites de vallas publicitarias?
Render código que se utiliza:
glPointParameterfARB = (PFNGLPOINTPARAMETERFARBPROC)wglGetProcAddress("glPointParameterfARB");
glPointParameterfvARB = (PFNGLPOINTPARAMETERFVARBPROC)wglGetProcAddress("glPointParameterfvARB");
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
gluPerspective(100.0, 800.0/600.0, 0.1, 10.0);
float quadratic[] = { 5.0f, 0.1f, 10.0f };
glPointParameterfvARB(GL_POINT_DISTANCE_ATTENUATION_ARB, quadratic);
float maxSize = 0.0f;
glGetFloatv(GL_POINT_SIZE_MAX_ARB, &maxSize);
if(maxSize > 100.0f) maxSize = 100.0f;
glPointSize(maxSize);
glPointParameterfARB(GL_POINT_FADE_THRESHOLD_SIZE_ARB, 0.1f);
glPointParameterfARB(GL_POINT_SIZE_MIN_ARB, 0.1f);
glPointParameterfARB(GL_POINT_SIZE_MAX_ARB, maxSize);
glTexEnvf(GL_POINT_SPRITE_ARB, GL_COORD_REPLACE_ARB, GL_TRUE);
glEnable(GL_POINT_SPRITE_ARB);
glScalef(0.75,1,1);
glTranslatef(0.00,0.0,-1.0);
glScalef(0.5,0.5,0.5);
glRotatef(counter*0.1+0.5,1.0,1.0,0.0);
glBegin(GL_POINTS);
for(int i = 0; i < 100; ++i)
{
glColor4f(i%10*0.1, i/10*0.1, 0.5, 1.0f);
glVertex3f(i%10*0.2-1.0,i/10*0.2-1.0,
((i%10-5)*(i%10-5)+(i/10-5)*(i/10-5))*0.01);
}
glEnd();
glDisable(GL_POINT_SPRITE_ARB);