コード例 #1
0
        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();
        }
コード例 #2
0
        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();
        }
コード例 #3
0
ファイル: LineProp.cs プロジェクト: AnomalousMedical/Medical
 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();
 }
コード例 #4
0
 public override void update(Clock clock, EventManager eventManager)
 {
     if (drawLines)
     {
         manualObject.beginUpdate(0);
         foreach (Measurement measurement in MeasurementController.Measurements)
         {
             measurement.draw(this);
         }
         manualObject.end();
     }
 }
コード例 #5
0
        /// <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();
        }
コード例 #6
0
 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);
 }
コード例 #7
0
        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();
        }
コード例 #8
0
        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();
        }
コード例 #9
0
        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();
        }