-1

自分で構築したパーサーを使用して解析する OBJ Wavefront モデルをレンダリングすると、レンダリング時に次の結果が得られます。

ここに画像の説明を入力

存在するギャップは正常ですか、それともレンダリング コードの欠陥によるものですか?

レンダリング コードは次のとおりです。

glPushMatrix();
glColor3f(1.0f, 1.0f, 1.0f);
glScaled(scale, scale, scale);

glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);

for (int i = 0; i < vertices_indexes.size()-3; i+=3) {
    glBegin(GL_TRIANGLE_FAN);
        if (is_normals) glNormal3f(normals.at(normals_indexes[i]).x, normals.at(normals_indexes[i]).y, normals.at(normals_indexes[i]).z);
        glVertex3f(vertices.at(vertices_indexes[i]).x, vertices.at(vertices_indexes[i]).y, vertices.at(vertices_indexes[i]).z);

        if (is_normals) glNormal3f(normals.at(normals_indexes[i+1]).x, normals.at(normals_indexes[i+1]).y, normals.at(normals_indexes[i+1]).z);
        glVertex3f(vertices.at(vertices_indexes[i + 1]).x, vertices.at(vertices_indexes[i + 1]).y, vertices.at(vertices_indexes[i + 1]).z);

        if (is_normals) glNormal3f(normals.at(normals_indexes[i+2]).x, normals.at(normals_indexes[i+2]).y, normals.at(normals_indexes[i+2]).z);
        glVertex3f(vertices.at(vertices_indexes[i + 2]).x, vertices.at(vertices_indexes[i + 2]).y, vertices.at(vertices_indexes[i + 2]).z);
    glEnd();
}

glPopMatrix();
4

1 に答える 1

0

モデルが四角形ではなく三角形で作成されていることを確認しましたか? 見つかったほとんどのモデルはデフォルトで四角形でレンダリングされるため、3D プログラム (Blender や Maya など) にロードしてメッシュを三角形に変換するか (Blender では Ctrl+T)、パーサーを変更して四角形を処理することができます。 .

于 2013-10-11T02:44:12.020 に答える