Ejemplo n.º 1
0
        /// <summary>
        /// 创建一个立方体
        /// </summary>
        public void CreateCube()
        {
            // 顶点位置
            Vector3D[] points =
            {
                new Vector3D(-1,  1, -1),
                new Vector3D(-1, -1, -1),
                new Vector3D(1,  -1, -1),
                new Vector3D(1,   1, -1),

                new Vector3D(-1,  1,  1),
                new Vector3D(-1, -1,  1),
                new Vector3D(1,  -1,  1),
                new Vector3D(1,   1, 1)
            };
            // 顶点索引
            int[] indices =
            {
                // 前面
                0, 1, 2, 0, 2, 3,
                // 后面
                7, 6, 5, 7, 5, 4,
                // 左面
                0, 4, 5, 0, 5, 1,
                // 右面
                2, 6, 7, 2, 7, 3,
                // 上面
                3, 7, 4, 3, 4, 0,
                // 下面
                1, 5, 6, 1, 6, 2
            };
            // UV坐标
            Vector2[] texcoords =
            {
                // 前面
                new Vector2(0, 0), new Vector2(0, 1), new Vector2(1, 1),
                new Vector2(0, 0), new Vector2(1, 1), new Vector2(1, 0),
                // 后面
                new Vector2(0, 0), new Vector2(0, 1), new Vector2(1, 1),
                new Vector2(0, 0), new Vector2(1, 1), new Vector2(1, 0),
                // 左面
                new Vector2(0, 0), new Vector2(0, 1), new Vector2(1, 1),
                new Vector2(0, 0), new Vector2(1, 1), new Vector2(1, 0),
                // 右面
                new Vector2(0, 0), new Vector2(0, 1), new Vector2(1, 1),
                new Vector2(0, 0), new Vector2(1, 1), new Vector2(1, 0),
                // 上面
                new Vector2(0, 0), new Vector2(0, 1), new Vector2(1, 1),
                new Vector2(0, 0), new Vector2(1, 1), new Vector2(1, 0),
                // 下面
                new Vector2(0, 0), new Vector2(0, 1), new Vector2(1, 1),
                new Vector2(0, 0), new Vector2(1, 1), new Vector2(1, 0)
            };
            //法线
            Vector3D[] norlmas =
            {
                // 前面
                new Vector3D(0,   0, -1), new Vector3D(0,   0, -1), new Vector3D(0,   0, -1),
                new Vector3D(0,   0, -1), new Vector3D(0,   0, -1), new Vector3D(0,   0, -1),
                // 后面
                new Vector3D(0,   0,  1), new Vector3D(0,   0,  1), new Vector3D(0,   0,  1),
                new Vector3D(0,   0,  1), new Vector3D(0,   0,  1), new Vector3D(0,   0,  1),
                // 左面
                new Vector3D(-1,  0,  0), new Vector3D(-1,  0,  0), new Vector3D(-1,  0,  0),
                new Vector3D(-1,  0,  0), new Vector3D(-1,  0,  0), new Vector3D(-1,  0,  0),
                // 右面
                new Vector3D(1,   0,  0), new Vector3D(1,   0,  0), new Vector3D(1,   0,  0),
                new Vector3D(1,   0,  0), new Vector3D(1,   0,  0), new Vector3D(1,   0,  0),
                // 上面
                new Vector3D(0,   1,  0), new Vector3D(0,   1,  0), new Vector3D(0,   1,  0),
                new Vector3D(0,   1,  0), new Vector3D(0,   1,  0), new Vector3D(0,   1,  0),
                // 下面
                new Vector3D(0,  -1,  0), new Vector3D(0,  -1,  0), new Vector3D(0,  -1,  0),
                new Vector3D(0,  -1,  0), new Vector3D(0,  -1,  0), new Vector3D(0,  -1,  0),
            };

            List <Vertex> vertices = new List <Vertex>();

            for (int i = 0; i < 36; i++)
            {
                Vertex   vertex = new Vertex();
                Vector3D point  = points[indices[i]];
                vertex.Position   = point;
                vertex.Position.w = 1;
                vertex.TexCoord   = texcoords[i];
                vertex.Normal     = norlmas[i];
                vertex.Color      = new SampleCommon.Color((point.x + 1) / 2, (point.y + 1) / 2, (point.z + 1) / 2);
                vertices.Add(vertex);
            }
            List <Triangle> triangles = new List <Triangle>();

            for (int i = 0; i < 36; i += 3)
            {
                Triangle triangle = new Triangle(vertices[i], vertices[i + 1], vertices[i + 2]);
                triangles.Add(triangle);
            }
            mCube = new Mesh(triangles);
            mRenderer.AddRenderObject(mCube);
        }
Ejemplo n.º 2
0
 public override void Added()
 {
     _renderObject = new ImGuiRenderObject();
     Renderer.AddRenderObject(_renderObject, RenderPass.UI);
 }