簡體   English   中英

將高度圖轉換為網格以在WP7的XNA中渲染

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM