コード例 #1
0
ファイル: GraphLines.cs プロジェクト: huangdonghai/titan3d
        public async System.Threading.Tasks.Task <bool> Init(Graphics.CGfxMaterialInstance material, float halfWidth = 0.1F)
        {
            var rc = CEngine.Instance.RenderContext;

            Material = material;
            GeomMesh = new Graphics.Mesh.CGfxMeshPrimitives();
            GeomMesh.Init(rc, null, 1);
            CDrawPrimitiveDesc dpDesc = new CDrawPrimitiveDesc();

            dpDesc.SetDefault();
            dpDesc.StartIndex = 0xFFFFFFFF;
            GeomMesh.PushAtomLOD(0, ref dpDesc);

            var Mesh = new Graphics.Mesh.CGfxMesh();

            Mesh.Init(rc, null, GeomMesh);
            var img = new Graphics.Mesh.CGfxImage2D();

            Mesh.Tag = img;

            UpdateGeomMesh(rc, halfWidth);

            GraphActor = GamePlay.Actor.GActor.NewMeshActorDirect(Mesh);
            var meshComp = GraphActor.GetComponent <GamePlay.Component.GMeshComponent>();
            await meshComp.SetMaterialInstanceAsync(rc, 0, material, null);

            //await meshComp.SetMaterial(rc, 0, material, CEngine.Instance.PrebuildPassData.Image2DShadingEnvs, false, true);
            return(true);
        }
コード例 #2
0
ファイル: CNavMesh.cs プロジェクト: huangdonghai/titan3d
        public Graphics.Mesh.CGfxMeshPrimitives CreateRenderMeshPrimitives(CRenderContext rc)
        {
            var ptr = SDK_RcNavMesh_CreateRenderMesh(CoreObject, rc.CoreObject);

            if (ptr.GetPointer() == IntPtr.Zero)
            {
                return(null);
            }
            var result = new Graphics.Mesh.CGfxMeshPrimitives(ptr);

            return(result);
        }
コード例 #3
0
 public bool BuildTriMesh(CRenderContext rc, Graphics.Mesh.CGfxMeshPrimitives mesh, ref CConvexDecompDesc desc, bool doConvex = true)
 {
     unsafe
     {
         mesh.PreUse(true);
         if (doConvex)
         {
             fixed(CConvexDecompDesc *p = &desc)
             {
                 return(SDK_SimGeom_BuildTriMesh(CoreObject, rc.CoreObject, mesh.CoreObject, p));
             }
         }
         else
         {
             return(SDK_SimGeom_BuildTriMesh(CoreObject, rc.CoreObject, mesh.CoreObject, (CConvexDecompDesc *)IntPtr.Zero));
         }
     }
 }
コード例 #4
0
ファイル: CNavMesh.cs プロジェクト: huangdonghai/titan3d
        public async System.Threading.Tasks.Task <EngineNS.GamePlay.Actor.GActor> CreateRenderActor(CRenderContext rc, Graphics.Mesh.CGfxMeshPrimitives pri)
        {
            EngineNS.GamePlay.Actor.GActor actor = EngineNS.GamePlay.Actor.GActor.NewMeshActorDirect(EngineNS.CEngine.Instance.MeshManager.CreateMesh(rc, pri));
            await actor.GetComponent <EngineNS.GamePlay.Component.GMeshComponent>().SetMaterialInstance(EngineNS.CEngine.Instance.RenderContext, 0, RName.GetRName("editor/icon/icon_3D/material/pathfinding.instmtl"), null);

            actor.Placement.Location = new EngineNS.Vector3(0.0f, 0.0f, 0.0f);
            actor.Placement.Rotation = EngineNS.Quaternion.RotationAxis(EngineNS.Vector3.UnitY, 0.0f);
            actor.Placement.Scale    = new EngineNS.Vector3(1.0f, 1.0f, 1.0f);
            actor.SpecialName        = "NavMeshDebugger";
            return(actor);
        }
