Суббота, 20 Апреля 2024, 07:48

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Форум игроделов » Записи участника » RDevice [6]
Результаты поиска
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 заполнено данными),
Вершины (всё заполнено данными).
Это всё, пока я хочу только управлять вершинами модели,
данных о анимации нет.

Так вот, мне тупо нужна финальная матрица.
(Без кватернионов.
Если предоставите формулы, то, если не затруднит,
предоставьте определения ко всем членам формулы)
Форум игроделов » Записи участника » RDevice [6]
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг