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

首頁 > 開發 > 綜合 > 正文

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

2024-07-21 02:16:06
字體:
來源:轉載
供稿:網友
,歡迎訪問網頁設計愛好者web開發。
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<materials.length; 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<meshmaterials.length; 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函數時,一并要清理深度緩沖,否則繪制會一踏糊涂。





以上是基本mesh靜態模型繪制。對于其他高級效果的繪制,以后再寫。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 忻州市| 嵩明县| 宝清县| 南丰县| 马公市| 重庆市| 翁源县| 陈巴尔虎旗| 天门市| 龙门县| 陆良县| 修文县| 城市| 巴青县| 枣强县| 铜鼓县| 高陵县| 手游| 科技| 蒲城县| 巨鹿县| 梁河县| 广平县| 陇川县| 佛坪县| 威宁| 南皮县| 陇川县| 庆云县| 林西县| 莱州市| 南投县| 桂东县| 古蔺县| 阿瓦提县| 宁陕县| 固始县| 格尔木市| 龙胜| 南平市| 海南省|