x, y 및 z 값을 더한 다음 결과를 정규화하여 평균화하려고하는 4 개의 법선이 있습니다. 그러나 다른 축 값을 추가하면 결과 벡터의 길이는 0입니다. 나는이 문제가 매우 쉽게 해결되었다는 느낌을 갖지만, 나는 OpenGL에 비교적 익숙하지 않으며, 벡터가 아직 안팎으로 들어오는 것을 모르고있다.평균 법선 평균 길이가 0 인 벡터 결과
얼굴 및 정점 법선을 각각 얻는 코드입니다.
public Vector3f getNormal(Vector3f p1, Vector3f p2, Vector3f p3){
Vector3f v = new Vector3f();
Vector3f calU = new Vector3f(p2.x - p1.x, p2.y - p1.y, p2.z - p1.z);
Vector3f calV = new Vector3f(p3.x - p1.x, p3.y - p1.y, p3.z - p1.z);
v.setX(calU.getY() * calV.getZ() - calU.getZ() * calV.getY());
v.setY(calU.getZ() * calV.getX() - calU.getX() * calV.getZ());
v.setZ(calU.getX() * calV.getY() - calU.getY() * calV.getX());
return (Vector3f)v.normalise();
}
public Vector3f getVectorNormal(Vector3f p){
Vector3f t1 = getNormal(p, new Vector3f(p.getX() - 1, p.getY(), p.getZ()), new Vector3f(p.getX(), p.getY(), p.getZ() - 1));
Vector3f t2 = getNormal(p, new Vector3f(p.getX() + 1, p.getY(), p.getZ()), new Vector3f(p.getX(), p.getY(), p.getZ() - 1));
Vector3f t3 = getNormal(p, new Vector3f(p.getX() + 1, p.getY(), p.getZ()), new Vector3f(p.getX(), p.getY(), p.getZ() + 1));
Vector3f t4 = getNormal(p, new Vector3f(p.getX() - 1, p.getY(), p.getZ()), new Vector3f(p.getX(), p.getY(), p.getZ() + 1));
float x = t1.getX() + t2.getX() + t3.getX() + t4.getX();
float y = t1.getY() + t2.getY() + t3.getY() + t4.getY();
float z = t1.getZ() + t2.getZ() + t3.getZ() + t4.getZ();
Vector3f v = new Vector3f(x, y, z);
return (Vector3f)v.normalise();
}
코드가 있습니까? – Zyerah
Telthien이 말한 바. 또한 그 법선은 어떤 형태의 기하 구조입니까? – datenwolf
@datenwolf 그들은 삼각형에서 왔습니다. – caseif