private void buildBackground() { background.begin(materialName, OperationType.OT_TRIANGLE_LIST); //bottom left background.position(-halfWidth, -halfHeight, 0); background.textureCoord(0, uvY); //top left background.position(-halfWidth, halfHeight, 0); background.textureCoord(0, 0); //bottom right background.position(halfWidth, -halfHeight, 0); background.textureCoord(uvX, uvY); //top left background.position(-halfWidth, halfHeight, 0); background.textureCoord(0, 0); //top right background.position(halfWidth, halfHeight, 0); background.textureCoord(uvX, 0); //bottom right background.position(halfWidth, -halfHeight, 0); background.textureCoord(uvX, uvY); background.setRenderQueueGroup(0); background.end(); }
public void createEllipse() { manualObject.clear(); manualObject.begin("ManualTwoSidedPropShapeMaterial", OperationType.OT_TRIANGLE_STRIP); uint vertexCount = (uint)(numSections * 2); uint indexCount = vertexCount + 2; manualObject.estimateVertexCount(vertexCount); manualObject.estimateIndexCount(indexCount); float increment = 6.28f / numSections; for (uint i = 0; i < numSections; ++i) { float t = i * increment; Vector2 ellipsePosition = innerEllipse.getPoint(t); manualObject.position(new Vector3(ellipsePosition.x, ellipsePosition.y, 0)); manualObject.color(color.r, color.g, color.b, color.a); ellipsePosition = outerEllipse.getPoint(t); manualObject.position(new Vector3(ellipsePosition.x, ellipsePosition.y, 0)); manualObject.color(color.r, color.g, color.b, color.a); manualObject.index(i * 2); manualObject.index(i * 2 + 1); } //Close the ellipse manualObject.index(0); manualObject.index(1); manualObject.end(); }
public void createLine() { manualObject.clear(); manualObject.begin("ManualTwoSidedPropShapeMaterial", OperationType.OT_LINE_LIST); manualObject.position(0, 0, 0); manualObject.color(color.r, color.g, color.b, color.a); manualObject.position(0, length, 0); manualObject.color(color.r, color.g, color.b, color.a); manualObject.end(); }
public override void update(Clock clock, EventManager eventManager) { if (drawLines) { manualObject.beginUpdate(0); foreach (Measurement measurement in MeasurementController.Measurements) { measurement.draw(this); } manualObject.end(); } }
/// <summary> /// Draw a grid with the given spacing in milimeters taking up the space specified by gridmax. /// </summary> /// <param name="gridSpacingMM">The number of milimeters to space the grid lines.</param> /// <param name="gridMax">The area of the grid in 3d units.</param> private void redraw() { float gridSpacing = gridSpacingMM * (1.0f / SimulationConfig.UnitsToMM); Vector3 startPoint = new Vector3(0.0f, -gridMax, 0.0f); Vector3 endPoint = new Vector3(0.0f, gridMax, 0.0f); manualObject.clear(); manualObject.begin("Grid", OperationType.OT_LINE_LIST); for (float x = 0; x < gridMax; x += gridSpacing) { startPoint.x = x; endPoint.x = x; manualObject.position(ref startPoint); manualObject.color(color.r, color.g, color.b, color.a); manualObject.position(ref endPoint); manualObject.color(color.r, color.g, color.b, color.a); } for (float x = -gridSpacing; x > -gridMax; x -= gridSpacing) { startPoint.x = x; endPoint.x = x; manualObject.position(ref startPoint); manualObject.color(color.r, color.g, color.b, color.a); manualObject.position(ref endPoint); manualObject.color(color.r, color.g, color.b, color.a); } startPoint.x = -gridMax; endPoint.x = gridMax; for (float y = 0; y < gridMax; y += gridSpacing) { startPoint.y = y; endPoint.y = y; manualObject.position(ref startPoint); manualObject.color(color.r, color.g, color.b, color.a); manualObject.position(ref endPoint); manualObject.color(color.r, color.g, color.b, color.a); } for (float y = -gridSpacing; y > -gridMax; y -= gridSpacing) { startPoint.y = y; endPoint.y = y; manualObject.position(ref startPoint); manualObject.color(color.r, color.g, color.b, color.a); manualObject.position(ref endPoint); manualObject.color(color.r, color.g, color.b, color.a); } manualObject.end(); }
protected override void constructed() { sceneNode = Owner.getElement(nodeName) as SceneNodeElement; if (sceneNode == null) { blacklist("Cannot find scene node named {0}.", nodeName); } manualObject = sceneNode.getNodeObject(manualObjectName) as ManualObject; if (manualObject == null) { blacklist("Cannot find manual object named {0}.", manualObjectName); } manualObject.setVisible(drawLines); manualObject.begin("Grid", OperationType.OT_LINE_LIST); manualObject.position(ref Vector3.Zero); manualObject.color(0, 0, 0, 0); manualObject.position(ref Vector3.Zero); manualObject.color(0, 0, 0, 0); manualObject.end(); MeasurementController.setMeasurementDrawer(this); }
public void createObject() { manualObject.clear(); manualObject.begin("ManualTwoSidedPropShapeMaterial", OperationType.OT_TRIANGLE_STRIP); uint vertexCount = (uint)(4); uint indexCount = vertexCount + 2; manualObject.estimateVertexCount(vertexCount); manualObject.estimateIndexCount(indexCount); //0 1 // //2 3 // float widthHalfExtent = size.Width / 2.0f; float heightHalfExtent = size.Height / 2.0f; //Upper Left (0) manualObject.position(new Vector3(-widthHalfExtent, heightHalfExtent, 0f)); manualObject.color(color.r, color.g, color.b, color.a); //Upper Right (1) manualObject.position(new Vector3(widthHalfExtent, heightHalfExtent, 0f)); manualObject.color(color.r, color.g, color.b, color.a); //Lower Left (2) manualObject.position(new Vector3(-widthHalfExtent, -heightHalfExtent, 0f)); manualObject.color(color.r, color.g, color.b, color.a); //Lower Right (3) manualObject.position(new Vector3(widthHalfExtent, -heightHalfExtent, 0f)); manualObject.color(color.r, color.g, color.b, color.a); //First Triangle manualObject.index(1); manualObject.index(0); manualObject.index(3); //Second Triangle manualObject.index(3); manualObject.index(2); manualObject.index(0); manualObject.end(); }
protected void drawTile() { var tileManager = Scope.ServiceProvider.GetRequiredService <TilesetManager>(); if (tileManager == null) { blacklist("No tile manager service"); } Tileset tileset; if (!tileManager.tryGetTileset(TilesetName, out tileset)) { blacklist($"Cannot file tileset {TilesetName}"); } manualObject.begin(tileset.Material, OperationType.OT_TRIANGLE_LIST); IntVector3 dimen = (IntVector3)Dimensions; var ts = TileSize; //Tile size var rs = Dimensions * TileSize; //Real size var off = rs / 2; //offsets var z = 0.0f; uint numCreatedSquares = 0; Tile mainTile; if (!tileset.tryGetTile(SideTileName, out mainTile)) { blacklist($"Cannot find side tile {SideTileName} in Tileset {TilesetName}"); } //This order gives x, y for indices, 3rd quadrant x goes left y goes down //Front #region Front for (var y = 0; y < dimen.y; ++y) { for (var x = 0; x < dimen.x; ++x) { float vl = x * ts.x - off.x; float vt = y * ts.y - off.y; float vr = (x + 1) * ts.x - off.x; float vb = (y + 1) * ts.y - off.y; //lt manualObject.position(vl, -vt, z); manualObject.normal(0, 0, 1); manualObject.binormal(0, 1, 0); manualObject.tangent(1, 0, 0); manualObject.textureCoord(mainTile.left, mainTile.top); //rt manualObject.position(vr, -vt, z); manualObject.normal(0, 0, 1); manualObject.binormal(0, 1, 0); manualObject.tangent(1, 0, 0); manualObject.textureCoord(mainTile.right, mainTile.top); //lb manualObject.position(vl, -vb, z); manualObject.normal(0, 0, 1); manualObject.binormal(0, 1, 0); manualObject.tangent(1, 0, 0); manualObject.textureCoord(mainTile.left, mainTile.bottom); //rb manualObject.position(vr, -vb, z); manualObject.normal(0, 0, 1); manualObject.binormal(0, 1, 0); manualObject.tangent(1, 0, 0); manualObject.textureCoord(mainTile.right, mainTile.bottom); ++numCreatedSquares; } } #endregion for (uint i = 0; i < numCreatedSquares; ++i) { var square = i * 4; var lt = square; var rt = square + 1; var lb = square + 2; var rb = square + 3; //ccw manualObject.index(lt); manualObject.index(lb); manualObject.index(rb); manualObject.index(rb); manualObject.index(rt); manualObject.index(lt); } manualObject.end(); }
protected void drawTile() { var tileManager = Scope.ServiceProvider.GetRequiredService <TilesetManager>(); if (tileManager == null) { blacklist("No tile manager service"); } Tileset tileset; if (!tileManager.tryGetTileset(TilesetName, out tileset)) { blacklist($"Cannot file tileset {TilesetName}"); } manualObject.begin(tileset.Material, OperationType.OT_TRIANGLE_LIST); IntVector3 dimen = (IntVector3)Dimensions; var ts = TileSize; //Tile size var rs = Dimensions * TileSize; //Real size var off = rs / 2; //offsets var ss = rs - off; //Static sides, side values for the one that does not need to be computed uint numCreatedSquares = 0; Tile mainTile; if (!tileset.tryGetTile(SideTileName, out mainTile)) { blacklist($"Cannot find side tile {SideTileName} in Tileset {TilesetName}"); } //This order gives x, y for indices, 3rd quadrant x goes left y goes down //Front #region Front for (var y = 0; y < dimen.y; ++y) { for (var x = 0; x < dimen.x; ++x) { float vl = x * ts.x - off.x; float vt = y * ts.y - off.y; float vr = (x + 1) * ts.x - off.x; float vb = (y + 1) * ts.y - off.y; //lt manualObject.position(vl, -vt, ss.z); manualObject.normal(0, 0, 1); manualObject.binormal(0, 1, 0); manualObject.tangent(1, 0, 0); manualObject.textureCoord(mainTile.left, mainTile.top); //rt manualObject.position(vr, -vt, ss.z); manualObject.normal(0, 0, 1); manualObject.binormal(0, 1, 0); manualObject.tangent(1, 0, 0); manualObject.textureCoord(mainTile.right, mainTile.top); //lb manualObject.position(vl, -vb, ss.z); manualObject.normal(0, 0, 1); manualObject.binormal(0, 1, 0); manualObject.tangent(1, 0, 0); manualObject.textureCoord(mainTile.left, mainTile.bottom); //rb manualObject.position(vr, -vb, ss.z); manualObject.normal(0, 0, 1); manualObject.binormal(0, 1, 0); manualObject.tangent(1, 0, 0); manualObject.textureCoord(mainTile.right, mainTile.bottom); ++numCreatedSquares; } } #endregion //Back #region Back for (var y = 0; y < dimen.y; ++y) { for (var x = 0; x < dimen.x; ++x) { float vl = x * ts.x - off.x; float vt = y * ts.y - off.y; float vr = (x + 1) * ts.x - off.x; float vb = (y + 1) * ts.y - off.y; //rt manualObject.position(vr, -vt, -ss.z); manualObject.normal(0, 0, -1); manualObject.binormal(0, 1, 0); manualObject.tangent(1, 0, 0); manualObject.textureCoord(mainTile.right, mainTile.top); //lt manualObject.position(vl, -vt, -ss.z); manualObject.normal(0, 0, -1); manualObject.binormal(0, 1, 0); manualObject.tangent(1, 0, 0); manualObject.textureCoord(mainTile.left, mainTile.top); //rb manualObject.position(vr, -vb, -ss.z); manualObject.normal(0, 0, -1); manualObject.binormal(0, 1, 0); manualObject.tangent(1, 0, 0); manualObject.textureCoord(mainTile.right, mainTile.bottom); //lb manualObject.position(vl, -vb, -ss.z); manualObject.normal(0, 0, -1); manualObject.binormal(0, 1, 0); manualObject.tangent(1, 0, 0); manualObject.textureCoord(mainTile.left, mainTile.bottom); ++numCreatedSquares; } } #endregion //Left x is z and y is y #region Left for (var y = 0; y < dimen.y; ++y) { for (var x = 0; x < dimen.z; ++x) { float vl = x * ts.z - off.z; float vt = y * ts.y - off.y; float vr = (x + 1) * ts.z - off.z; float vb = (y + 1) * ts.y - off.y; //lt manualObject.position(-ss.x, -vt, vl); manualObject.normal(-1, 0, 0); manualObject.binormal(0, 1, 0); manualObject.tangent(0, 0, 1); manualObject.textureCoord(mainTile.left, mainTile.top); //rt manualObject.position(-ss.x, -vt, vr); manualObject.normal(-1, 0, 0); manualObject.binormal(0, 1, 0); manualObject.tangent(0, 0, 1); manualObject.textureCoord(mainTile.right, mainTile.top); //lb manualObject.position(-ss.x, -vb, vl); manualObject.normal(-1, 0, 0); manualObject.binormal(0, 1, 0); manualObject.tangent(0, 0, 1); manualObject.textureCoord(mainTile.left, mainTile.bottom); //rb manualObject.position(-ss.x, -vb, vr); manualObject.normal(-1, 0, 0); manualObject.binormal(0, 1, 0); manualObject.tangent(0, 0, 1); manualObject.textureCoord(mainTile.right, mainTile.bottom); ++numCreatedSquares; } } #endregion //Right x is z and y is y #region Right for (var y = 0; y < dimen.y; ++y) { for (var x = 0; x < dimen.z; ++x) { float vl = x * ts.z - off.z; float vt = y * ts.y - off.y; float vr = (x + 1) * ts.z - off.z; float vb = (y + 1) * ts.y - off.y; //rt manualObject.position(ss.x, -vt, vr); manualObject.normal(1, 0, 0); manualObject.binormal(0, 1, 0); manualObject.tangent(0, 0, 1); manualObject.textureCoord(mainTile.right, mainTile.top); //lt manualObject.position(ss.x, -vt, vl); manualObject.normal(1, 0, 0); manualObject.binormal(0, 1, 0); manualObject.tangent(0, 0, 1); manualObject.textureCoord(mainTile.left, mainTile.top); //rb manualObject.position(ss.x, -vb, vr); manualObject.normal(1, 0, 0); manualObject.binormal(0, 1, 0); manualObject.tangent(0, 0, 1); manualObject.textureCoord(mainTile.right, mainTile.bottom); //lb manualObject.position(ss.x, -vb, vl); manualObject.normal(1, 0, 0); manualObject.binormal(0, 1, 0); manualObject.tangent(0, 0, 1); manualObject.textureCoord(mainTile.left, mainTile.bottom); ++numCreatedSquares; } } #endregion //Top if (!tileset.tryGetTile(TopTileName, out mainTile)) { blacklist($"Cannot find top tile {TopTileName} in Tileset {TilesetName}"); } #region Top for (var y = 0; y < dimen.z; ++y) { for (var x = 0; x < dimen.x; ++x) { float vl = x * ts.x - off.x; float vt = y * ts.z - off.z; float vr = (x + 1) * ts.x - off.x; float vb = (y + 1) * ts.z - off.z; //rt manualObject.position(vr, ss.y, -vt); manualObject.normal(0, 1, 0); manualObject.binormal(0, 0, 1); manualObject.tangent(1, 0, 0); manualObject.textureCoord(mainTile.right, mainTile.top); //lt manualObject.position(vl, ss.y, -vt); manualObject.normal(0, 1, 0); manualObject.binormal(0, 0, 1); manualObject.tangent(1, 0, 0); manualObject.textureCoord(mainTile.left, mainTile.top); //rb manualObject.position(vr, ss.y, -vb); manualObject.normal(0, 1, 0); manualObject.binormal(0, 0, 1); manualObject.tangent(1, 0, 0); manualObject.textureCoord(mainTile.right, mainTile.bottom); //lb manualObject.position(vl, ss.y, -vb); manualObject.normal(0, 1, 0); manualObject.binormal(0, 0, 1); manualObject.tangent(1, 0, 0); manualObject.textureCoord(mainTile.left, mainTile.bottom); ++numCreatedSquares; } } #endregion //Botton if (!tileset.tryGetTile(BottomTileName, out mainTile)) { blacklist($"Cannot find bottom tile {BottomTileName} in Tileset {TilesetName}"); } #region Bottom for (var y = 0; y < dimen.z; ++y) { for (var x = 0; x < dimen.x; ++x) { float vl = x * ts.x - off.x; float vt = y * ts.z - off.z; float vr = (x + 1) * ts.x - off.x; float vb = (y + 1) * ts.z - off.z; //lt manualObject.position(vl, -ss.y, -vt); manualObject.normal(0, -1, 0); manualObject.binormal(0, 0, 1); manualObject.tangent(1, 0, 0); manualObject.textureCoord(mainTile.left, mainTile.top); //rt manualObject.position(vr, -ss.y, -vt); manualObject.normal(0, -1, 0); manualObject.binormal(0, 0, 1); manualObject.tangent(1, 0, 0); manualObject.textureCoord(mainTile.right, mainTile.top); //lb manualObject.position(vl, -ss.y, -vb); manualObject.normal(0, -1, 0); manualObject.binormal(0, 0, 1); manualObject.tangent(1, 0, 0); manualObject.textureCoord(mainTile.left, mainTile.bottom); //rb manualObject.position(vr, -ss.y, -vb); manualObject.normal(0, -1, 0); manualObject.binormal(0, 0, 1); manualObject.tangent(1, 0, 0); manualObject.textureCoord(mainTile.right, mainTile.bottom); ++numCreatedSquares; } } #endregion //If you want to do the math instead of counting //uint numSquares = (uint)(dimen.x * dimen.y * 2 + dimen.x * dimen.z * 2 + dimen.y * dimen.z * 2); for (uint i = 0; i < numCreatedSquares; ++i) { var square = i * 4; var lt = square; var rt = square + 1; var lb = square + 2; var rb = square + 3; //ccw manualObject.index(lt); manualObject.index(lb); manualObject.index(rb); manualObject.index(rb); manualObject.index(rt); manualObject.index(lt); } manualObject.end(); }