0

DirectX チュートリアルで SharpDX を学習しようとしています。私が作業しているC++プロジェクトには、次のコード行があります。

std::ifstream fin("Models/skull.txt");

if(!fin)
{
    MessageBox(0, L"Models/skull.txt not found.", 0, 0);
    return;
}

UINT vcount = 0;
UINT tcount = 0;
std::string ignore;

fin >> ignore >> vcount;
fin >> ignore >> tcount;
fin >> ignore >> ignore >> ignore >> ignore;

float nx, ny, nz;
XMFLOAT4 black(0.0f, 0.0f, 0.0f, 1.0f);

std::vector<Vertex> vertices(vcount);
for(UINT i = 0; i < vcount; ++i)
{
    fin >> vertices[i].Pos.x >> vertices[i].Pos.y >> vertices[i].Pos.z;

    vertices[i].Color = black;

    // Normal not used in this demo.
    fin >> nx >> ny >> nz;
}

fin >> ignore;
fin >> ignore;
fin >> ignore;

mSkullIndexCount = 3*tcount;
std::vector<UINT> indices(mSkullIndexCount);
for(UINT i = 0; i < tcount; ++i)
{
    fin >> indices[i*3+0] >> indices[i*3+1] >> indices[i*3+2];
}

fin.close();

そして、これをC#に変換する方法を知りたいです。使用する必要があることは 99% 確信してSystem.IO.FileStreamいますが、すべての C++ がどのように機能するかはわかりません。本当に私を台無しにしているのは、fin >> ignore >> vcount;誰かがC#で同じことをする方法を私に説明できれば、おそらくそこから理解できるということです。

要求に応じて、テキスト ファイルは次のようになります。

VertexCount: 31076
TriangleCount: 60339
VertexList (pos, normal)
{
0.592978 1.92413 -2.62486 0.572276 0.816877 0.0721907
0.571224 1.94331 -2.66948 0.572276 0.816877 0.0721907
0.609047 1.90942 -2.58578 0.572276 0.816877 0.0721907
…
}
TriangleList
{
0 1 2
3 4 5
6 7 8
…
}
4

2 に答える 2

1

ignoreとして宣言されていstd::stringます。あなたが見ているコードの元の作成者はstd::istream::ignore関数を認識しておらず、単に破棄しているファイルの要素をローカル変数を使用して読み取っているようです (つまり、彼は気にしませんでした)。したがって、行は次のようになります。

fin >> ignore >> vcount;

文字列要素 (基本的には最初の空白まで) を読み込んで、それを無視しているローカル文字列にダンプし、vcount値 (彼は として格納しているunsigned int) を読み込んでいます。

これを C# に移植する場合は、同じこと (ファイルの一部を読み取り、単に破棄する) を行うことができ、かなり直接的な移植になります。

例として(テストされていません):

using (FileStream file = new FileStream("File.txt", FileMode.Open))
using (StreamReader reader = new StreamReader(file))
{
    // with your sample, this will read "VertexCount: 31076"
    string line = reader.ReadLine();
    string sVCount = line.Substring(line.IndexOf(": ") + 2);
    uint vcount = int.Parse(sVCount);
    // ... read of your code
}
于 2013-10-28T21:56:22.687 に答える