コード例 #5
0
ファイル: CPhyShape.cs プロジェクト: huangdonghai/titan3d
        public void OnEditorCommitVisual(CCommandList cmd, Graphics.CGfxCamera camera, GamePlay.Actor.GActor hostactor, GamePlay.SceneGraph.CheckVisibleParam param)
        {
            if (hostactor == null || !hostactor.Visible)
            {
                return;
            }

            var rc = CEngine.Instance.RenderContext;

            switch (ShapeType)
            {
            case EPhysShapeType.PST_Convex:
            {
                if (mDebugActor == null)
                {
                    Graphics.Mesh.CGfxMeshPrimitives mp = IfGetConvexMesh(rc);
                    mDebugActor = EngineNS.GamePlay.Actor.GActor.NewMeshActorDirect(CEngine.Instance.MeshManager.CreateMesh(rc, mp));
                    EngineNS.Thread.Async.TaskLoader.Release(ref WaitContext, null);
                    var test = SetMaterial();
                }
                mDebugActor.Placement.SetMatrix(ref hostactor.Placement.mDrawTransform);
            }
            break;

            case EPhysShapeType.PST_TriangleMesh:
            {
                if (mDebugActor == null)
                {
                    Graphics.Mesh.CGfxMeshPrimitives mp = IfGetTriMesh(rc);
                    CEngine.Instance.MeshManager.CreateMesh(rc, mp);
                    EngineNS.Thread.Async.TaskLoader.Release(ref WaitContext, null);
                    mDebugActor = EngineNS.GamePlay.Actor.GActor.NewMeshActorDirect(CEngine.Instance.MeshManager.CreateMesh(rc, mp));

                    var test = SetMaterial();
                }
                mDebugActor.Placement.SetMatrix(ref hostactor.Placement.mDrawTransform);
            }
            break;

            case EPhysShapeType.PST_Box:
            {
                if (mDebugActor == null && mReady == false)
                {
                    mReady = true;
                    var test = CreateDefaultBox();

                    test = SetMaterial();
                }

                if (mDebugActor != null)
                {
                    float w = 1.0f;
                    float h = 1.0f;
                    float l = 1.0f;
                    SDK_PhyShape_IfGetBox(ref w, ref h, ref l);
                    mDebugActor.Placement.SetMatrix(ref hostactor.Placement.mDrawTransform);
                    Vector3 scale = Vector3.UnitXYZ;        //mDebugActor.Placement.Scale;
                    scale.SetValue(scale.X * w, scale.Y * h, scale.Z * l);
                    mDebugActor.Placement.Scale = scale;
                }
            }
            break;

            case EPhysShapeType.PST_Sphere:
            {
                if (mDebugActor == null && mReady == false)
                {
                    mReady = true;
                    var test = CreateDefaultSphere();
                    test = SetMaterial();
                }

                if (mDebugActor != null)
                {
                    float r = 1.0f;
                    IfGetSphere(ref r);
                    mDebugActor.Placement.SetMatrix(ref hostactor.Placement.mDrawTransform);
                    Vector3 scale = Vector3.UnitXYZ;        //mDebugActor.Placement.Scale;
                    scale.SetValue(scale.X * r, scale.Y * r, scale.Z * r);
                    mDebugActor.Placement.Scale = scale;
                }
            }
            break;

            default:
                break;
            }

            if (mDebugActor != null)
            {
                foreach (var comp in mDebugActor.Components)
                {
                    var meshComp = comp as EngineNS.GamePlay.Component.GVisualComponent;
                    if (meshComp != null)
                    {
                        meshComp.CommitVisual(cmd, camera, param);
                    }
                }
            }
        }
コード例 #6
0
 public void AddMeshSource(Graphics.Mesh.CGfxMeshPrimitives meshSource)
 {
     //meshSource.GeometryMesh
 }
