как пользоваться этим кодом Для создания программы на Java, которая удаляет вершины из 3D модели в формате OBJ, вам потребуется реализовать несколько ключевых компонентов:

Чтение OBJ файла: Загрузка модели и извлечение вершин, текстурных координат и полигонов.
Удаление вершин: Удаление выбранных пользователем вершин и всех полигонов, которые с ними связаны.
Запись измененной модели: Сохранение измененной модели обратно в файл в формате OBJ.
Ниже приведен пример кода, который демонстрирует, как это можно реализовать:

import java.io.*;
import java.util.*;

class Vector3f {
    float x, y, z;

    Vector3f(float x, float y, float z) {
        this.x = x;
        this.y = y;
        this.z = z;
    }
}

class Polygon {
    List<Integer> vertexIndices;

    Polygon(List<Integer> vertexIndices) {
        this.vertexIndices = vertexIndices;
    }
}

class Model {
    List<Vector3f> vertices = new ArrayList<>();
    List<Polygon> polygons = new ArrayList<>();

    void loadFromObjFile(String filename) throws IOException {
        BufferedReader reader = new BufferedReader(new FileReader(filename));
        String line;

        while ((line = reader.readLine()) != null) {
            String[] parts = line.split("\\s+");
            switch (parts[0]) {
                case "v":
                    vertices.add(new Vector3f(Float.parseFloat(parts[1]), Float.parseFloat(parts[2]), Float.parseFloat(parts[3])));
                    break;
                case "f":
                    List<Integer> vertexIndices = new ArrayList<>();
                    for (int i = 1; i < parts.length; i++) {
                        vertexIndices.add(Integer.parseInt(parts[i]) - 1); // OBJ indices start from 1
                    }
                    polygons.add(new Polygon(vertexIndices));
                    break;
            }
        }
        reader.close();
    }

    void removeVertices(Set<Integer> indicesToRemove) {
        // Удаляем полигоны, содержащие удаляемые вершины
        polygons.removeIf(polygon -> polygon.vertexIndices.stream().anyMatch(indicesToRemove::contains));

        // Удаляем вершины
        vertices.removeIf(vertex -> indicesToRemove.contains(vertices.indexOf(vertex)));
    }

    void saveToObjFile(String filename) throws IOException {
        BufferedWriter writer = new BufferedWriter(new FileWriter(filename));

        for (Vector3f vertex : vertices) {
            writer.write(String.format("v %.6f %.6f %.6f%n", vertex.x, vertex.y, vertex.z));
        }

        for (Polygon polygon : polygons) {
            String indices = polygon.vertexIndices.stream()
                    .map(index -> String.valueOf(index + 1)) // Возвращаем к 1-индексации
                    .reduce((a, b) -> a + " " + b).orElse("");
            writer.write("f " + indices + "\n");
        }

        writer.close();
    }
}

public class ObjEditor {
    public static void main(String[] args) {
        try {
            Model model = new Model();
            model.loadFromObjFile("input.obj");

            // Пример: удаляем вершины с индексами 0 и 2
            Set<Integer> indicesToRemove = new HashSet<>(Arrays.asList(0, 2));
            model.removeVertices(indicesToRemove);

            model.saveToObjFile("output.obj");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
Пояснение кода:
Классы Vector3f и Polygon: Эти классы представляют вершины и полигоны соответственно.
Метод loadFromObjFile: Читает OBJ файл и заполняет списки вершин и полигонов.
Метод removeVertices: Удаляет указанные вершины и связанные с ними полигоны.
Метод saveToObjFile: Сохраняет измененную модель обратно в файл в формате OBJ.
Класс ObjEditor: Главный класс, который выполняет загрузку модели, удаление вершин и сохранение результата.
Использование:
Сначала загрузите модель из файла input.obj.
Укажите индексы вершин, которые хотите удалить.
Запустите программу, чтобы получить измененную модель в output.obj.
Этот код является базовым примером и может быть расширен для обработки ошибок и более сложных случаев, таких как работа с текстурными координатами и нормалями.