Example usage for com.badlogic.gdx.graphics GL20 GL_TRIANGLE_STRIP

List of usage examples for com.badlogic.gdx.graphics GL20 GL_TRIANGLE_STRIP

Introduction

In this page you can find the example usage for com.badlogic.gdx.graphics GL20 GL_TRIANGLE_STRIP.

Prototype

int GL_TRIANGLE_STRIP

To view the source code for com.badlogic.gdx.graphics GL20 GL_TRIANGLE_STRIP.

Click Source Link

Usage

From source file:com.badlogic.gdx.tests.dragome.examples.GearsDemo.java

private static Model gear(ModelBuilder builder, float inner_radius, float outer_radius, float width, int teeth,
        float tooth_depth, Color color) {
    // Ported from https://github.com/jeffboody/gears2/blob/master/project/jni/gear.c by xpenatan
    int i;//from   w w w.  java  2 s.c  om
    float r0, r1, r2, dz;
    float angle, da;
    float u, v, len;

    float[] ar = new float[4];

    VertexInfo vertTmp1 = new VertexInfo();

    r0 = inner_radius;
    r1 = outer_radius - tooth_depth / 2.0f;
    r2 = outer_radius + tooth_depth / 2.0f;

    dz = 0.5f * width;

    builder.begin();

    MeshPartBuilder part = null;

    // draw front face
    // GL_TRIANGLE_STRIP
    part = builder.part("gear", GL20.GL_TRIANGLE_STRIP, Usage.Position | Usage.Normal,
            new Material(ColorAttribute.createDiffuse(color)));
    da = 2.0f * (float) Math.PI / teeth / 4.0f;
    for (i = 0; i < teeth; i++) {
        angle = i * 2.0f * (float) Math.PI / teeth;
        gear_angle(i, teeth, ar);
        part.index(
                part.vertex(vertTmp1.setPos(r0 * (float) Math.cos(ar[0]), r0 * (float) Math.sin(ar[0]), dz)));
        part.index(
                part.vertex(vertTmp1.setPos(r1 * (float) Math.cos(ar[0]), r1 * (float) Math.sin(ar[0]), dz)));
        part.index(
                part.vertex(vertTmp1.setPos(r0 * (float) Math.cos(ar[0]), r0 * (float) Math.sin(ar[0]), dz)));
        part.index(
                part.vertex(vertTmp1.setPos(r1 * (float) Math.cos(ar[3]), r1 * (float) Math.sin(ar[3]), dz)));
    }
    part.index(part.vertex(vertTmp1.setPos(r0 * (float) Math.cos(0.0f), r0 * (float) Math.sin(0.0f), dz)));
    part.index(part.vertex(vertTmp1.setPos(r1 * (float) Math.cos(0.0f), r1 * (float) Math.sin(0.0f), dz)));

    // draw front sides of teeth
    // GL_TRIANGLES
    part = builder.part("gear", GL20.GL_TRIANGLES, Usage.Position | Usage.Normal,
            new Material(ColorAttribute.createDiffuse(color)));
    for (i = 0; i < teeth; i++) {
        gear_angle(i, teeth, ar);
        part.index(
                part.vertex(vertTmp1.setPos(r1 * (float) Math.cos(ar[0]), r1 * (float) Math.sin(ar[0]), dz)));
        part.index(
                part.vertex(vertTmp1.setPos(r2 * (float) Math.cos(ar[1]), r2 * (float) Math.sin(ar[1]), dz)));
        part.index(
                part.vertex(vertTmp1.setPos(r2 * (float) Math.cos(ar[2]), r2 * (float) Math.sin(ar[2]), dz)));

        part.index(
                part.vertex(vertTmp1.setPos(r1 * (float) Math.cos(ar[0]), r1 * (float) Math.sin(ar[0]), dz)));
        part.index(
                part.vertex(vertTmp1.setPos(r2 * (float) Math.cos(ar[2]), r2 * (float) Math.sin(ar[2]), dz)));
        part.index(
                part.vertex(vertTmp1.setPos(r1 * (float) Math.cos(ar[3]), r1 * (float) Math.sin(ar[3]), dz)));
    }

    // draw back face
    // GL_TRIANGLE_STRIP
    part = builder.part("gear", GL20.GL_TRIANGLE_STRIP, Usage.Position | Usage.Normal,
            new Material(ColorAttribute.createDiffuse(color)));
    for (i = 0; i < teeth; i++) {
        gear_angle(i, teeth, ar);

        part.index(
                part.vertex(vertTmp1.setPos(r1 * (float) Math.cos(ar[0]), r1 * (float) Math.sin(ar[0]), -dz)));
        part.index(
                part.vertex(vertTmp1.setPos(r0 * (float) Math.cos(ar[0]), r0 * (float) Math.sin(ar[0]), -dz)));
        part.index(
                part.vertex(vertTmp1.setPos(r1 * (float) Math.cos(ar[3]), r1 * (float) Math.sin(ar[3]), -dz)));
        part.index(
                part.vertex(vertTmp1.setPos(r0 * (float) Math.cos(ar[0]), r0 * (float) Math.sin(ar[0]), -dz)));
    }
    part.index(part.vertex(vertTmp1.setPos(r1 * (float) Math.cos(0.0f), r1 * (float) Math.sin(0.0f), -dz)));
    part.index(part.vertex(vertTmp1.setPos(r0 * (float) Math.cos(0.0f), r0 * (float) Math.sin(0.0f), -dz)));

    // draw back sides of teeth
    // GL_TRIANGLES
    part = builder.part("gear", GL20.GL_TRIANGLES, Usage.Position | Usage.Normal,
            new Material(ColorAttribute.createDiffuse(color)));
    for (i = 0; i < teeth; i++) {
        gear_angle(i, teeth, ar);
        part.index(
                part.vertex(vertTmp1.setPos(r1 * (float) Math.cos(ar[3]), r1 * (float) Math.sin(ar[3]), -dz)));
        part.index(
                part.vertex(vertTmp1.setPos(r2 * (float) Math.cos(ar[2]), r2 * (float) Math.sin(ar[2]), -dz)));
        part.index(
                part.vertex(vertTmp1.setPos(r2 * (float) Math.cos(ar[1]), r2 * (float) Math.sin(ar[1]), -dz)));

        part.index(
                part.vertex(vertTmp1.setPos(r1 * (float) Math.cos(ar[3]), r1 * (float) Math.sin(ar[3]), -dz)));
        part.index(
                part.vertex(vertTmp1.setPos(r2 * (float) Math.cos(ar[1]), r2 * (float) Math.sin(ar[1]), -dz)));
        part.index(
                part.vertex(vertTmp1.setPos(r1 * (float) Math.cos(ar[0]), r1 * (float) Math.sin(ar[0]), -dz)));

    }

    // draw outward faces of teeth
    // GL_TRIANGLE_STRIP
    // repeated vertices are necessary to achieve flat shading in ES2
    part = builder.part("gear", GL20.GL_TRIANGLE_STRIP, Usage.Position | Usage.Normal,
            new Material(ColorAttribute.createDiffuse(color)));
    for (i = 0; i < teeth; i++) {
        gear_angle(i, teeth, ar);
        vertTmp1.hasNormal = false;
        if (i > 0) {
            part.index(part
                    .vertex(vertTmp1.setPos(r1 * (float) Math.cos(ar[0]), r1 * (float) Math.sin(ar[0]), dz)));
            part.index(part
                    .vertex(vertTmp1.setPos(r1 * (float) Math.cos(ar[0]), r1 * (float) Math.sin(ar[0]), -dz)));
        }

        u = r2 * (float) Math.cos(ar[1]) - r1 * (float) Math.cos(ar[0]);
        v = r2 * (float) Math.sin(ar[1]) - r1 * (float) Math.sin(ar[0]);
        len = (float) Math.sqrt(u * u + v * v);
        u /= len;
        v /= len;

        vertTmp1.setNor(v, -u, 0.0f);
        part.index(
                part.vertex(vertTmp1.setPos(r1 * (float) Math.cos(ar[0]), r1 * (float) Math.sin(ar[0]), dz)));
        part.index(
                part.vertex(vertTmp1.setPos(r1 * (float) Math.cos(ar[0]), r1 * (float) Math.sin(ar[0]), -dz)));
        part.index(
                part.vertex(vertTmp1.setPos(r2 * (float) Math.cos(ar[1]), r2 * (float) Math.sin(ar[1]), dz)));
        part.index(
                part.vertex(vertTmp1.setPos(r2 * (float) Math.cos(ar[1]), r2 * (float) Math.sin(ar[1]), -dz)));

        vertTmp1.setNor((float) Math.cos(ar[0]), (float) Math.sin(ar[0]), 0.0f);
        part.index(
                part.vertex(vertTmp1.setPos(r2 * (float) Math.cos(ar[1]), r2 * (float) Math.sin(ar[1]), dz)));
        part.index(
                part.vertex(vertTmp1.setPos(r2 * (float) Math.cos(ar[1]), r2 * (float) Math.sin(ar[1]), -dz)));
        part.index(
                part.vertex(vertTmp1.setPos(r2 * (float) Math.cos(ar[2]), r2 * (float) Math.sin(ar[2]), dz)));
        part.index(
                part.vertex(vertTmp1.setPos(r2 * (float) Math.cos(ar[2]), r2 * (float) Math.sin(ar[2]), -dz)));

        u = r1 * (float) Math.cos(ar[3]) - r2 * (float) Math.cos(ar[2]);
        v = r1 * (float) Math.sin(ar[3]) - r2 * (float) Math.sin(ar[2]);

        vertTmp1.setNor(v, -u, 0.0f);
        part.index(
                part.vertex(vertTmp1.setPos(r2 * (float) Math.cos(ar[2]), r2 * (float) Math.sin(ar[2]), dz)));
        part.index(
                part.vertex(vertTmp1.setPos(r2 * (float) Math.cos(ar[2]), r2 * (float) Math.sin(ar[2]), -dz)));
        part.index(
                part.vertex(vertTmp1.setPos(r1 * (float) Math.cos(ar[3]), r1 * (float) Math.sin(ar[3]), dz)));
        part.index(
                part.vertex(vertTmp1.setPos(r1 * (float) Math.cos(ar[3]), r1 * (float) Math.sin(ar[3]), -dz)));

        vertTmp1.setNor((float) Math.cos(ar[0]), (float) Math.sin(ar[0]), 0.0f);
        part.index(
                part.vertex(vertTmp1.setPos(r1 * (float) Math.cos(ar[3]), r1 * (float) Math.sin(ar[3]), dz)));
        part.index(
                part.vertex(vertTmp1.setPos(r1 * (float) Math.cos(ar[3]), r1 * (float) Math.sin(ar[3]), -dz)));
    }
    vertTmp1.hasNormal = false;
    part.index(part.vertex(vertTmp1.setPos(r1 * (float) Math.cos(0.0f), r1 * (float) Math.sin(0.0f), dz)));
    part.index(part.vertex(vertTmp1.setPos(r1 * (float) Math.cos(0.0f), r1 * (float) Math.sin(0.0f), -dz)));

    // draw inside radius cylinder
    // GL_TRIANGLE_STRIP
    part = builder.part("gear", GL20.GL_TRIANGLE_STRIP, Usage.Position | Usage.Normal,
            new Material(ColorAttribute.createDiffuse(color)));
    for (i = 0; i < teeth; i++) {
        gear_angle(i, teeth, ar);
        vertTmp1.setNor(-(float) Math.cos(ar[0]), -(float) Math.sin(ar[0]), 0.0f);
        part.index(
                part.vertex(vertTmp1.setPos(r0 * (float) Math.cos(ar[0]), r0 * (float) Math.sin(ar[0]), -dz)));
        part.index(
                part.vertex(vertTmp1.setPos(r0 * (float) Math.cos(ar[0]), r0 * (float) Math.sin(ar[0]), dz)));
    }
    vertTmp1.setNor(-(float) Math.cos(0.0f), -(float) Math.sin(0.0f), 0.0f);
    part.index(part.vertex(vertTmp1.setPos(r0 * (float) Math.cos(0.0f), r0 * (float) Math.sin(0.0f), -dz)));
    part.index(part.vertex(vertTmp1.setPos(r0 * (float) Math.cos(0.0f), r0 * (float) Math.sin(0.0f), dz)));

    return builder.end();
}

