XNA 4.0 в окне с зазубренными краями ... Знаешь метод для высококачественного вывода? - PullRequest
0 голосов
/ 15 сентября 2011

Я использую элемент управления формой XNA 4.0 этого примера в приложении, которое я пишу: http://creators.xna.com/en-US/sample/winforms_series1

Он отлично работает, и я немало поработал с визуальными эффектами и анимацией.Основная проблема, над которой я почесываю голову, - это 3d-модель и примитивные трехмерные фигуры (цилиндры с тесселяцией 30), которые я рендеринг имею с очень зазубренными краями, как будто они имеют низкое разрешение.выяснить, как включить мультисэмплинг, но все примеры, которые я могу найти в Интернете, похоже, не относятся к этому новому способу использования XNA в пользовательском элементе управления формы.

Внутри конструктора GraphicsDeviceService () естьОбъект PresentationParameters создан, но единственное доступное свойство - параметры. MultiSampleCount типа integer.Я попытался установить это без эффекта.

Я также попытался сделать резервный буфер в два раза больше размера элемента управления (GraphicsDeviceService.cs):

    GraphicsDeviceService(IntPtr windowHandle, int width, int height)
    {
        parameters.BackBufferWidth = width * 2;
        parameters.BackBufferHeight = height * 2;
        ...
    }

Затем я изменил эту функцию (GraphicsDeviceControl.cs):


    void EndDraw()
    {
        Rectangle sourceRectangle = new Rectangle(0, 0, ClientSize.Width * 2, ClientSize.Height * 2);
        Rectangle destinationRectangle = new Rectangle(0, 0, ClientSize.Width, ClientSize.Height);
        GraphicsDevice.Present(sourceRectangle, destinationRectangle, this.Handle);
    }

Но это не сработало должным образом.Мои объекты, отображаемые на экране, были перенесены на 1/4 окна и обрезаны.Хотя это выглядело немного менее неровно ...

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

Спасибо

Ответы [ 3 ]

5 голосов
/ 15 сентября 2011

Я скачал этот пример кода, чтобы увидеть, где настраиваются PresentationParameters.Это то, что вам нужно изменить.

Он находится в классе GraphicsDeviceService.

В конструкторе этого класса он настраивает объект под названием «параметры», объект PresentationParamters.Добавьте эту строку после нового и перед передачей параметров в graphicsDevice:

parameters.MultiSampleCount = 10;

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

2 голосов
/ 16 сентября 2011

Существует несколько свойств GraphicsDeviceManager, которые вы можете установить, убедитесь, что они все выполнены.

0 голосов
/ 27 сентября 2012

У меня была эта ТОЧНАЯ проблема. Если вы используете объект XNA graphicsdevicecontrol в форме окна, простая установка количества мультисэмплов не будет работать. Вы должны изменить GraphicsDeviceService.cs в части инициализации.

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

GraphicsDeviceService (IntPtr windowHandle, int width, int height)

{ параметры = новые PresentationParameters ();

        parameters.BackBufferWidth = Math.Max(width, 1);
        parameters.BackBufferHeight = Math.Max(height, 1);
        parameters.BackBufferFormat = SurfaceFormat.Color;
        parameters.DepthStencilFormat = DepthFormat.Depth24;
        parameters.DeviceWindowHandle = windowHandle;
        parameters.PresentationInterval = PresentInterval.Immediate;
        parameters.IsFullScreen = false;
        parameters.MultiSampleCount = 10; //  <--- RIGHT HERE

        graphicsDevice = new GraphicsDevice(GraphicsAdapter.DefaultAdapter,
                                            GraphicsProfile.Reach,
                                            parameters);
    }

В другом месте, и графическое устройство будет игнорировать ваши изменения

...