Результаты поиска
| |
RDevice | Дата: Пятница, 05 Августа 2016, 02:36 | Сообщение # 1 | Тема: DirectX 11: Global Effect |
был не раз
Сейчас нет на сайте
| Хочется узнать, можно ли запретить ImmediateContext'у устанавливать эффекты в текущий кадр? Если по-русски, то:
Код GraphicsDevice->Clear(1);
GraphicsDevice->SetForceEffectThisFrame(Effect); //Устанавливаем эффект на весь кадр //(При вызове Present он обнуляется и не используется до последующего вызова) GraphicsDevice->DrawMyLittlePony(OtherEffect); //Рисуем какую-то фигню, используя какой-то другой эффект
GraphicsDevice->Present();
Как следствие, после вызова SetForceEffectThisFrame(), нужно запретить вызов ImmediateContext->VSSetShader() и ImmediateContext->PSSetShader(), чтобы у нас использовался только Effect для всей геометрии, а не Effect и OtherEffect.
Первым делом я решил просто сделать проверку:
Код void GraphicsDevice::DrawMyLittlePony(OtherEffect) { if (Effect == NULL) { ImmediateContext->VSSetShader(OtherEffect->VertexShader, ..., ...); ImmediateContext->PSSetShader(OtherEffect->PixelShader, ..., ...); } }
Но понял, что можно вызвать так:
Код GraphicsDevice->Clear(1);
GraphicsDevice->SetForceEffectThisFrame(Effect); GraphicsDevice->ImmediateContext->VSSetShader(OtherEffect->VertexShader, ..., ...); GraphicsDevice->ImmediateContext->PSSetShader(OtherEffect->PixelShader, ..., ...); GraphicsDevice->DrawMyLittlePony(OtherEffect);
GraphicsDevice->Present();
Добавлено (05 августа 2016, 02:36) --------------------------------------------- ладно, понял, прошаренных тут нет, тему можно закрыть
|
|
| |
RDevice | Дата: Среда, 23 Декабря 2015, 00:27 | Сообщение # 2 | Тема: Конвертирование вектора (списока) в строку. |
был не раз
Сейчас нет на сайте
| Неожиданный офтоп...
Saitei: бан на 7 дней за оффтоп.
|
|
| |
RDevice | Дата: Понедельник, 21 Декабря 2015, 02:04 | Сообщение # 3 | Тема: Конвертирование вектора (списока) в строку. |
был не раз
Сейчас нет на сайте
| Спасибо за ответы, ребят.
Добавлено (21 декабря 2015, 02:04) --------------------------------------------- Нашел метод, при помощи которого после создания char* можно будет его удалить:
Код #define STRING_SIZE 128
char* String::operator & () { std::string Text(Data.begin(), Data.end()); char* Array = new char[STRING_SIZE] { 0 };
for (int i = 0; i < Text.length(); i++) Array[i] = Text[i];
std::string().swap(Text);
return Array; }
Код char* Четотам = &String("Hello, world!"); delete[] Четотам;
- В итоге, после этих действий, память не растет - Минусы - фиксированный размер строки (STRING_SIZE = 128), выставленный перед сборкой, иначе строка записывается неправильно
Сообщение отредактировал RDevice - Понедельник, 21 Декабря 2015, 02:55 |
|
| |
RDevice | Дата: Пятница, 11 Декабря 2015, 20:56 | Сообщение # 4 | Тема: Конвертирование вектора (списока) в строку. |
был не раз
Сейчас нет на сайте
| У меня возникла проблема, используя вот такой код:
Код std::vector<char> Data; Data.push_back('6');
char* Array = new char[(int)Data.size()]; memcpy(Array, &(Data[0]), sizeof(Data[0]));
И на выходе получаю:
Код Array 0x03fa2160 "6ээээ««««««««юоюоюою" char *
Следовательно, вопрос: Как это сделать по другому? Без части, что идет после '6?
Не предлагать (результат тот же):
Код Array = &Data[0]; Array = Data.data();
Добавлено (11 декабря 2015, 20:56) --------------------------------------------- Упс, накладочка вышла... У меня есть подобный код, сорь.
Код char* ToChar() { return (char*)(new std::string(Data.begin(), Data.end()))->c_str(); }
|
|
| |
RDevice | Дата: Среда, 09 Сентября 2015, 23:02 | Сообщение # 5 | Тема: Кости | Суставы |
был не раз
Сейчас нет на сайте
| Спасибо, но код у меня примерно такой же (т.к. у меня формат SMD, то я использую 5 весов), мне интересно как вы получаете: Код uniform mat4 bind_shape_matrix; uniform mat4 joints_matrices[100]; uniform mat4 joints_inv_matrices[100]; Добавлено (09 сентября 2015, 23:02) --------------------------------------------- никто не поможет? я ж почти разобрался, мне бы знать как умножать кость на позицию, поясню если умножаю таким образом:
Код for (int i = 0; i < Кол-во_Костей; i++) Финальная_Матрица[i] = Кости[i].Просчитанный_Поворот * (Кости[i].Parent == -1 ? Matrix::Identity() : Кости[Кости[i].Parent].Просчитанный_Поворот);
//Поворот кости по глобальным координатам * Родительскую ротацию, если возможно
Псевдо-код выше показывает такую-же картинку, как и Blender(Если не у одной кости нет позиции(в файле позиции по нулям поставил)), но если сделать следующее, то всё печально, какая-то ересь получается...
Код for (int i = 0; i < Кол-во_Костей; i++) Финальная_Матрица[i] = Кости[i].Просчитанный_Поворот_Умноженный_На_Позицию * (Кости[i].Parent == -1 ? Matrix::Identity() : Кости[Кости[i].Parent].Просчитанный_Поворот_Умноженный_На_Позицию);
//(Поворот кости по глобальным координатам * Позицию этой кости по локальным коордам) * (Поворот родительской кости по глобальным координатам * Позицию родительской кости по локальным коордам), если возможно
|
|
| |
RDevice | Дата: Четверг, 13 Августа 2015, 00:11 | Сообщение # 6 | Тема: Кости | Суставы |
был не раз
Сейчас нет на сайте
| Очередной вопрос, связанный со скелетной анимацией. По факту, я почти закончил её делать, но возникла главная, на мой взгляд, проблема: Получение финальной матрицы. Использую SMD, DirectX 11. Шейдеры написаны правильно. Структура Joint и Vertex такова:
Код struct Joint { int Parent; //Родитель этого сустава Vector Position; //Vector 3 Vector Rotation; //Vector 3 Matrix Transform; //Не финальная матрица, держу, пока что, просто так }; struct Vertex { static UINT Stride; //DX Причуда static UINT Offset; //DX Причуда 2 Vector Position; //Vector 3 Vector TexCoord; //Vector 4, Z и W - Индекс кости и её вес(SMD использует до 5 костей, как я понял) Vector Normal; //Vector 3 Vector Joint; //Vector 4, Индексы костей Vector Bias; //Vector 4, Весы };
После загрузки модели имею: Суставы (Joint, всё кроме Transform заполнено данными), Вершины (всё заполнено данными). Это всё, пока я хочу только управлять вершинами модели, данных о анимации нет.
Так вот, мне тупо нужна финальная матрица. (Без кватернионов. Если предоставите формулы, то, если не затруднит, предоставьте определения ко всем членам формулы)
|
|
| |
|