List of usage examples for com.badlogic.gdx.graphics GL20 GL_TRIANGLE_STRIP
int GL_TRIANGLE_STRIP
To view the source code for com.badlogic.gdx.graphics GL20 GL_TRIANGLE_STRIP.
Click Source Link
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); }