コード例 #7
0
        public bool InitMesh(CRenderContext rc, Graphics.Mesh.CGfxMeshPrimitives mesh)
        {
            mMesh = mesh;
            mesh.PreUse();
            EnablePosition        = false;
            EnableNormal          = false;
            EnableTangent         = false;
            EnableColor           = false;
            EnableUV              = false;
            EnableLightMapUV      = false;
            EnableSkinIndex       = false;
            EnableSkinWeight      = false;
            EnableTerrainIndex    = false;
            EnableTerrainGradient = false;

            AABB = mesh.AABB;

            int vertNum = 0;

            Vertices.Clear();

            #region Position
            var vb = mesh.GeometryMesh.GetVertexBuffer(EVertexSteamType.VST_Position);
            if (vb != null)
            {
                EnablePosition = true;
                var blob = new Support.CBlobObject();
                vb.GetBufferData(rc, blob);
                unsafe
                {
                    vertNum = (int)blob.Size / sizeof(Vector3);
                    var ptr = (Vector3 *)blob.Data.ToPointer();
                    for (int i = 0; i < vertNum; i++)
                    {
                        var vert = new Vertex();
                        vert.Position = ptr[i];
                        Vertices.Add(vert);
                    }
                }
            }
            else
            {
                return(false);
            }
            #endregion

            #region Normal
            vb = mesh.GeometryMesh.GetVertexBuffer(EVertexSteamType.VST_Normal);
            if (vb != null)
            {
                EnableNormal = true;
                var blob = new Support.CBlobObject();
                vb.GetBufferData(rc, blob);
                unsafe
                {
                    var ptr = (Vector3 *)blob.Data.ToPointer();
                    for (int i = 0; i < vertNum; i++)
                    {
                        Vertices[i].Normal = ptr[i];
                    }
                }
            }
            #endregion

            #region Tangent
            vb = mesh.GeometryMesh.GetVertexBuffer(EVertexSteamType.VST_Tangent);
            if (vb != null)
            {
                EnableTangent = true;
                var blob = new Support.CBlobObject();
                vb.GetBufferData(rc, blob);
                unsafe
                {
                    var ptr = (Vector4 *)blob.Data.ToPointer();
                    for (int i = 0; i < vertNum; i++)
                    {
                        Vertices[i].Tangent = ptr[i];
                    }
                }
            }
            #endregion

            #region Color
            vb = mesh.GeometryMesh.GetVertexBuffer(EVertexSteamType.VST_Color);
            if (vb != null)
            {
                EnableColor = true;
                var blob = new Support.CBlobObject();
                vb.GetBufferData(rc, blob);
                unsafe
                {
                    var ptr = (Byte4 *)blob.Data.ToPointer();
                    for (int i = 0; i < vertNum; i++)
                    {
                        Vertices[i].Color = ptr[i];
                    }
                }
            }
            #endregion

            #region UV
            vb = mesh.GeometryMesh.GetVertexBuffer(EVertexSteamType.VST_UV);
            if (vb != null)
            {
                EnableUV = true;
                var blob = new Support.CBlobObject();
                vb.GetBufferData(rc, blob);
                unsafe
                {
                    var ptr = (Vector2 *)blob.Data.ToPointer();
                    for (int i = 0; i < vertNum; i++)
                    {
                        Vertices[i].UV = ptr[i];
                    }
                }
            }
            #endregion

            #region LightMapUV
            vb = mesh.GeometryMesh.GetVertexBuffer(EVertexSteamType.VST_LightMap);
            if (vb != null)
            {
                EnableLightMapUV = true;
                var blob = new Support.CBlobObject();
                vb.GetBufferData(rc, blob);
                unsafe
                {
                    var ptr = (Vector2 *)blob.Data.ToPointer();
                    for (int i = 0; i < vertNum; i++)
                    {
                        Vertices[i].LightMapUV = ptr[i];
                    }
                }
            }
            #endregion

            #region SkinIndex
            vb = mesh.GeometryMesh.GetVertexBuffer(EVertexSteamType.VST_SkinIndex);
            if (vb != null)
            {
                EnableSkinIndex = true;
                var blob = new Support.CBlobObject();
                vb.GetBufferData(rc, blob);
                unsafe
                {
                    var ptr = (Byte4 *)blob.Data.ToPointer();
                    for (int i = 0; i < vertNum; i++)
                    {
                        Vertices[i].SkinIndex = ptr[i];
                    }
                }
            }
            #endregion

            #region SkinWeight
            vb = mesh.GeometryMesh.GetVertexBuffer(EVertexSteamType.VST_SkinWeight);
            if (vb != null)
            {
                EnableSkinWeight = true;
                var blob = new Support.CBlobObject();
                vb.GetBufferData(rc, blob);
                unsafe
                {
                    var ptr = (Vector4 *)blob.Data.ToPointer();
                    for (int i = 0; i < vertNum; i++)
                    {
                        Vertices[i].SkinWeight = ptr[i];
                    }
                }
            }
            #endregion

            #region TerrainIndex
            vb = mesh.GeometryMesh.GetVertexBuffer(EVertexSteamType.VST_TerrainIndex);
            if (vb != null)
            {
                EnableTerrainIndex = true;
                var blob = new Support.CBlobObject();
                vb.GetBufferData(rc, blob);
                unsafe
                {
                    var ptr = (Byte4 *)blob.Data.ToPointer();
                    for (int i = 0; i < vertNum; i++)
                    {
                        Vertices[i].TerrainIndex = ptr[i];
                    }
                }
            }
            #endregion

            #region TerrainGradient
            vb = mesh.GeometryMesh.GetVertexBuffer(EVertexSteamType.VST_TerrainGradient);
            if (vb != null)
            {
                EnableTerrainGradient = true;
                var blob = new Support.CBlobObject();
                vb.GetBufferData(rc, blob);
                unsafe
                {
                    var ptr = (Byte4 *)blob.Data.ToPointer();
                    for (int i = 0; i < vertNum; i++)
                    {
                        Vertices[i].TerrainGradient = ptr[i];
                    }
                }
            }
            #endregion

            List <int> OriIndices = new List <int>();
            #region Face
            var ib = mesh.GeometryMesh.GetIndexBuffer();
            if (ib != null)
            {
                var blob = new Support.CBlobObject();
                ib.GetBufferData(rc, blob);
                unsafe
                {
                    if (ib.Desc.Type == EIndexBufferType.IBT_Int16)
                    {
                        int indexNum = (int)blob.Size / (sizeof(UInt16));
                        var ptr      = (UInt16 *)blob.Data.ToPointer();
                        for (int i = 0; i < indexNum; i++)
                        {
                            OriIndices.Add(ptr[i]);
                        }
                    }
                    else
                    {
                        int indexNum = (int)blob.Size / (sizeof(int));
                        var ptr      = (int *)blob.Data.ToPointer();
                        for (int i = 0; i < indexNum; i++)
                        {
                            OriIndices.Add(ptr[i]);
                        }
                    }
                }
            }
            #endregion

            #region Mtl
            Faces.Clear();
            Atoms = new List <MeshAtom>();
            for (UInt32 i = 0; i < mesh.AtomNumber; i++)
            {
                var atom = new MeshAtom();
                atom.Mtl = (int)i;
                mesh.GetAtom(i, 0, ref atom.OriginDesc);
                Atoms.Add(atom);

                int index = (int)atom.OriginDesc.StartIndex / 3;
                for (int j = 0; j < atom.OriginDesc.NumPrimitives; j++)
                {
                    var f = new Face();
                    f.A   = OriIndices[(int)atom.OriginDesc.StartIndex + j * 3 + 0];
                    f.B   = OriIndices[(int)atom.OriginDesc.StartIndex + j * 3 + 1];
                    f.C   = OriIndices[(int)atom.OriginDesc.StartIndex + j * 3 + 2];
                    f.Mtl = (int)i;
                    atom.Faces.Add(Faces.Count);
                    Faces.Add(f);
                }
            }
            #endregion

            BuildFixedVertices(0.000001f);
            BuildFaces();

            BuildEdges();
            BuildLinkers();

            for (int i = 0; i < Atoms.Count; i++)
            {
                Atoms[i].FaceLods.Clear();
                Atoms[i].FaceLods.Add(Atoms[i].Faces);
            }

            return(true);
        }