【问题标题】:Drawing particle groups in box2d在 box2d 中绘制粒子组
【发布时间】:2014-10-28 12:44:59
【问题描述】:

有没有人有任何使用JBox2d绘制ParticleGroups的示例Java代码?
我已经设法定义了一个粒子组区域,但我不确定如何使用OpenGL 绘制单个粒子..

m_world.setParticleRadius(0.15f);
m_world.setParticleDamping(0.2f);

PolygonShape shape = new PolygonShape();
shape.setAsBox(8, 10, new Vec2(-12, 10.1f), 0);
ParticleGroupDef pd = new ParticleGroupDef();
pd.shape = shape;
m_world.createParticleGroup(pd);

这是我在项目中绘制普通Square 的方式,但不确定如何将其应用于粒子组..

public void draw(GLAutoDrawable gLDrawable, Vec3 position, float angle){

    gLDrawable.getGL().getGL2().glEnable(GL.GL_BLEND);
    gLDrawable.getGL().getGL2().glEnable(GL.GL_TEXTURE_2D);

    gLDrawable.getGL().getGL2().glBlendFunc(GL.GL_SRC_ALPHA, GL.GL_ONE_MINUS_SRC_ALPHA);

    gLDrawable.getGL().getGL2().glBindTexture(GL2.GL_TEXTURE_2D, TextureFactory.getTextureIndex(TextureCollection.valueOf(getTextureSelection())));
    gLDrawable.getGL().getGL2().glPushMatrix();

    gLDrawable.getGL().getGL2().glTranslatef(position.x * getP2M(), position.y * getP2M(), position.z);
    gLDrawable.getGL().getGL2().glRotated(Math.toDegrees(angle), 0, 0, 1);
    gLDrawable.getGL().getGL2().glBegin(GL2.GL_QUADS);
    gLDrawable.getGL().getGL2().glTexCoord2f(0.0f, 0.0f);
    gLDrawable.getGL().getGL2().glVertex3f(-getWidth() / 2 * getP2M(), -getHeight() / 2 * getP2M(), 0.0f);
    gLDrawable.getGL().getGL2().glTexCoord2f(0.0f, 1.0f);
    gLDrawable.getGL().getGL2().glVertex3f(-getWidth() / 2 * getP2M(), getHeight() / 2 * getP2M(), 0.0f);
    gLDrawable.getGL().getGL2().glTexCoord2f(1.0f, 1.0f);
    gLDrawable.getGL().getGL2().glVertex3f(getWidth() / 2 * getP2M(), getHeight() / 2 * getP2M(), 0.0f);    
    gLDrawable.getGL().getGL2().glTexCoord2f(1.0f, 0.0f);
    gLDrawable.getGL().getGL2().glVertex3f(getWidth() / 2 * getP2M(), -getHeight() / 2 * getP2M(), 0.0f);   
    gLDrawable.getGL().getGL2().glEnd();                
    gLDrawable.getGL().getGL2().glFlush();
    gLDrawable.getGL().getGL2().glPopMatrix();

    gLDrawable.getGL().getGL2().glDisable(GL.GL_TEXTURE_2D);
    gLDrawable.getGL().getGL2().glDisable(GL.GL_BLEND);
}

【问题讨论】:

    标签: box2d


    【解决方案1】:

    尝试获取位置缓冲区:

    Vec2[] positions = m_world.getParticlePositionBuffer();
    

    此外,您可能还想获取颜色:

    ParticleColor[] colors = m_world.getParticleColorBuffer();
    

    然后我会使用 OpenGL 在每个位置绘制相应的颜色。我相信你可以编写一个非常简单的着色器来很好地解决这个问题。我会在这方面为您提供帮助,但我对 OpenGL 一点也不熟悉,尽管我曾多次尝试学习它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-09-14
      • 2023-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-11
      • 1970-01-01
      相关资源
      最近更新 更多