forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   C++ (http://forum.boolean.name/forumdisplay.php?f=22)
-   -   Directx 9 текстурирование объекта несколькими текстурами (http://forum.boolean.name/showthread.php?t=15916)

pozitiffcat 26.11.2011 00:45

Directx 9 текстурирование объекта несколькими текстурами
 
как реализовать сабж.

Device->SetTransform(D3DTS_WORLD, &p);
Device->SetStreamSource(0, VB, 0, sizeof(Vertex));
Device->SetIndices(IB);
Device->SetFVF(Vertex::FVF);
Device->SetTexture(0, _tex0);
Device->DrawIndexedPrimitive .............
Device->SetTexture(0, _tex1);
Device->DrawIndexedPrimitive .............

так??

Mr_F_ 26.11.2011 01:08

Ответ: Directx 9 текстурирование объекта несколькими текстурами
 
скорее так

Device->SetTransform(D3DTS_WORLD, &p);
Device->SetStreamSource(0, VB, 0, sizeof(Vertex));
Device->SetIndices(I;
Device->SetFVF(Vertex::FVF);
Device->SetTexture(0, _tex0);
Device->SetTexture(1, _tex1);
Device->DrawIndexedPrimitive .............

а вообще не помню точно, юзаю ID3DXEffect

pozitiffcat 26.11.2011 01:16

Ответ: Directx 9 текстурирование объекта несколькими текстурами
 
нет тут не стоит использовать слои текстур, может у меня на один объект состоящий из 100500 граней, нужно наложить 100500 текстур на каждую грань :-D

Mr_F_ 26.11.2011 01:18

Ответ: Directx 9 текстурирование объекта несколькими текстурами
 
задача нечётко поставлена, скажи что хочешь сделать %)

pozitiffcat 26.11.2011 01:26

Ответ: Directx 9 текстурирование объекта несколькими текстурами
 
Есть объект - 1 меш. В 3d maxe на него назначено много текстур, штук 20. Я загружаю все в один буфер вершин с индексами, и нужно юзать эти текстуры.

Mr_F_ 26.11.2011 01:33

Ответ: Directx 9 текстурирование объекта несколькими текстурами
 
т.е. меш в максе состоит из полигонов с разными текстурами? ну да, тогда обычно рендерят кадый кусок отдельным дипом, как вроде ты и написал в первом посте. собственно в blitz3d/xors3d понятие surface и является такой частью меша с одной текстурой, они рендерятся каждый отдельным дипом.

alexprey 26.11.2011 19:13

Ответ: Directx 9 текстурирование объекта несколькими текстурами
 
Все правильно делаешь. Сам делаю по такому же принципу, только у меня удобнее все это сделано.

pozitiffcat 27.11.2011 02:38

Ответ: Directx 9 текстурирование объекта несколькими текстурами
 
еще вопрос. При написании движка с нуля, изначально построить систему блендинга и освещения на основе шейдеров, и забить на реализацию стандартных DX совских методов, или все же их тоже включить в двиг.
Просто у меня в планах, вообще не реализовывать всякую устаревшую чушь, а сразу делать deferred shading, и колиззии, выбор объектов и т.п. на буллете. Познания в DX пока что ничтожные, и решаю не заострять внимание на неактуальные вещи, а сразу копать в сторону шейдеров

Еще вопросик. Как получить глобальную позицию, поворот, исходя из матрицы?

moka 27.11.2011 03:46

Ответ: Directx 9 текстурирование объекта несколькими текстурами
 
Не делай никакой реализации FFP ("всякой старой хрени"), а делай Только шейдеры.
Например сравнительно молодой GLES 2.0 - также не имеет Никакого FFP вообще, и всё на шейдерах, что имхо - очень круто.

alexprey 27.11.2011 04:16

Ответ: Directx 9 текстурирование объекта несколькими текстурами
 
>>Как получить глобальную позицию, поворот, исходя из матрицы?
Кури матан =) И поймешь что практически не реально +)

pozitiffcat 27.11.2011 04:30

Ответ: Directx 9 текстурирование объекта несколькими текстурами
 
Я пытаюсь изучить DX, что кстати получается, и замутить очень простой двиг для мелких игрушек типа 8bit story на шейдерах полностью, и встроеной физике (буллет, оде, хз еще не выбрал).
охренеть если не реально, тогда как посчитать такую вещь: есть объект на него назначен чилд. чилд смещен на какоето расстояние, объект родитель повернуть, чилд уже имеет другие позиции, как их узнать.

moka 27.11.2011 04:36

