国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

DX圖形流程(基于MESH靜態模型繪制----托管代碼)

2019-11-18 12:00:43
字體:
來源:轉載
供稿:網友

  MESH的得到一般使用Mesh.FromFile方法。當然它有很多個重載。
  
  一般使用 public static Mesh FromFile(string, MeshFlags, Device, out ExtendedMaterial); 方法。要注重的是,MESH的讀取要在初始D3D設備以后來作。在MESH的初始方法中都需要D3D設備為參數,以后的MESH繪制也使用此設備。
  
  對D3D設備的初始化中設置一般的顯示屬性,比如:深度測試,多重采樣,燈光渲染開關,等等。
  
  PResentParameters presentParams = new PresentParameters();
  
  presentParams.Windowed=true;
  
  presentParams.SwapEffect = SwapEffect.Discard;
  
  presentParams.EnableAutoDepthStencil=true;
  
  presentParams.AutoDepthStencilFormat=DepthFormat.D16;
  
  presentParams.MultiSample=MultiSampleType.NonMaskable;
  
  MyDev = new Device(0, DeviceType.Hardware, this,CreateFlags.HardwareVerteXProcessing, presentParams);
  
  MyDev.RenderState.MultiSampleAntiAlias=true;
  
  MyDev.RenderState.Lighting=true;
  
  MyDev.RenderState.CullMode=Cull.None;
  
  MyDev.RenderState.ZBufferEnable=true;
  
  MyDev.RenderState.ZBufferFunction=Compare.LessEqual;
  
  MyDev.RenderState.ZBufferWriteEnable=true;
  
  MyDev.RenderState.Ambient=MaterColor;
  
  
  PresentParameters presentParams = new PresentParameters();
  
  presentParams.Windowed=true;
  
  presentParams.SwapEffect = SwapEffect.Discard;
  
  presentParams.EnableAutoDepthStencil=true;
  
  presentParams.AutoDepthStencilFormat=DepthFormat.D16;
  
  presentParams.MultiSample=MultiSampleType.NonMaskable;
  
  MyDev = new Device(0, DeviceType.Hardware, this,CreateFlags.HardwareVertexProcessing, presentParams);
  
  MyDev.RenderState.MultiSampleAntiAlias=true;
  
  MyDev.RenderState.Lighting=true;
  
  MyDev.RenderState.CullMode=Cull.None;
  
  MyDev.RenderState.ZBufferEnable=true;
  
  MyDev.RenderState.ZBufferFunction=Compare.LessEqual;
  
  MyDev.RenderState.ZBufferWriteEnable=true;
  
  MyDev.RenderState.Ambient=MaterColor;
  
  
  對于燈光的設置,可以根據需要放在每偵渲染函數內調整,也可以把固定燈光放在繪制之前。
  
  
  一般繪制一個MESH時候,其中每個模型塊都采用相同的世界矩陣。在繪制MESH之前設置好WORLDMATRIX即可。有時一個場景內MESH太多,而有些MESH共同組成一個物體時,對于每個MESH調整WORLDMATRIX可能會非常麻煩。所以最好是按照對應相對坐標調整好這些MESH的坐標,之后對這一組MESH采用同樣的WORLDMATRIX。在修改MESH頂點數據之前,先使用Mesh.Clone復制出一個自己控制頂點數據格式的MESH。
  
  public Mesh Clone(MeshFlags, VertexFormats, Device);
  
  根據你需要的 VertexFormats格式,便可以輕易的遍歷修改頂點數據。當然,在修改前不要忘記LOCK你要修改的數據流。
  
  
  對于MESH里包含的材質和紋理,需要你手動來調整。在MESH的FROMFILE中,已經OUT出了一個包含紋理的材質組ExtendedMaterial。
  
  我們要聲明一個材質組,一個紋理組。
  
  Texture[] meshTextures = new Texture[materials.Length];
  
  Material[] meshMaterials = new Direct3D.Material[materials.Length];
  
  之后分離材質和紋理。
  
  for( int i=0; i  
  {
  
  meshMaterials[i] = materials[i].Material3D;
  
  // Set the ambient color for the material. Direct3D
  
  // does not do this by default.
  
  meshMaterials[i].Ambient = meshMaterials[i].Diffuse;
  
  // Create the texture.
  
  meshTextures[i] = TextureLoader.FromFile(dev,materials[i].TextureFilename);
  
  }
  
  
  
  現在我們可以繪制MESH了。
  
  for( int i=0; i  
  {
  
  // Set the material and texture for this subset.
  
  device.Material = meshMaterials[i];
  
  device.SetTexture(0, meshTextures[i]);
  
  
  // Draw the mesh subset.
  
  mesh.DrawSubset(i);
  
  }
  
  最后別忘記device.EndScene();device.Present();
  
  
  在上邊D3D設備初始的時候,我們啟動了趁度測試,所以,在繪制每偵前,調用CLEAR函數時,一并要清理深度緩沖,否則繪制會一踏糊涂。
  
  DX圖形流程(基于MESH靜態模型繪制----托管代碼)
  
  以上是基本MESH靜態模型繪制。對于其他高級效果的繪制,以后再寫。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 响水县| 辽宁省| 潼关县| 祥云县| 龙川县| 开封县| 九江县| 诏安县| 罗田县| 瑞昌市| 台东市| 东乡族自治县| 蓬溪县| 含山县| 遂昌县| 大同县| 儋州市| 竹北市| 夏河县| 瑞安市| 清原| 随州市| 清徐县| 太湖县| 周口市| 商洛市| 湟源县| 宁津县| 山阳县| 定南县| 环江| 巴东县| 金坛市| 天津市| 泽州县| 安义县| 泸溪县| 吉安市| 来安县| 霍邱县| 龙川县|