Donc j'essaie de générer du terrain en utilisant l'algorithme des cubes de marching. À ce stade, j'implémente l'éclairage diffus (fragment shader). J'ai calculé pour chaque sommet Normales et obtenu ceci: resultcubes de marche, très petits triangles
Le côté gauche de l'image affiche les Normales (pour chaque sommet et triangle) et wireframe, à droite est le paysage éclairé par le même angle de la caméra. Donc, je suis curieux, qu'est-ce que je fais mal?
Je Calculons Normales cette façon:
for (int t = 0; t < all_triangles.size(); t++) {
Vertex v0 = all_vertices[triangle.get_vertex(0)];
Vertex v1 = all_vertices[triangle.get_vertex(1)];
Vertex v2 = all_vertices[triangle.get_vertex(2)];
QVector3D edge1 = v1 - v0;
QVector3D edge2 = v2 - v0;
QVector3D normal = QVector3D::crossProduct(edge1, edge2);
// triangle.set_normal(normal.normalized());
for (int v = 0; v < 3; v++) {
all_vertices[triangle.get_vertex(v)].add_normal(normal.normalized());
}
}
for (int v = 0; v < all_vertices.size(); v++) {
auto normal = all_vertices[v].get_normal();
normal.normalize();
all_vertices[v].set_normal(normal);
}
màj: VCS
Est-ce intentionnellement que «t» n'est pas utilisé dans la boucle? – 4386427
@ 4386427 ouais, j'utilise la macro, désolé je ne l'ai pas posté '#define triangle all_triangles [t]' – viache
Quel est l'effet de 'get_normal()' et 'add_normal (...)'? Pouvez-vous fournir le code de ces méthodes. –