Java Code Examples for com.badlogic.gdx.graphics.g3d.utils.MeshPartBuilder#VertexInfo
The following examples show how to use
com.badlogic.gdx.graphics.g3d.utils.MeshPartBuilder#VertexInfo .
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example 1
Source File: Terrain.java From Mundus with Apache License 2.0 | 6 votes |
private void setVertex(int index, MeshPartBuilder.VertexInfo info) { index *= stride; if (posPos >= 0) { vertices[index + posPos] = info.position.x; vertices[index + posPos + 1] = info.position.y; vertices[index + posPos + 2] = info.position.z; } if (uvPos >= 0) { vertices[index + uvPos] = info.uv.x; vertices[index + uvPos + 1] = info.uv.y; } if (norPos >= 0) { vertices[index + norPos] = info.normal.x; vertices[index + norPos + 1] = info.normal.y; vertices[index + norPos + 2] = info.normal.z; } }
Example 2
Source File: ModelPlacementTool.java From Mundus with Apache License 2.0 | 6 votes |
@Override public boolean mouseMoved(int screenX, int screenY) { if (this.model == null || modelInstance == null) return false; final ProjectContext context = getProjectManager().current(); final Ray ray = getProjectManager().current().currScene.viewport.getPickRay(screenX, screenY); if (context.currScene.terrains.size > 0 && modelInstance != null) { MeshPartBuilder.VertexInfo vi = TerrainUtils.getRayIntersectionAndUp(context.currScene.terrains, ray); if (vi != null) { if (shouldRespectTerrainSlope) { modelInstance.transform.setToLookAt(DEFAULT_ORIENTATION, vi.normal); } modelInstance.transform.setTranslation(vi.position); } } else { tempV3.set(getProjectManager().current().currScene.cam.position); tempV3.add(ray.direction.nor().scl(200)); modelInstance.transform.setTranslation(tempV3); } return false; }
Example 3
Source File: HeightMapModel.java From gdx-proto with Apache License 2.0 | 6 votes |
private void buildTriangles() { //System.out.printf("chunk: startXZ: %d, %d -- length: %d\n", startX, startZ, length); int count = 0; MeshPartBuilder.VertexInfo right; MeshPartBuilder.VertexInfo down; MeshPartBuilder.VertexInfo downRight; for (int z = 0; z < vertexInfos.length - 1; z++) { for (int x = 0; x < (vertexInfos[0].length - 1); x++) { MeshPartBuilder.VertexInfo vert = vertexInfos[z][x]; right = vertexInfos[z][x+1]; down = vertexInfos[z+1][x]; downRight = vertexInfos[z+1][x+1]; // each z row has two trianagles forming a rect int xIdx = x*2; Triangle top = new Triangle(z, xIdx, vert, down, right); Triangle bottom = new Triangle(z, xIdx+1, downRight, right, down); count += 2; } } System.out.println("built " + count + " triangles"); }
Example 4
Source File: HeightMapModel.java From gdx-proto with Apache License 2.0 | 6 votes |
private void setVertexPositions() { // store vertex info for second pass where we calculate vertex normals for per-vertex lighting float[][] pts = heightMap.heights; float blockSize = heightMap.getWidthScale(); float heightScale = heightMap.getHeightScale(); float width = heightMap.getWidthWorld(); float depth = heightMap.getDepthWorld(); for (int z = 0; z < pts.length; z++) { for (int x = 0; x < pts[z].length; x++) { float y = pts[z][x]; MeshPartBuilder.VertexInfo thisVert = new MeshPartBuilder.VertexInfo(); thisVert.setPos(x * blockSize, y * heightScale, z * blockSize); // set texture UV float u = (x * blockSize) / width; float v = (z * blockSize) / depth; float scl = heightScale; scl = 1f; thisVert.setUV(u * scl, v * scl); vertexInfos[z][x] = thisVert; } } }
Example 5
Source File: HeightMapModel.java From gdx-proto with Apache License 2.0 | 6 votes |
public Triangle(int triZ, int triX, MeshPartBuilder.VertexInfo a, MeshPartBuilder.VertexInfo b, MeshPartBuilder.VertexInfo c) { zidx = triZ; xidx = triX; try { tris[triZ][triX] = this; } catch (ArrayIndexOutOfBoundsException e) { e.printStackTrace(); Tools.sleep(500); System.out.println("tried ZX: " + triZ + ", " + triX); System.out.println("length ZX: " + tris.length + ", " + tris[0].length); System.exit(5); } this.a = a; this.b = b; this.c = c; this.calculateFaceNormal(); }
Example 6
Source File: GrassRenderer.java From Radix with MIT License | 5 votes |
@Override public void renderTop(int atlasIndex, float x1, float z1, float x2, float z2, float y, float lightLevel, PerCornerLightData pcld, MeshBuilder builder) { float u = getU(atlasIndex); float v = getV(atlasIndex); builder.setUVRange(u, v, u, v); MeshPartBuilder.VertexInfo c00 = new MeshPartBuilder.VertexInfo().setPos(x1, y, z1).setNor(0, 1, 0); MeshPartBuilder.VertexInfo c01 = new MeshPartBuilder.VertexInfo().setPos(x1, y, z2).setNor(0, 1, 0); MeshPartBuilder.VertexInfo c10 = new MeshPartBuilder.VertexInfo().setPos(x2, y, z1).setNor(0, 1, 0); MeshPartBuilder.VertexInfo c11 = new MeshPartBuilder.VertexInfo().setPos(x2, y, z2).setNor(0, 1, 0); IChunk chunk = RadixClient.getInstance().getWorld().getChunk((int) x1, (int) z1); Biome biome; if(chunk != null) { biome = chunk.getBiome(); } else { biome = RadixAPI.instance.getBiomeByID(0); } int[] color = biome.getGrassColor((int) y - 1); float r = color[0]/255f; float g = color[1]/255f; float b = color[2]/255f; if(pcld == null) { builder.setColor(r*lightLevel, g*lightLevel, b*lightLevel, 1); } else { c00.setCol(r*pcld.l00, g*pcld.l00, b*pcld.l00, 1); c01.setCol(r*pcld.l01, g*pcld.l01, b*pcld.l01, 1); c10.setCol(r*pcld.l10, g*pcld.l10, b*pcld.l10, 1); c11.setCol(r*pcld.l11, g*pcld.l11, b*pcld.l11, 1); } builder.rect(c01, c11, c10, c00); }
Example 7
Source File: Terrain.java From Mundus with Apache License 2.0 | 5 votes |
private MeshPartBuilder.VertexInfo calculateVertexAt(MeshPartBuilder.VertexInfo out, int x, int z) { final float dx = (float) x / (float) (vertexResolution - 1); final float dz = (float) z / (float) (vertexResolution - 1); final float height = heightData[z * vertexResolution + x]; out.position.set(dx * this.terrainWidth, height, dz * this.terrainDepth); out.uv.set(dx, dz).scl(uvScale); return out; }
Example 8
Source File: HeightMapModel.java From gdx-proto with Apache License 2.0 | 5 votes |
private void createGround() { if (++timesCreated > 1) { throw new GdxRuntimeException("can't create heightmap more than one time"); } vertexInfos = new MeshPartBuilder.VertexInfo[heightMap.heights.length][heightMap.heights[0].length]; int trisHeight = (heightMap.getWidth() - 1); int trisWidth = (heightMap.getWidth() - 1) * 2; System.out.printf("tris zHeight,xWidth: %d, %d\n", trisHeight, trisWidth); tris = new Triangle[trisHeight][trisWidth]; setVertexPositions(); // iterate through height map points, setting world coordinates buildTriangles(); // abstraction of the triangles that create the mesh // useful for calculating vertex normals, since each triangle stores a face normal // but somewhat wasteful of memory // TODO: optimize calculateVertexNormals(); // calculate vertex normals for per-vertex lighting final int chunkSize = 32; int z = 0; int zRemain = (int) Math.ceil(heightMap.getDepth() / chunkSize); if (zRemain == 0) zRemain = 1; int baseXRemain = (int) Math.ceil(heightMap.getWidth() / chunkSize); if (baseXRemain == 0) baseXRemain = 1; System.out.println("z chunks: " + zRemain + ", x chunks: " + baseXRemain); while (zRemain > 0) { int xRemain = baseXRemain; int x = 0; while (xRemain > 0) { buildGroundModels(x, z, chunkSize); xRemain--; x += chunkSize*2; } zRemain--; z += chunkSize; } }
Example 9
Source File: HeightMapModel.java From gdx-proto with Apache License 2.0 | 5 votes |
private void calculateVertexNormals() { int count = 0; for (int z = 0; z < vertexInfos.length; z++) { for (int x = 0; x < vertexInfos[z].length; x++) { MeshPartBuilder.VertexInfo vert = vertexInfos[z][x]; // calculate normals vert.setNor(calculateNormalForVertex(z, x)); } } System.out.print("vertex count: " + count + ", "); }
Example 10
Source File: Tools.java From gdx-proto with Apache License 2.0 | 5 votes |
public static String fmt(MeshPartBuilder.VertexInfo vi, String name) { if (name == null) name = ""; StringBuilder sb = new StringBuilder(); sb.append("VertexInfo: ").append(name).append("\n"); sb.append("\t").append(fmt(vi.position, "position")).append("\n"); sb.append("\t").append(fmt(vi.color)).append("\n"); sb.append("\t").append(fmt(vi.normal, "normal")); return sb.toString(); }
Example 11
Source File: Terrain.java From Mundus with Apache License 2.0 | 4 votes |
/** * Calculates normal of a vertex at x,y based on the verticesOnZ of the * surrounding vertices */ private MeshPartBuilder.VertexInfo calculateNormalAt(MeshPartBuilder.VertexInfo out, int x, int y) { out.normal.set(getNormalAt(x, y)); return out; }
Example 12
Source File: UsefulMeshs.java From Mundus with Apache License 2.0 | 4 votes |
public static Model torus(Material mat, float width, float height, int divisionsU, int divisionsV) { ModelBuilder modelBuilder = new ModelBuilder(); modelBuilder.begin(); MeshPartBuilder builder = modelBuilder.part("torus", GL20.GL_TRIANGLES, VertexAttributes.Usage.Position, mat); // builder.setColor(Color.LIGHT_GRAY); MeshPartBuilder.VertexInfo curr1 = v0.set(null, null, null, null); curr1.hasUV = curr1.hasNormal = false; curr1.hasPosition = true; MeshPartBuilder.VertexInfo curr2 = v1.set(null, null, null, null); curr2.hasUV = curr2.hasNormal = false; curr2.hasPosition = true; short i1, i2, i3 = 0, i4 = 0; int i, j, k; double s, t, twopi; twopi = 2 * Math.PI; for (i = 0; i < divisionsV; i++) { for (j = 0; j <= divisionsU; j++) { for (k = 1; k >= 0; k--) { s = (i + k) % divisionsV + 0.5; t = j % divisionsU; curr1.position.set( (float) ((width + height * Math.cos(s * twopi / divisionsV)) * Math.cos(t * twopi / divisionsU)), (float) ((width + height * Math.cos(s * twopi / divisionsV)) * Math.sin(t * twopi / divisionsU)), (float) (height * Math.sin(s * twopi / divisionsV))); k--; s = (i + k) % divisionsV + 0.5; curr2.position.set( (float) ((width + height * Math.cos(s * twopi / divisionsV)) * Math.cos(t * twopi / divisionsU)), (float) ((width + height * Math.cos(s * twopi / divisionsV)) * Math.sin(t * twopi / divisionsU)), (float) (height * Math.sin(s * twopi / divisionsV))); // curr2.uv.set((float) s, 0); i1 = builder.vertex(curr1); i2 = builder.vertex(curr2); builder.rect(i4, i2, i1, i3); i4 = i2; i3 = i1; } } } return modelBuilder.end(); }
Example 13
Source File: Tools.java From gdx-proto with Apache License 2.0 | 4 votes |
public static String fmt(MeshPartBuilder.VertexInfo vi) { return fmt(vi, null); }
Example 14
Source File: Tools.java From gdx-proto with Apache License 2.0 | 4 votes |
public static void print(MeshPartBuilder.VertexInfo vi) { System.out.println(fmt(vi, null)); }
Example 15
Source File: Tools.java From gdx-proto with Apache License 2.0 | 4 votes |
public static void print(MeshPartBuilder.VertexInfo vi, String name) { System.out.println(fmt(vi, name)); }