Ответ: Directx 9 текстурирование объекта несколькими текстурами
 
Цитата:

Сообщение от pozitiffcat (Сообщение 211388)
охренеть если не реально, тогда как посчитать такую вещь: есть объект на него назначен чилд. чилд смещен на какоето расстояние, объект родитель повернуть, чилд уже имеет другие позиции, как их узнать.

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

Я в этом нууб, но про перемножение матриц, верно?

pozitiffcat 27.11.2011 04:39

Ответ: Directx 9 текстурирование объекта несколькими текстурами
 
про перемножение да. тоесть при перемножении я получаю новую матрицу, которая означает позицию чилда. Но как же вытащить XYZ
X3025 Global variables are implicitly constant - это сообщение выдает компилятор шейдеров при компиляции шейдера. Что за хрень знает ктонить?
Код:

extern matrix WorldViewMatrix;
extern matrix WorldViewProjMatrix;

extern vector Color;

extern vector LightDirection;

static vector Black = {0.0f, 0.0f, 0.0f, 0.0f};

//
// Структуры
//

struct VS_INPUT
{
    vector position : POSITION;
    vector normal  : NORMAL;
};

struct VS_OUTPUT
{
    vector position : POSITION;
    float2 uvCoords : TEXCOORD;
    vector diffuse  : COLOR;
};

//
// Точка входа
//

VS_OUTPUT Main(VS_INPUT input)
{
    // Обнуляем члены выходной структуры
    VS_OUTPUT output = (VS_OUTPUT)0;

    // Преобразуем местположение вершины в однородное
    // пространство отсечения
    output.position = mul(input.position, WorldViewProjMatrix);

    //
    // Преобразуем вектор света и нормаль в пространство вида.
    // Мы устанавливаем значение компоненты w равным нулю потому что
    // мы преобразуем векторы. Предполагается, что в мировой матрице
    // нет никакого масштабирования.
    //
    LightDirection.w = 0.0f;
    input.normal.w  = 0.0f;
    LightDirection  = mul(LightDirection, WorldViewMatrix);
    input.normal    = mul(input.normal, WorldViewMatrix);

    //
    // Вычисление одномерной координаты текстуры
    // для мультипликационной визуализации
    //
    float u = dot(LightDirection, input.normal);

    //
    // Если u меньше нуля, считаем, что u равно нулю, поскольку
    // отрицательные значения соответствуют углам между вектором света
    // и нормалью большим 90 градусов. А если угол больше 90 градусов,
    // значит поверхность не освещается
    //
    if(u < 0.0f)
          u = 0.0f;

    //
    // Устанавливаем вторую координату текстуры на середину
    //
    float v = 0.5f;
    output.uvCoords.x = u;
    output.uvCoords.y = v;

    // Сохраняем цвет
    output.diffuse = Color;

    return output;
}


Mr_F_ 27.11.2011 05:27

Ответ: Directx 9 текстурирование объекта несколькими текстурами
 
Цитата:

построить систему блендинга и освещения на основе шейдеров
блендинг объектов между собой по-прежнему FFPовый обычно везде.

Цитата:

Как получить глобальную позицию, поворот, исходя из матрицы?
ты уверен, что тебе это нужно? скорее всего ты неправильно подошёл к задаче

Цитата:

есть объект на него назначен чилд. чилд смещен на какоето расстояние, объект родитель повернуть, чилд уже имеет другие позиции, как их узнать.
умножить матрицу чилда на матрицу парента?

Цитата:

Но как же вытащить XYZ
умножь локальный XYZ на матрицу парента

Цитата:

X3025 Global variables are implicitly constant - это сообщение выдает компилятор шейдеров при компиляции шейдера.
ваще то он строчку показывает, где ошибка

Цитата:

extern matrix WorldViewMatrix;
extern matrix WorldViewProjMatrix;
extern vector Color;
extern vector LightDirection;
static vector Black = {0.0f, 0.0f, 0.0f, 0.0f};
че за вектор и матрикс кстати?
первый раз такое вижу, обычно матрицы объявляют как float4x4, векторы как float3/float4

pozitiffcat 27.11.2011 18:05

Ответ: Directx 9 текстурирование объекта несколькими текстурами
 
Охренеть, шейдерами так вообще пол директ икса заменить можно
Цитата:

че за вектор и матрикс кстати?
первый раз такое вижу, обычно матрицы объявляют как float4x4, векторы как float3/float4
в книге так учат, и работает.. я разобрался заюзал d3dxeffect


Часовой пояс GMT +4, время: 22:32.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot