Вы также можете сделать что-то вроде этого:
today = date.today()
invoice_for_today = Invoice.objects.filter(date__year=today.year, date__month=today.month, date__day=today.day)
Вот как я использую подход моего бедняги к масштабированию размера точки:
void render() {
glEnable(GL_VERTEX_PROGRAM_POINT_SIZE_ARB);
glHint(GL_POINT_SMOOTH_HINT, GL_NICEST);
glEnable(GL_POINT_SPRITE);
glActiveTexture(GL_TEXTURE0);
glTexEnvi(GL_POINT_SPRITE, GL_COORD_REPLACE, GL_TRUE);
/* Activate shader program here */
/* Send pointSize to shader program */
glBegin(GL_POINTS);
/* Render points here */
glVertex3f(...);
glEnd(GL_POINTS);
}
Вершинный шейдер:
uniform float pointSize;
void main() {
gl_Position = ftransform();
gl_PointSize = pointSize / gl_Position.w;
}
Вы можете делать все, что хотите, в фрагментном шейдере, но вам придется вычислить цвет, освещение и текстуру самостоятельно.
По моему опыту, затухание в пунктах не стоит проблем. Намного лучше написать очень простой вершинный шейдер GLSL, который устанавливает размер точки вручную в соответствии с некоторыми вычислениями, которые вы выполняете самостоятельно. Мне потребовалось около полдня, чтобы выучить с нуля весь GLSL, который мне нужен, чтобы это произошло.
Код GLSL может быть таким же простым, как эти несколько строк:
attribute float psize;
void main()
{
gl_FrontColor = gl_Color;
gl_PointSize = psize;
gl_Position = ftransform();
}
Где psize
- это точка параметр размера, выбираемый пользователем.