Monogame: рендеринг только внутри указанной области - PullRequest
0 голосов
/ 27 декабря 2018

Это может быть странный вопрос, но я пытаюсь найти способ визуализации спрайтов только внутри определенной разрешенной области, а не всего буфера / текстуры.

Примерно так: enter image description here

По сути, я могу рисовать в буфер или texture2D, как обычно, но фактическое рисование происходит только внутри этой указанной области, а оставшиеся пиксели вне нее остаются нетронутыми.

Зачем это нужно - я создаю свою собственную систему пользовательского интерфейса, и я бы хотел избежать использования промежуточных буферов, поскольку они довольно медленные, когда на экране много компонентов пользовательского интерфейса (и каждый из них должен использовать свой собственный буфер для предотвращения дочерних элементов).рисуется за пределами родительских границ).

И просто для уточнения - это все для простого 2D-рендеринга, а не 3D.

Ответы [ 2 ]

0 голосов
/ 27 марта 2019

Вы можете использовать:

spriteBatch.Draw(yourTexture,
    //where and the size of what you want to draw on screen
    //for example, new Rectangle(100, 100, 50, 50)//position and width, height
    destinationRectangle,
    //the area you want to draw from the original texture
    //for example, new Rectangle(0, 0, 50, 50)//position and width, height
    sourceRectangle,
    Color.White);

Тогда он будет рисовать только ту область, которую вы выбрали ранее.Надеюсь, это поможет!

0 голосов
/ 28 января 2019

Если ваш пользовательский интерфейс фактически нарисован с помощью SpriteBatch, вы можете использовать ScissorRectangle

GraphicsDevice.RasterizerState.ScissorTestEnable = true;
spriteBatch.GraphicsDevice.ScissorRectangle = ...

В 3D вы можете визуализировать текстуру и нарисовать только ее часть - или с помощью шейдера (на самом деле вы можете простоотправьте измерения в качестве параметра и установите его черным в PixelShader, если пиксель находится за пределами этого прямоугольника (или чего вы хотите достичь)

...