#3d #libgdx #rendering #render #rectangles
#3D #libgdx #рендеринг #визуализация #прямоугольники
Вопрос:
Я использую LibGDX, создаю прямоугольники в 3D-пространстве ModelBuilder#createRect
, помещаю их в 3D-среду и визуализирую их ModelBatch
. Все работает почти правильно. Проблема возникает, когда два прямоугольника находятся рядом друг с другом. Похоже, что у него есть диапазоны глубины, в которых некоторые из прямоугольников, которые на самом деле находятся позади, отображаются спереди.
Чтобы проиллюстрировать, что я имею в виду, вот несколько примеров:
Несмотря на то, что у нас есть 2 прямоугольника (втулка и фигура), оба с одинаковыми углами наклона по вертикали, когда экземпляры модели расположены близко друг к другу, части одного отображаются спереди, даже если прямоугольник плоский, и один должен полностью находиться перед другим, а не маленькой полосой втулкиперед рисунком.
Здесь у нас есть 2 пересекающихся прямоугольника (стена и фигура). Я ожидал бы увидеть чистый разрез между 2 прямоугольниками, но вместо этого я получаю лестницу. Это заставило бы меня поверить, что он сохраняет диапазоны областей, в которых один прямоугольник всегда находится перед другим в этом диапазоне, даже если в этом диапазоне может быть пересечение, или он пропускает части прямоугольника, думая, что его не нужно отображать.
Я считаю, что эти два примера вытекают из одной и той же проблемы.
Когда я визуализирую прямоугольник, вот код для материала.
material.set(BlendingAttribute(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA),
FloatAttribute(AlphaTest, 0.5f))
Добавление a FloatAttribute
с произвольным значением с плавающей точкой, похоже, устраняет проблему, но не полностью. (Приведенные выше примеры с атрибутом float .)
Я использую Environment
, ModelBatch
, и т. Д. com.badlogic.gdx.graphics.g3d
Для рендеринга прямоугольников.
Как я могу использовать LibGDX для правильного отображения прямоугольников в 3D?
Комментарии:
1. Возможно, дальняя плоскость вашей камеры слишком большая, поэтому шаги глубины очень большие. Попробуйте уменьшить его в 1000 раз.
2. @Tenfour04 Мне даже не приходило в голову подумать об изменении моего расстройства. Моя дальняя плоскость была подходящей, но оказалось, что моя ближняя плоскость была слишком маленькой. Изменение его на разумное расстояние от точки обзора устранило проблему!
Ответ №1:
Спасибо @Tenfour04 в комментариях за то, что подумали о том, что плоскости камеры являются проблемой. У меня была точка обзора с точкой обзора в начале координат, близкая к 0,1F, дальняя от 4000 F. Изменение значения near на 50F устранило проблемы, и шаги глубины стали более разумными.
Вот как это выглядит с близостью к 50F вместо 0,1F: