private Texture GetOnTexture() { RaycastHit hit; bool floor = Physics.Raycast(transform.position + Vector3.up * .01f, -Vector3.up, out hit, .2f, ~this.gameObject.layer); if (floor && hit.collider != collider) { if (hit.collider is TerrainCollider) { //DO MAP Terrain t = hit.collider.GetComponent <Terrain>(); return(t.GetTextureAt(hit.point)); } else { MeshRenderer r = hit.collider.GetComponent <MeshRenderer>(); if (hit.collider is MeshCollider) { return(r.GetMaterialAt(hit.triangleIndex, true)?.mainTexture); } else { return(r.material.mainTexture); } } } return(null); }
public void Draw(double deltaTime, Camera camera) { if (MeshRenderer == null) { return; } var drawMeshDic = new Dictionary <Material, List <SubMesh> >(); for (var i = 0; i < MeshRenderer.MaterialCount; i++) { var mat = MeshRenderer.GetMaterialAt(i); drawMeshDic.Add(mat, new List <SubMesh>()); } foreach (var sm in MeshRenderer.Mesh.subMeshes) { var mat = MeshRenderer.GetMaterial(sm.materialIndex); drawMeshDic[mat].Add(sm); } var sp = new ShaderUniqueParameter() { camera = camera, cameraDir = camera.WorldDirection, cameraPos = camera.Transform.WorldPosition, deltaTime = deltaTime, dirLight = DirLight, environmentMap = camera.EnvironmentMap, proj = Projection, resolution = new Vector2(MMW.Width, MMW.Height), projInverse = Projection.Inverted(), view = View, viewInverse = View.Inverted(), viewProj = View * Projection, viewProjInverse = (View * Projection).Inverted(), world = Model, worldInv = Model.Inverted(), skinning = false, morphing = false, }; sh.UseShader(); sh.SetUniqueParameter(sp, true); foreach (var mat in drawMeshDic) { mat.Key.ApplyShaderParam(); foreach (var sub in mat.Value) { sh.SetUniqueParameter(sp, false); Drawer.DrawSubMesh(sub); } } sh.UnuseShader(); }