Я бы протянул линии плитки, пока они не коснутся края, где задняя стена встречает пол. Используя эту технику, вы можете перенести длину от плоскости стены на равную длину в плоскости пола. Таким образом, в этот момент все, что вам нужно сделать, это длина совпадения вдоль одной строки, а именно длины между досками и длины между переданными точками. Но вы должны сделать это в соответствии с последовательностью. Наиболее универсальным инструментом для проективных измерений является поперечное отношение. Приложение, очень похожее на то, что у вас здесь, описано в How to calculate true lengths from perspective projection на Math SE. Если ваша точка исчезновения на этой линии, где стены встречаются, действительно находится на бесконечности (что, по-видимому, примерно соответствует вашему настройке), вы можете пройти с помощью более простых вычислений, но если вы не можете гарантировать, что это всегда будет так, Я не стал бы полагаться на это.
Вышеуказанное поможет вам отрегулировать масштаб в один руководство только. Однако направление, перпендикулярное этому, все еще открыто. В вашем случае, который будет направлением глубины, направление от камеры. У вас есть какие-то ориентиры для этого направления? Мне кажется, что вы можете использовать одну полную плиту на левой стене, прежде чем начнется окно. Но в зависимости от того, как угол между двумя стенами выложен плиткой, это может быть слегка отключено.
Чтобы проиллюстрировать эти идеи, посмотрите на картинке выше. Поскольку красные линии выглядят почти горизонтальными, видя эффекты перспективы, довольно сложно. Поэтому я сделаю другое направление. Предположим, что плитка в углу действительно того же видимого размера, что и все остальные плитки на стене. Таким образом, вы знаете расстояние реального мира между A1 и B1. Вы проецируете вдоль синих вертикальных линий (вертикально в реальном мире, не обязательно изображение) до A2 и B2, где левая плоскость стены соответствует плоскости пола.
Почему они там встречаются? Ну, линии A1, A2 - это то, где слева все встречается с задней стенкой. Линия A2, A3 - это то, где задняя стенка соответствует полу. Оба этих плоских пересечения фактически видны, по крайней мере частично, что делает возможным рисование линий. Таким образом, на A2 все три плоскости встречаются и соединяют это с дальней точкой F, дает третий край, где левая стена встречает пол.
Поскольку сегменты A1, B1 и A2, B2 являются только вертикально транспортируемыми версиями друг друга в реальном мире, они имеют равную длину. Эта транспортировка была вдоль левой стены в вертикальном направлении. Теперь переместите их снова, на этот раз в плоскости пола и в левом-правом направлении. Вы делаете это, используя красные линии, которые либо параллельны, либо встречаются в точке (что довольно далеко в этом примере). Эти красные линии A2, A3 и B2, B3 параллельны в реальном мире, и их расстояние по-прежнему является краевой длиной этой плитки.
Теперь начните измерять что-либо, например. расстояние между C и D. Для этого вычислите поперечное отношение (F, A3; B3, C), которое выражает расстояние от A3 до C, выраженное в кратных расстоянию от A3 до B3, и используя F как точку в бесконечность. Сделайте то же самое для D, и тогда разница будет длиной от C до D, выраженной в кратных расстоянию от A3 до B3. Таким образом, расстояние между C и D составляет 4,44 длины кромок плитки в этом примере. Увеличьте изображение, чтобы оно соответствовало этому рисунку.
Эта формула будет работать только для длины объекта, параллельной датчику камеры. Я бы использовал гомографию, которую вы, вероятно, уже использовали для текстурирования. Инвертируйте гомографию, чтобы получить отображение из пространства экрана в пространство текстуры. Затем вы можете сопоставить любой отрезок линии на полу в изображении с соответствующим представлением в координатах текстуры. Сравнивая полученную длину сегмента линии с целевой длиной, вы можете получить масштабирование вашей текстуры. –