From source file:com.box2dLight.box2dLight.DirectionalLight.java

License:Apache License

@Override
void render() {
    rayHandler.lightRenderedLastFrame++;
    lightMesh.render(rayHandler.lightShader, GL20.GL_TRIANGLE_STRIP, 0, vertexNum);
}

From source file:com.lyeeedar.Roguelike3D.Graphics.Models.SkyBox.java

License:Open Source License

public void render(Camera cam) {
    Gdx.gl.glDisable(GL20.GL_DEPTH_TEST);
    Gdx.gl.glDepthMask(false);/*from ww w.  ja  v a  2s .  c  o  m*/
    Gdx.gl.glDisable(GL20.GL_CULL_FACE);

    Gdx.gl20.glActiveTexture(SKYBOX_TEXTURE_ACTIVE_UNIT);
    Gdx.gl20.glBindTexture(GL20.GL_TEXTURE_CUBE_MAP, textureId);

    shader.begin();

    shader.setUniformMatrix("u_pv", cam.combined);
    shader.setUniformf("u_pos", cam.position);
    shader.setUniformi("u_texture", 0);
    mesh.render(shader, GL20.GL_TRIANGLE_STRIP);

    shader.end();

    Gdx.gl.glEnable(GL20.GL_DEPTH_TEST);
    Gdx.gl.glDepthMask(true);
    Gdx.gl.glEnable(GL20.GL_CULL_FACE);
}

