|
26.11.2011, 00:45
|
#1
|
Мастер
Регистрация: 09.05.2010
Адрес: Самара
Сообщений: 1,083
Написано 254 полезных сообщений (для 533 пользователей)
|
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->DrawIndexedPrimitive .............
Device->SetTexture(0, _tex1);
Device->DrawIndexedPrimitive .............
так??
|
(Offline)
|
|
26.11.2011, 01:08
|
#2
|
Терабайт исходников
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений (для 6,051 пользователей)
|
Ответ: 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
|
(Offline)
|
|
26.11.2011, 01:16
|
#3
|
Мастер
Регистрация: 09.05.2010
Адрес: Самара
Сообщений: 1,083
Написано 254 полезных сообщений (для 533 пользователей)
|
Ответ: Directx 9 текстурирование объекта несколькими текстурами
нет тут не стоит использовать слои текстур, может у меня на один объект состоящий из 100500 граней, нужно наложить 100500 текстур на каждую грань
|
(Offline)
|
|
26.11.2011, 01:18
|
#4
|
Терабайт исходников
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений (для 6,051 пользователей)
|
Ответ: Directx 9 текстурирование объекта несколькими текстурами
задача нечётко поставлена, скажи что хочешь сделать %)
|
(Offline)
|
|
26.11.2011, 01:26
|
#5
|
Мастер
Регистрация: 09.05.2010
Адрес: Самара
Сообщений: 1,083
Написано 254 полезных сообщений (для 533 пользователей)
|
Ответ: Directx 9 текстурирование объекта несколькими текстурами
Есть объект - 1 меш. В 3d maxe на него назначено много текстур, штук 20. Я загружаю все в один буфер вершин с индексами, и нужно юзать эти текстуры.
|
(Offline)
|
|
26.11.2011, 01:33
|
#6
|
Терабайт исходников
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений (для 6,051 пользователей)
|
Ответ: Directx 9 текстурирование объекта несколькими текстурами
т.е. меш в максе состоит из полигонов с разными текстурами? ну да, тогда обычно рендерят кадый кусок отдельным дипом, как вроде ты и написал в первом посте. собственно в blitz3d/xors3d понятие surface и является такой частью меша с одной текстурой, они рендерятся каждый отдельным дипом.
|
(Offline)
|
|
26.11.2011, 19:13
|
#7
|
ПроЭктировщик
Регистрация: 22.10.2010
Сообщений: 196
Написано 16 полезных сообщений (для 30 пользователей)
|
Ответ: Directx 9 текстурирование объекта несколькими текстурами
Все правильно делаешь. Сам делаю по такому же принципу, только у меня удобнее все это сделано.
__________________
Для меня нет ничего не реального в кодинге, но мне лень
gainOS - прорыв в проектировании ОС на MIDlet Pascal
|
(Offline)
|
|
27.11.2011, 02:38
|
#8
|
Мастер
Регистрация: 09.05.2010
Адрес: Самара
Сообщений: 1,083
Написано 254 полезных сообщений (для 533 пользователей)
|
Ответ: Directx 9 текстурирование объекта несколькими текстурами
еще вопрос. При написании движка с нуля, изначально построить систему блендинга и освещения на основе шейдеров, и забить на реализацию стандартных DX совских методов, или все же их тоже включить в двиг.
Просто у меня в планах, вообще не реализовывать всякую устаревшую чушь, а сразу делать deferred shading, и колиззии, выбор объектов и т.п. на буллете. Познания в DX пока что ничтожные, и решаю не заострять внимание на неактуальные вещи, а сразу копать в сторону шейдеров
Еще вопросик. Как получить глобальную позицию, поворот, исходя из матрицы?
Последний раз редактировалось pozitiffcat, 27.11.2011 в 03:44.
|
(Offline)
|
|
27.11.2011, 03:46
|
#9
|
.
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений (для 6,863 пользователей)
|
Ответ: Directx 9 текстурирование объекта несколькими текстурами
Не делай никакой реализации FFP ("всякой старой хрени"), а делай Только шейдеры.
Например сравнительно молодой GLES 2.0 - также не имеет Никакого FFP вообще, и всё на шейдерах, что имхо - очень круто.
|
(Offline)
|
|
27.11.2011, 04:16
|
#10
|
ПроЭктировщик
Регистрация: 22.10.2010
Сообщений: 196
Написано 16 полезных сообщений (для 30 пользователей)
|
Ответ: Directx 9 текстурирование объекта несколькими текстурами
>>Как получить глобальную позицию, поворот, исходя из матрицы?
Кури матан =) И поймешь что практически не реально +)
__________________
Для меня нет ничего не реального в кодинге, но мне лень
gainOS - прорыв в проектировании ОС на MIDlet Pascal
|
(Offline)
|
|
27.11.2011, 04:30
|
#11
|
Мастер
Регистрация: 09.05.2010
Адрес: Самара
Сообщений: 1,083
Написано 254 полезных сообщений (для 533 пользователей)
|
Ответ: Directx 9 текстурирование объекта несколькими текстурами
Я пытаюсь изучить DX, что кстати получается, и замутить очень простой двиг для мелких игрушек типа 8bit story на шейдерах полностью, и встроеной физике (буллет, оде, хз еще не выбрал).
охренеть если не реально, тогда как посчитать такую вещь: есть объект на него назначен чилд. чилд смещен на какоето расстояние, объект родитель повернуть, чилд уже имеет другие позиции, как их узнать.
|
(Offline)
|
|
27.11.2011, 04:36
|
#12
|
.
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений (для 6,863 пользователей)
|
Ответ: Directx 9 текстурирование объекта несколькими текстурами
Сообщение от pozitiffcat
охренеть если не реально, тогда как посчитать такую вещь: есть объект на него назначен чилд. чилд смещен на какоето расстояние, объект родитель повернуть, чилд уже имеет другие позиции, как их узнать.
|
Либо ты пересчитываешь матрицы при модификациях оных, либо ты их просчитываешь при каждом рендере.
Позиция чайлда - будет зависеть от его матрицы и матрицы отца.
Перемножаешь матрицу чайлда на матрицу отца - будет результат, который имеет все глобальные данные чайлда.
Я в этом нууб, но про перемножение матриц, верно?
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
27.11.2011, 04:39
|
#13
|
Мастер
Регистрация: 09.05.2010
Адрес: Самара
Сообщений: 1,083
Написано 254 полезных сообщений (для 533 пользователей)
|
Ответ: 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;
}
|
(Offline)
|
|
27.11.2011, 05:27
|
#14
|
Терабайт исходников
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений (для 6,051 пользователей)
|
Ответ: Directx 9 текстурирование объекта несколькими текстурами
построить систему блендинга и освещения на основе шейдеров
|
блендинг объектов между собой по-прежнему FFPовый обычно везде.
Как получить глобальную позицию, поворот, исходя из матрицы?
|
ты уверен, что тебе это нужно? скорее всего ты неправильно подошёл к задаче
есть объект на него назначен чилд. чилд смещен на какоето расстояние, объект родитель повернуть, чилд уже имеет другие позиции, как их узнать.
|
умножить матрицу чилда на матрицу парента?
умножь локальный 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
|
(Offline)
|
|
27.11.2011, 18:05
|
#15
|
Мастер
Регистрация: 09.05.2010
Адрес: Самара
Сообщений: 1,083
Написано 254 полезных сообщений (для 533 пользователей)
|
Ответ: Directx 9 текстурирование объекта несколькими текстурами
Охренеть, шейдерами так вообще пол директ икса заменить можно
че за вектор и матрикс кстати?
первый раз такое вижу, обычно матрицы объявляют как float4x4, векторы как float3/float4
|
в книге так учат, и работает.. я разобрался заюзал d3dxeffect
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 09:14.
|