Это почти / далеко отсечение.
Все, что вы рисуете, преобразуется, а затем растеризуется в пространстве проекции.Это пространство простирается от (-1, -1) в нижнем левом углу экрана до (1,1) в верхнем правом углу.Но это только координаты (X, Y).В координатах Z он идет от 0 до 1 (спереди назад).Все, что находится за пределами этого тома, обрезано.(Ссылки: 1 , 2 , 3 .)
При работе в 3D используемая матрица проекции сжимаетZ координаты вниз, так что ближняя плоскость приземляется в 0 в проекционном пространстве, а дальняя плоскость приземляется в 1.
При работе в 2D вы обычно используете Matrix.CreateOrthographic
, который имеет параметры ближней и дальней плоскости, которыесделать точно так же.Просто SpriteBatch
определяет свою собственную матрицу и оставляет ближнюю и дальнюю плоскости в 0 и 1.
Вершины спрайтов в SpriteBatch
на самом деле имеют Z-координату, хотяэто обычно не используется.Это указывается параметром layerDepth
.Таким образом, если вы установите глубину слоя больше 0,5, а затем увеличитесь на 2, координата Z будет вне допустимого диапазона от 0 до 1 и не будет отображаться.
(в документации сказано, чтоОт 0 до 1 является допустимым диапазоном, но не определяет, что происходит при применении матрицы преобразования.)
Решение довольно простое: не масштабируйте Z-координату.Используйте масштабную матрицу, например:
Matrix.CreateScale(2f, 2f, 1f)