From source file:com.mbrlabs.mundus.commons.g3d.MG3dModelLoader.java

License:Apache License

private int parseType(String type) {
    if (type.equals("TRIANGLES")) {
        return GL20.GL_TRIANGLES;
    } else if (type.equals("LINES")) {
        return GL20.GL_LINES;
    } else if (type.equals("POINTS")) {
        return GL20.GL_POINTS;
    } else if (type.equals("TRIANGLE_STRIP")) {
        return GL20.GL_TRIANGLE_STRIP;
    } else if (type.equals("LINE_STRIP")) {
        return GL20.GL_LINE_STRIP;
    } else {//from  w  w w. j a v a  2s .c o  m
        throw new GdxRuntimeException("Unknown primitive type '" + type
                + "', should be one of triangle, trianglestrip, line, linestrip, lineloop or point");
    }
}

From source file:com.perfectplay.org.SkyBox.java

License:Open Source License

public void render(PerspectiveCamera camera) {
    invView.set(camera.view);/*  w  w w .  j  a v a 2  s. c om*/

    // Remove translation
    invView.val[Matrix4.M03] = 0;
    invView.val[Matrix4.M13] = 0;
    invView.val[Matrix4.M23] = 0;

    invView.inv().tra();

    mvp.set(camera.projection);
    mvp.mul(invView);

    Gdx.gl.glEnable(GL20.GL_CULL_FACE);
    Gdx.gl.glCullFace(GL20.GL_FRONT);
    Gdx.gl.glFrontFace(GL20.GL_CCW);

    Gdx.gl20.glDisable(GL20.GL_BLEND);
    Gdx.gl20.glDisable(GL20.GL_DEPTH_TEST);
    Gdx.gl20.glDepthMask(false);

    Gdx.gl20.glActiveTexture(GL20.GL_TEXTURE0);
    Gdx.gl20.glBindTexture(GL20.GL_TEXTURE_CUBE_MAP, g_cubeTexture);

    program.begin();

    program.setUniformMatrix("u_mvpMatrix", mvp);
    program.setUniformi("s_cubemap", 0);

    cube.render(program, GL20.GL_TRIANGLE_STRIP);

    program.end();

    Gdx.gl.glEnable(GL20.GL_DEPTH_TEST);
    Gdx.gl.glDepthMask(true);
}

