|
27.11.2011, 18:36
|
#16
|
ПроЭктировщик
Регистрация: 22.10.2010
Сообщений: 196
Написано 16 полезных сообщений (для 30 пользователей)
|
Ответ: Directx 9 текстурирование объекта несколькими текстурами
Кст. Можешь с ними помочь? А то что то уже 3 день голову ломаю и ничего не получается.
http://www.gamedev.ru/code/forum/?id=155120#m3
__________________
Для меня нет ничего не реального в кодинге, но мне лень
gainOS - прорыв в проектировании ОС на MIDlet Pascal
|
(Offline)
|
|
27.11.2011, 21:37
|
#17
|
Мастер
Регистрация: 09.05.2010
Адрес: Самара
Сообщений: 1,083
Написано 254 полезных сообщений (для 533 пользователей)
|
Ответ: Directx 9 текстурирование объекта несколькими текстурами
там при загрузке ты должен указывать errorBuffer, посмотри какую ошибку возвращает.
инфа что ниже работает 100%. Я в своем проекте загружал эффект с релизацией вершинного и пиксельного шейдера и все работало
HRESULT hr = D3DXCreateEffectFromFileA(
globals::device, // связанное устройство
fileName, // имя исходного файла
0, // нет объявлений препроцессора
0, // нет интерфейса ID3DXInclude
D3DXSHADER_DEBUG, // флаги компиляции
0, // параметры не используются совместно
&_effect, // возвращает результат
&_errorBuffer); // возвращает строку с ошибками
// Выводим любые сообщения об ошибках
if( _errorBuffer )
{//если валится тут то ошибка при компиляции
::MessageBoxA(0, (char*)_errorBuffer->GetBufferPointer(), 0, 0);
return false;
}
if(FAILED(hr))
{//если валится тут то файл не нашел
::MessageBox(0, L"D3DXCreateEffectFromFile() - FAILED", 0, 0);
return false;
}
return true;
ИМХО но Delphi для DirectX это как для грузчика программирование. Не совместимые вещи. В DX все на указателях, так что юзай C++
|
(Offline)
|
|
27.11.2011, 22:00
|
#18
|
ПроЭктировщик
Регистрация: 22.10.2010
Сообщений: 196
Написано 16 полезных сообщений (для 30 пользователей)
|
Ответ: Directx 9 текстурирование объекта несколькими текстурами
Почему все считают что Делфи такой кривой? Это паскаль обрезан. В делфи есть указатели.
В этом вся фишка то что грузится нормально, ошибок не возвращает. Но кол-во проходов почему то все равно возвращает 0
__________________
Для меня нет ничего не реального в кодинге, но мне лень
gainOS - прорыв в проектировании ОС на MIDlet Pascal
|
(Offline)
|
|
27.11.2011, 22:15
|
#19
|
Мастер
Регистрация: 09.05.2010
Адрес: Самара
Сообщений: 1,083
Написано 254 полезных сообщений (для 533 пользователей)
|
Ответ: Directx 9 текстурирование объекта несколькими текстурами
Я считаю что в Делфи сложно работать с указателями в отличие от c++. И твоя проблема как раз в этом и заключается! Тут можно и месяц копаться, а окажется какая нить мелоч связаная с указателем. Там ты передаешь в Begin указатель который не инициализован. Передавай ему ссылку на переменную.
Короче loc: PLongWord; это пустой указатель на неразмеченую память. Ты создай простой integer и в Begin передавай ссылку например
dxFx._Begin(@myint, 0);
|
(Offline)
|
|
27.11.2011, 22:37
|
#20
|
Мастер
Регистрация: 09.05.2010
Адрес: Самара
Сообщений: 1,083
Написано 254 полезных сообщений (для 533 пользователей)
|
Ответ: Directx 9 текстурирование объекта несколькими текстурами
Люди, а как в теории организовывается анимация, костная, морфная??? Чето вменяемой инфы понятной мне не нашел.
|
(Offline)
|
|
27.11.2011, 22:43
|
#21
|
ПроЭктировщик
Регистрация: 22.10.2010
Сообщений: 196
Написано 16 полезных сообщений (для 30 пользователей)
|
Ответ: Directx 9 текстурирование объекта несколькими текстурами
dxFx := ((fx as IGetSelf).GetClassObject as TAgeEffect).dxEffect;
hTech := dxFx.GetTechniqueByName('main');
if Failed(dxFx.ValidateTechnique(hTech)) then Exit;
dxFx.SetTechnique(hTech);
numPasses := 0;
dxFx._Begin(@numPasses, 0);
if numPasses > 0 then
for i := 0 to numPasses-1 do
begin
dxFx.BeginPass(i);
FDevice.DrawIndexedPrimitive(D3DPT_TRIANGLELIST,0,0,FFacesCount*3,indexOffset,FFacesCount);
end;
dxFx._End;
Забавный факт, но это возвращает 1. То есть функция ничего не делает с этой переменной.
__________________
Для меня нет ничего не реального в кодинге, но мне лень
gainOS - прорыв в проектировании ОС на MIDlet Pascal
|
(Offline)
|
|
27.11.2011, 23:03
|
#22
|
Мастер
Регистрация: 09.05.2010
Адрес: Самара
Сообщений: 1,083
Написано 254 полезных сообщений (для 533 пользователей)
|
Ответ: Directx 9 текстурирование объекта несколькими текстурами
Сообщение от alexprey
dxFx := ((fx as IGetSelf).GetClassObject as TAgeEffect).dxEffect;
hTech := dxFx.GetTechniqueByName('main');
if Failed(dxFx.ValidateTechnique(hTech)) then Exit;
dxFx.SetTechnique(hTech);
numPasses := 0;
dxFx._Begin(@numPasses, 0);
if numPasses > 0 then
for i := 0 to numPasses-1 do
begin
dxFx.BeginPass(i);
FDevice.DrawIndexedPrimitive(D3DPT_TRIANGLELIST,0,0,FFacesCount*3,indexOffset,FFacesCount);
end;
dxFx._End;
Забавный факт, но это возвращает 1. То есть функция ничего не делает с этой переменной.
|
функция в эту переменную возвращает количество проходов.
|
(Offline)
|
|
28.11.2011, 00:01
|
#23
|
ПроЭктировщик
Регистрация: 22.10.2010
Сообщений: 196
Написано 16 полезных сообщений (для 30 пользователей)
|
Ответ: Directx 9 текстурирование объекта несколькими текстурами
Да нет. Если зарание переменной присвоить 1, то будет 1, если 2 то 2
__________________
Для меня нет ничего не реального в кодинге, но мне лень
gainOS - прорыв в проектировании ОС на MIDlet Pascal
|
(Offline)
|
|
28.11.2011, 07:58
|
#24
|
☭
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений (для 2,707 пользователей)
|
Ответ: Directx 9 текстурирование объекта несколькими текстурами
морфная анимация организуется установкой двух буфферов позиций вершин и лерпом по ним в шейдере.
костаная рендерится так:
есть массив матриц (или два кватерниона, но это сложнее) для каждой кости полученный из скелета. есть набор вершин с дополнительными аттрибутами индекса матрицы и ее веса. результирующая позиция складывается из всех трансформаций помноженных на веса.
9-й directx вышел в 2002 году. у него устаревшая архитектура, плохо отражающая архитектуру современных цпу/гпу. ты в 2011 году начал писать двиг. закончишь, хорошо, если к 2014-му. ты понимаешь, что архитектура выбранного тобой гапи к тому времени будет устаревшей как говно мамонта©? ИМХО, кот, если у тебя были проблемы с парсингом b3d, то с двигом будут подавно. Если чисто экспириенса набраться тока. opengl ее еще хуже отражает, правда но там есть расширения.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
28.11.2011, 08:02
|
#25
|
Мастер
Регистрация: 09.05.2010
Адрес: Самара
Сообщений: 1,083
Написано 254 полезных сообщений (для 533 пользователей)
|
Ответ: Directx 9 текстурирование объекта несколькими текстурами
значит directx враппер под Delphi говно.
ЗЫ. В нынешнем dx_sdk, Не Begin, а BeginPass() и End, это говорит о том, что у тебя не то.
|
(Offline)
|
|
28.11.2011, 08:04
|
#26
|
Мастер
Регистрация: 09.05.2010
Адрес: Самара
Сообщений: 1,083
Написано 254 полезных сообщений (для 533 пользователей)
|
Ответ: Directx 9 текстурирование объекта несколькими текстурами
Сообщение от HolyDel
морфная анимация организуется установкой двух буфферов позиций вершин и лерпом по ним в шейдере.
костаная рендерится так:
есть массив матриц (или два кватерниона, но это сложнее) для каждой кости полученный из скелета. есть набор вершин с дополнительными аттрибутами индекса матрицы и ее веса. результирующая позиция складывается из всех трансформаций помноженных на веса.
9-й directx вышел в 2002 году. у него устаревшая архитектура, плохо отражающая архитектуру современных цпу/гпу. ты в 2011 году начал писать двиг. закончишь, хорошо, если к 2014-му. ты понимаешь, что архитектура выбранного тобой гапи к тому времени будет устаревшей как говно мамонта©? ИМХО, кот, если у тебя были проблемы с парсингом b3d, то с двигом будут подавно. Если чисто экспириенса набраться тока.
|
не ну вычислил я матрицу, как мне вернуть XYZ
PS. Я не буду писать супер мега двиг, так для реализации простеньких казуалок
|
(Offline)
|
|
28.11.2011, 08:05
|
#27
|
☭
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений (для 2,707 пользователей)
|
Ответ: Directx 9 текстурирование объекта несколькими текстурами
XYZ это 12,13,14 элементы матрицы
или 3,7,11, если у тебя column-major.
тока тебе эти XYZ не нужны, тока если для куллинга или пика какого нибудь. множь позицию вершины на матрицу, будь мужиком!
|
(Offline)
|
|
28.11.2011, 08:07
|
#28
|
Мастер
Регистрация: 09.05.2010
Адрес: Самара
Сообщений: 1,083
Написано 254 полезных сообщений (для 533 пользователей)
|
Ответ: Directx 9 текстурирование объекта несколькими текстурами
а как мне тогда нарисовать эти вершины, для каждой вершины двигать мировую матрицу чтоли?
|
(Offline)
|
|
28.11.2011, 08:14
|
#29
|
☭
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений (для 2,707 пользователей)
|
Ответ: Directx 9 текстурирование объекта несколькими текстурами
ну я не знаю как там в hlsl
как то так наверное:
float4x3 mWorldMatrixArray[63] : WORLDMATRIXARRAY;
struct a2v {
float4 position : POSITION;
float3 tangent : TANGENT;
float3 normal : NORMAL;
float4 blendWeights : BLENDWEIGHT; //gets the bone weights
float4 blendIndices : BLENDINDICES; //gets the bone indices
float2 texCoord : TEXCOORD0;
};
// Get the indices and weights and cast
//from a 4D vector to a size 4 array
float weights[4] = (float[4])In.blendWeights;
int4 indexVector = In.blendIndices;
int boneIndex[4] = (int[4])indexVector;
// Calculate blended worldposition
worldPos= mul(In.position, bones[boneIndex[0]]) * weights[0];
worldPos+=mul(In.position, bones[boneIndex[1]]) * weights[1];
worldPos+=mul(In.position, bones[boneIndex[2]]) * weights[2];
// The bones should add up to 1 so the last bone weight is 1
// minus all the other weights
float lastweight = 1.0f - weights[0] - weights[1] - weights[2];
worldPos+=mul(In.position, bones[boneIndex[3]]) * lastweight;
еще раз - зачем тебе знать локальные xyz МАТРИЦЫ? вершины у тебя будет двигать шейдер. тыж отказался от ффп? впрочем даже если ты будешь считать позиции вершин на цпу тебе все равно достаточно будет тупо помножить позицию вершины на матрицу. а исходная позиция у тебя хранится в вершинном буфере. а в буфер она попала из файла. а в файл она попала из пакета 3д моделирования. а в пакет моделирования она попала от моделлера. а моделлер взялся от папы с мамой.
|
(Offline)
|
|
28.11.2011, 12:28
|
#30
|
ПроЭктировщик
Регистрация: 22.10.2010
Сообщений: 196
Написано 16 полезных сообщений (для 30 пользователей)
|
Ответ: Directx 9 текстурирование объекта несколькими текстурами
кот. если бы ты лучше читал ман то понял бы что используется begin beginpass endpass и end
__________________
Для меня нет ничего не реального в кодинге, но мне лень
gainOS - прорыв в проектировании ОС на MIDlet Pascal
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 09:25.
|