[英]Converting a heightmap to mesh for rendering in XNA for WP7
如我所知,大多數人都知道WP7不支持自定義着色器文件,除非我丟失了某些東西,否則我無法像Windows那樣僅從頂點和索引數據中繪制任何內容,因此我需要使用從其他數據類型加載或解析的模型。
我正在尋找的是一種用於獲取Model變量和heightmap位圖(大概作為Texture2D加載)並基於灰度值為每個像素創建一個頂點的方法,將垂直比例設置為一個函數構造函數變量。
供參考的是我在游戲中繪制模型的函數:
protected void DrawMesh(Model myMesh, Vector3 meshPos, float meshRot)
{
// Copy any parent transforms
Matrix[] transforms = new Matrix[myMesh.Bones.Count];
myMesh.CopyAbsoluteBoneTransformsTo(transforms);
// Draw the model. A model can have multiple meshes, so loop.
foreach (ModelMesh mesh in myMesh.Meshes)
{
// This is where the mesh orientation is set, as well
// as our camera and projection.
foreach (BasicEffect effect in mesh.Effects)
{
effect.EnableDefaultLighting();
effect.View = camera.View;
effect.World = transforms[mesh.ParentBone.Index] * Matrix.CreateRotationY(MathHelper.ToRadians(meshRot)) * Matrix.CreateTranslation(meshPos);
effect.Projection = camera.Projection;
}
// Draw the mesh, using the effects set above.
mesh.Draw();
}
}
有誰知道我可以很簡單地做到這一點? 在理解該過程之前,我不希望過多地使多個文件復雜化。
謝謝!
-瑞安
首先,缺少自定義着色器並不意味着您無法使用原始頂點/索引進行繪制。 實際上您可以在WP7上使用。 這意味着您無法控制原始像素輸出(像素着色器),也無法編寫將每個頂點的投影映射更改到屏幕的代碼(頂點着色器)。 在整個流水線的各個階段也有其他種類的着色器,但是它們與告訴圖形卡要使用的頂點和索引沒有任何關系。 您可以自己在游戲代碼中進行操作。 實際上,它們(或者更確切地說是從鏈中獲取的數據)被用作着色器的輸入 (除其他外)。
也就是說,您仍然可以自己在游戲代碼中生成頂點。 甚至可以在一定程度上操縱它們。 即使在WP7上,也不需要任何着色器即可生成頂點和索引並以原始方式繪制它們。 請勿為此使用Model
; 那太過分了。
您可以在紋理上使用GetData
來獲取其顏色值,並根據每個像素的顏色值簡單地生成一個頂點數組( VertexPositionColor
或texture或您希望的任何其他格式)。 有一個教程鋪設,你需要做的一切在這里 。 除了效果參數外,幾乎所有的東西都可以在WP7上按原樣工作。 將它們映射到BasicEffect
等。 沒有自定義着色器。
腳本后:您應該了解3D圖形的基礎知識,以了解着色器的用途,頂點的含義以及整個流程,以便更好地理解。 那里有很多不錯的文章,博客和書籍。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.