Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Как программно отразить спрайт в DirectХ?

7.0K
31 марта 2008 года
pink master
79 / / 21.10.2006
Я пишу 2д файтинг, и такое тупое дублирование кода получается, самому противно. Пробовал sprite.Transform = sprite.Transform.Reflect(...);, но что то ничего не происходет. Буду очень благодарен, если дадите пример отражения спрайта в directХ.
P.S. Отразить - всмысле как в зеркале, или то что в фотошопе зовется canvas->flip horizontal
34K
06 апреля 2008 года
Carbon
17 / / 21.03.2008
Юзай шейдеры и будет тебе счастье.
255
07 апреля 2008 года
Dart Bobr
1.4K / / 09.04.2004
Цитата: Carbon
Юзай шейдеры и будет тебе счастье.



Оставьте и мне покурить!!

7.0K
07 апреля 2008 года
pink master
79 / / 21.10.2006
то есть можно сделать нечто подобное?
Texture reflect(Texture)
 
Код:
{
    return myReflectShader(Texture);
}


А не подскажите тогда, где такой шейдер можно достать?
И неужели нет стандартной функции в DirectX, чтоб спрайт отразить?
7.0K
07 апреля 2008 года
pink master
79 / / 21.10.2006
или ты просто прикололся про шейдеры?
34K
07 апреля 2008 года
Carbon
17 / / 21.03.2008
Цитата: pink master
то есть можно сделать нечто подобное?
Texture reflect(Texture)
 
Код:
{
    return myReflectShader(Texture);
}


А не подскажите тогда, где такой шейдер можно достать?
И неужели нет стандартной функции в DirectX, чтоб спрайт отразить?



Про шейдеры читать тут: http://www.gamedev.ru/terms/Shader.

ЗЫ Я лично никогда не юзал освещение, текстуры и др., что предлагается в DX с готовым решением, поскольку это готовое решение не отражает моих потребностей в эффектах. Проще написать шейдер, в котором всё это предусмотрено и можно делать всё, что подсказывает моё больное воображение.:D

Цитата:

Как программно отразить спрайт в DirectХ?



ЗЫЫ Лучше не программно, а аппаратно. Так быстрее.;)

255
08 апреля 2008 года
Dart Bobr
1.4K / / 09.04.2004
Что такое шейдеры всем известно, только вот просвети нас, какие ж именно шейдеры ты хочешь для этой задачи использовать - вершинные или пиксельные? Когда определишься - прочитай сам еще раз внимательно что это такое и подумай можно ли это вообще хоть каким-либо боком прикрутить к данной задаче. Так же советую прочитать что такое спрайт.
К топиккастеру - а мы не ясновидящие, вы бв свой код показали, что-ли.
7.0K
08 апреля 2008 года
pink master
79 / / 21.10.2006
2Bobr:
абсолютно обычный код для спрайтов в C#:
вроде такого:
Код:
...
device.BeginScene();
device.Clear(ClearFlags.Target, Color.Black, 1.0f, 0);

sprite.Begin(SpriteFlags.AlphaBlend);

// my magic Y-axe reflect transform

sprite.Draw(texture, Vector3.Empty, new Vector3(0,
            spriteY, 0),
            Color.White.ToArgb());
sprite.End();

device.EndScene();
device.Present();
...

а нужно чтоб команда sprite.Draw(...) рисовала уже отраженный спрайт
(например если на картинке "-->" то отрзится "<--")

я пробовал что то типа:
 
Код:
...
sprite1.Transform = sprite.Transform.reflect(...)
...
но без результата=( если знаете, подскажите плиз)))
34K
08 апреля 2008 года
Carbon
17 / / 21.03.2008
Цитата: Dart Bobr
Что такое шейдеры всем известно, только вот просвети нас, какие ж именно шейдеры ты хочешь для этой задачи использовать - вершинные или пиксельные? Когда определишься - прочитай сам еще раз внимательно что это такое и подумай можно ли это вообще хоть каким-либо боком прикрутить к данной задаче. Так же советую прочитать что такое спрайт.
К топиккастеру - а мы не ясновидящие, вы бв свой код показали, что-ли.



А я знаю, что такое спрайт. Как раз шейдерами и лучше всего их отрисовывать и забыть про фиксированный конвейер. Я лично не долго думал, какими шейдерами пользоваться, т.к. текстура (её самплер кидается в соответствующий регистр) доступна именно для пиксельных шейдеров.
Речь идёт об изменениях координат текстуры (отражение). А это в пиксельных шейдерах достигается добавлением 1 арифметической операции.
А если нужно отражение от к-л предмета как от зеркала, то добавляем ещё 1 объект-отражение. Немного корректируем его координаты и накладываем на него ту же текстуру с изменёнными текстурными координатами.

