obj файл содержит координаты вершин, вот например одна из них:
v -1.174286 32.706123 6.473185 как это представить в вид от -1 до 1 как это требует opengl? Есть ли функция перевода? (Для работы с геометрическими преобразованием использую библиотеку joml)
у меня obj не содержит нормалей, как задать вектор направление? Что в этом случае нужно делать?
В OpenGL используется иерархия преобразований для вывода на экран. Для этого используются матрицы трансформации модели (например перемещение, вращение, масштабирование и т.п.), вида (преобразование из мировых коорлинат в координаты которые видит камера), проекции (преобразование из координат камеры в -1..1 координаты, например ортографическая или перспективная).
Т.о. вы можете задать ортографическую проекцию произвольного размера (например -100..412), в которой иметь модель так же произвольного размера (например 10..120) и получить ее на экране.
С точки зрения работы с готовым движком - вы просто задаете свойства виртуальной "камеры" (положение, ориентацию, зум) и размещаете объект в сцене (положение, ориентацию, размер). Ни про какие -1..1 вам знать не надо.
Нормали достаточно просто рассчитываются по полигонам/треугольникам. Нормаль - это перпендикуляр к поверхности. Посчитав кросс-продукт между двумя векторами в треугольнике мы получим его нормаль. (направление которой зависит от направления векторов).
function VectorCrossProduct(const A, B: TKMVertex3): TKMVertex3;
begin
Result.X := A.Y * B.Z - A.Z * B.Y;
Result.Y := A.Z * B.X - A.X * B.Z;
Result.Z := A.X * B.Y - A.Y * B.X;
end;
Далее вам нужны будут нормали всех вершин. Их можно получить, например, взяв среднее между всеми нормалями полигонов которые используют данную вершину.
Сборка персонального компьютера от Artline: умный выбор для современных пользователей