1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
|
bool GLLineRendererVA::begin(const Group& group) const
{
if (group.getNbParticles() > nbVertices >> 1)
return false;
vertexIterator = vertexArray;
colorIterator = colorArray;
return true;
}
void GLLineRendererVA::render(const Particle& particle) const
{
*colorIterator++ = particle.getParamValue(INDEX_RED);
*colorIterator++ = particle.getParamValue(INDEX_GREEN);
*colorIterator++ = particle.getParamValue(INDEX_BLUE);
*colorIterator++ = particle.getParamValue(INDEX_ALPHA);
*colorIterator++ = particle.getParamValue(INDEX_RED);
*colorIterator++ = particle.getParamValue(INDEX_GREEN);
*colorIterator++ = particle.getParamValue(INDEX_BLUE);
*colorIterator++ = particle.getParamValue(INDEX_ALPHA);
*vertexIterator++ = particle.position.x;
*vertexIterator++ = particle.position.y;
*vertexIterator++ = particle.position.z;
*vertexIterator++ = particle.position.x + particle.velocity.x * length;
*vertexIterator++ = particle.position.y + particle.velocity.y * length;
*vertexIterator++ = particle.position.z + particle.velocity.z * length;
}
void GLLineRendererVA::end(const Group& group) const
{
initBlending();
glLineWidth(width);
if (antialiasing)
glEnable(GL_LINE_SMOOTH);
else
glDisable(GL_LINE_SMOOTH);
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_COLOR_ARRAY);
glColorPointer(4,GL_FLOAT,0,colorArray);
glVertexPointer(3,GL_FLOAT,0,vertexArray);
glDrawArrays(GL_LINES,0,group.getNbParticles() << 1);
glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_COLOR_ARRAY);
} |
Partager