From source file:com.torrosoft.sopistan.gui.graphics.Strip.java

License:Open Source License

public void draw(Camera cam) {
    if (tristrip.size <= 0)
        return;// ww w  .  j a  v a  2 s. c o  m

    gl20.begin(cam.combined, GL20.GL_TRIANGLE_STRIP);

    for (int i = 0; i < tristrip.size; i++) {
        if (i == batchSize) {
            gl20.end();
            gl20.begin(cam.combined, GL20.GL_TRIANGLE_STRIP);
        }

        Vector2 point = tristrip.get(i);
        Vector2 tc = texcoord.get(i);
        gl20.color(color.r, color.g, color.b, color.a);
        gl20.texCoord(tc.x, 0f);
        gl20.vertex(point.x, point.y, 0f);
    }

    gl20.end();
}

From source file:es.eucm.ead.editor.view.builders.scene.draw.MeshHelper.java

License:Open Source License

/**
 * Handles all the necessary data required to draw brush strokes, undo/redo
 * and delete them. The {@link #scaledView} parameter will be used to
 * perform local to stage coordinates conversion in order to recalculate the
 * new required data/positions. This class assumes that
 * {@link Pixmap#setBlending(Blending.None)} is activated in order to
 * function correctly.//  ww w .j av  a2s. c o m
 * 
 * @param controller
 *            Used to correctly perform the commands.
 */
public MeshHelper(Actor scaledView, Controller controller) {
    this.primitiveType = GL20.GL_TRIANGLE_STRIP;
    this.lineVertices = new float[MAX_VERTICES];
    this.controller = controller;
    this.scaledView = scaledView;
    resetTotalBounds();

    ActionListener erasePixmaps = new ActionListener() {
        @Override
        public void enableChanged(Class actionClass, boolean enable) {
            if (!enable) {
                if (actionClass == Undo.class) {
                    release(drawLine.undoPixmaps);
                } else {
                    release(drawLine.redoPixmaps);
                }
            }
        }
    };
    Actions actions = controller.getActions();
    actions.addActionListener(Undo.class, erasePixmaps);
    actions.addActionListener(Redo.class, erasePixmaps);
}