Освещенные лица всегда отображаются впереди JavaFXJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Освещенные лица всегда отображаются впереди JavaFX

Сообщение Anonymous »

Я создаю простое приложение для 3D-просмотра/редактора, и средство рендеринга по какой-то причине всегда отображает освещенные стороны сверху и неосвещенные сзади. вот полный проект
https://drive.google.com/drive/folders/ ... sp=sharing
сама ошибка< /p>
видео ошибки
как видите, лица здесь неправильные, нормали не перевернуты, я проверял, не уверен, что ошибка в методе рендеринга, поэтому при необходимости я отправил весь проект. мне нужно, чтобы он отображался правильно.
опять же, я не уверен, где именно возникает ошибка, поэтому прошу помощи
private static void renderLighting(GraphicsContext graphicsContext, List resultPoints, List worldVertices, Model mesh) {
// Improved diffuse lighting with soft shadow calculation
Vector3f lightPosition = new Vector3f(10, 10, 10); // Example light position
Color lightColor = Color.WHITE;
Color objectColor = Color.LIGHTGRAY;

Vector3f polygonNormal = calculatePolygonNormal(worldVertices);

Vector3f lightDirection = new Vector3f(
lightPosition.x - worldVertices.get(0).x,
lightPosition.y - worldVertices.get(0).y,
lightPosition.z - worldVertices.get(0).z
);
lightDirection.normalize();

float diffuseIntensity = Math.max(0, polygonNormal.dotProduct(lightDirection));

// Adding soft shadow effect
float shadowFactor = calculateSoftShadowFactor(worldVertices, lightPosition);
diffuseIntensity *= shadowFactor;

double red = objectColor.getRed() * (lightColor.getRed() * diffuseIntensity);
double green = objectColor.getGreen() * (lightColor.getGreen() * diffuseIntensity);
double blue = objectColor.getBlue() * (lightColor.getBlue() * diffuseIntensity);

graphicsContext.setFill(Color.color(clamp(red), clamp(green), clamp(blue)));

double[] xPoints = resultPoints.stream().mapToDouble(p -> p.x).toArray();
double[] yPoints = resultPoints.stream().mapToDouble(p -> p.y).toArray();

graphicsContext.fillPolygon(xPoints, yPoints, resultPoints.size());
}


Подробнее здесь: https://stackoverflow.com/questions/793 ... ont-javafx
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»