255
09 апреля 2008 года
Dart Bobr
1.4K / / 09.04.2004
2Carbon
Вам сюда: http://ru.wikipedia.org/wiki/Шейдер
Особенно внимательно читайте определение, не упустите из виду фразу - "в трехмерной графике", прочитайте начало топика, вдумайтесь в слова "2д файтинг". Если это для вас - не убедительно - то советую в приведенной вами же ссылке - перейти к статье подробно описывающей шейдеры, а не ограничиться кратким описанием. Приведу оттуда цитату:
Цитата:

Пиксельные шейдеры выполняются для каждого фрагмента в фазе растеризации треугольников. Фрагмент (или пиксель) — точка, с оконными координатами, полученная растеризатором после выполнения над ней ряда операций. Проще говоря, результирующая точка буфере кадра, совокупность этих точек потом формирует изображение. Пиксельные шейдеры оперирует над фрагментами до заключительных стадий, т.е. до тестов глубины, альфы и stencil. Кстати, возможно в будущем и этими операциями будет управлять шейдер, кто знает… Пиксельный шейдер получает интерполированные данные (цвет, текстурные координаты) из вершинного шейдера.


Итак, для 2д задачи вы предлагаете - перейти от 2д к 3д,утверждая, что это более легкий способ решения задачи. А еще возникает вопрос, а вы знаете какой версией DirectX пользуется топиккастер? Потому-что, если мне не изменяет память до версии 8.0 DirectDraw был отдельной частью DirectX, и автор может пользоваться именно средствами DirectDraw, а не Direct3D.

Топик-кастеру лучше всего заглянуть сюда:
http://msdn2.microsoft.com/en-us/library/bb194906.aspx

1.9K
09 апреля 2008 года
andriano
474 / / 10.01.2008
Срайт переворачивается очень прсто: при указании текстурных координат слева указывается правая, а справа - левая.
Т.е. обычный спрайт:
(0,0) (1,0)
(0,1) (1,1)
перевернутый:
(1,0) (0,0)
(1,1) (0,1)
7.0K
21 апреля 2008 года
pink master
79 / / 21.10.2006
Спасибо, это хоть что-то.
Только там ни слова про отражение и ХNA использует свои классы спрайтов, отличные от обычных директ Икс спрайтов=(
7.0K
21 апреля 2008 года
pink master
79 / / 21.10.2006
2 andriano
Здорово. А как указать текстурные координаты спрайту?
1.9K
21 апреля 2008 года
andriano
474 / / 10.01.2008
А как ты вообще выводишь спрайт? Разве не как частично прозрачную текстуру?
341
25 апреля 2008 года
Der Meister
874 / / 21.12.2007
Цитата: Dart Bobr
...возникает вопрос: а вы знаете, какой версией DirectX пользуется топиккастер? Потому, что, если мне не изменяет память, до версии 8.0 DirectDraw был отдельной частью DirectX, и автор может пользоваться именно средствами DirectDraw, а не Direct3D.

Отнюдь. В восьмой версии DD как интерфейс уже непрочь прекратил своё существование, а в седьмой версии D3D являлся логической надстройкой над DD и работал в тесном с ним взаимодействии.
Автор, как насчёт Microsoft.DirectX.Direct3D.Sprite.Transform? Типа, повернуть на 180 и всё такое?

255
25 апреля 2008 года
Dart Bobr
1.4K / / 09.04.2004
Цитата: Der Meister
Отнюдь. В восьмой версии DD как интерфейс уже непрочь прекратил своё существование, а в седьмой версии D3D являлся логической надстройкой над DD и работал в тесном с ним взаимодействии.
Автор, как насчёт Microsoft.DirectX.Direct3D.Sprite.Transform? Типа, повернуть на 180 и всё такое?


Читайте внимательней, мои посты. Там есть магические слова. Например, слово "до". Во вторых, D3D не работал с DD в "тесном взаимодействии". Можно было спокойно создать приложение использующее DD, и не используещее, D3D. Да и что вы пытаетесь доказать? Что использование 3д в двумерных играх хорошо? И нагружать гпу шейдерами для 2д тоже круто? А как же аудитория, на которую расчитан продукт, они обязаны для 2д игры покупать мощные 3д ускорители, только потому, что у кого-то зацикленность на новых технологиях? Та они пошлют лесом вас с вашим продуктом, с таким подходом.

9
25 апреля 2008 года
Lerkin
3.0K / / 25.03.2003
Прекращаем бардак...
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог