Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > Xors3D

Xors3D Графический движок с поддержкой DirectX9

Ответ
 
Опции темы
Старый 15.10.2011, 13:32   #511
wolfhound512
Знающий
 
Аватар для wolfhound512
 
Регистрация: 18.02.2008
Сообщений: 276
Написано 121 полезных сообщений
(для 299 пользователей)
Ответ: Xors3D

http://msdn.microsoft.com/en-us/libr...29(VS.85).aspx

Header Mmsystem.h (include Windows.h)
Library Winmm.lib

Winmm.lib добавил в список библиотек?
__________________
GUI, GUIw512, AlbaLynx, Форум
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо wolfhound512 за это полезное сообщение:
moka (16.10.2011), Sashka007 (15.10.2011)
Старый 15.10.2011, 14:50   #512
Sashka007
ПроЭктировщик
 
Аватар для Sashka007
 
Регистрация: 11.11.2008
Адрес: Тольятти
Сообщений: 153
Написано 10 полезных сообщений
(для 24 пользователей)
Ответ: Xors3D

Добавил Winmm.lib и все нормально стало.
(Offline)
 
Ответить с цитированием
Старый 17.10.2011, 19:47   #513
Sashka007
ПроЭктировщик
 
Аватар для Sashka007
 
Регистрация: 11.11.2008
Адрес: Тольятти
Сообщений: 153
Написано 10 полезных сообщений
(для 24 пользователей)
Ответ: Xors3D

В чем может быть проблема? Почему map не показывается? А если убрать xHideEntity(back_map), то показывается весь back_map, на блице все нормально работает.

int back_map = xLoadAnimMesh("DATA/models/map/map.b3d");
int map = xFindChild(back_map,"Plane02");
xEntityType(map,col_map);
xHideEntity(back_map);
(Offline)
 
Ответить с цитированием
Старый 17.10.2011, 19:53   #514
SBJoker
Злобный Админ
 
Аватар для SBJoker
 
Регистрация: 04.09.2005
Сообщений: 5,926
Написано 3,415 полезных сообщений
(для 9,330 пользователей)
Ответ: Xors3D

Сообщение от Sashka007 Посмотреть сообщение
В чем может быть проблема? Почему map не показывается? А если убрать xHideEntity(back_map), то показывается весь back_map, на блице все нормально работает.

int back_map = xLoadAnimMesh("DATA/models/map/map.b3d");
int map = xFindChild(back_map,"Plane02");
xEntityType(map,col_map);
xHideEntity(back_map);
Загрузил модель
нашел чайлд
присвоил группу коллизий

скрыл загруженную модель

Очевидно в результате работы программы мы не увидим модель, что не так?
__________________
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо SBJoker за это полезное сообщение:
moka (17.10.2011), RBK (17.10.2011)
Старый 17.10.2011, 19:59   #515
Sashka007
ПроЭктировщик
 
Аватар для Sashka007
 
Регистрация: 11.11.2008
Адрес: Тольятти
Сообщений: 153
Написано 10 полезных сообщений
(для 24 пользователей)
Ответ: Xors3D

вот: http://narod.ru/disk/28688556001/Game.rar.html


Вот почему-то найденый чайлд мы не видим.
(Offline)
 
Ответить с цитированием
Старый 17.10.2011, 22:06   #516
RBK
Знающий
 
Аватар для RBK
 
Регистрация: 06.12.2010
Адрес: Луганск
Сообщений: 252
Написано 112 полезных сообщений
(для 166 пользователей)
Ответ: Xors3D

Все правильно xHideEntity скрывает указанный объект, и все привязанные к нему.
__________________
AMD Sempron(tm) 1.41Ггц, 1024МБ ОЗУ, GeForce 6200 128МБ, WinXP SP3.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Sashka007 (17.10.2011)
Старый 24.10.2011, 17:06   #517
pozitiffcat
Мастер
 
Аватар для pozitiffcat
 
Регистрация: 09.05.2010
Адрес: Самара
Сообщений: 1,083
Написано 254 полезных сообщений
(для 533 пользователей)
Ответ: Xors3D

есть у кого шейдер, для создания мультяшной графики, рисованной. Вроде технология cell-shading называется... ???
(Offline)
 
Ответить с цитированием
Старый 24.10.2011, 17:16   #518
dsd
Мастер
 
Аватар для dsd
 
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений
(для 1,836 пользователей)
Ответ: Xors3D

Тебе нужно в зависимости от угла между нормалью и вектором соединяющим пиксель и камеру красить каким-либо цветом пиксель. Он простой сам по себе шейдер.
Вообще в архиве с хорсом в сэмплах идет ToonShaded Light. Ну можно еще с бесшовной текстурой как-нить по диагонали типа карандашом заштрихованную в какой-то пропорции смешивать. И постэффектом маской все контуры зубчатыми делать.


//##########################################
// mSL
//
// Toon Shading
// with 3 Light Source Types
//
// Open Source, for Free Using
// Author: MoKa (Maxim Miheyev)
// Mail: [email protected]
// Visit: RubuX.net
//##########################################


//################## Varriables ##################
const float4x4 MatWorldViewProj;
const float4x4 MatWorld;

// Light
const float4 AmbientClr; // Ambient Color
const float4 LightClr; // Light Color
const float4 CountourClr; // Contour Color
const half CountourWidth; // Contour Width

// Positions
float4 PosLight; // Light Position
float RngLight; // Light Range
float4 PosCam; // Camera Position

// Other
static float4 Color;
static float cTS;

static float nLight;
static float nCam;



//################## Textures ##################
const texture tToonGradient; // Toon Gradient Texture
sampler1D TexToonGradient=sampler_state {
Texture = <tToonGradient>;
ADDRESSU = CLAMP;
ADDRESSV = CLAMP;
MAGFILTER = LINEAR;
MINFILTER = LINEAR;
MIPFILTER = LINEAR;
};


//################## Input VS ##################
struct sv_N {
float4 Position : POSITION0;
float3 Normal : NORMAL;
};
//################## Output VS ##################
struct sp_PW_N {
float4 Position : POSITION0;
float4 pWorld : TEXCOORD0;
float3 Normal : TEXCOORD1;
};


//################## VS ##################
void vs_PW_N( in sv_N IN, out sp_PW_N OUT ) {
OUT.Position = mul(IN.Position,MatWorldViewProj);
OUT.pWorld = mul(IN.Position,MatWorld);
OUT.Normal = normalize(mul(IN.Normal,MatWorld));
}

//################## PS ##################
float4 psDirectional( in sp_PW_N IN ) : COLOR {
PosLight = normalize(PosLight);
PosCam = normalize(PosCam-IN.pWorld);

nLight = saturate(dot(PosLight,IN.Normal));
nCam = normalize(dot(PosCam,IN.Normal)-CountourWidth);

cTS = tex1D(TexToonGradient,nLight).r;

Color = (AmbientClr*(1.0f-cTS)+(cTS*LightClr))*nCam+((1.0f-nCam)*CountourClr);

return float4(Color.rgb,1.0f);
}

float4 psPoint( in sp_PW_N IN ) : COLOR {
PosLight = normalize(PosLight-IN.pWorld);
PosCam = normalize(PosCam-IN.pWorld);

nLight = saturate(dot(PosLight,IN.Normal));
nCam = normalize(dot(PosCam,IN.Normal)-CountourWidth);

cTS = tex1D(TexToonGradient,nLight).r;

Color = (AmbientClr*(1.0f-cTS)+(cTS*LightClr))*nCam+((1.0f-nCam)*CountourClr);

return float4(Color.rgb,1.0f);
}

float4 psPointDistance( in sp_PW_N IN ) : COLOR {
RngLight = saturate(1.0f-(distance(IN.pWorld,PosLight)/RngLight));
if (RngLight>0.0f) {
PosLight = normalize(PosLight-IN.pWorld);

nLight = saturate(dot(PosLight,IN.Normal)*pow(RngLight,.1)) ;

cTS = tex1D(TexToonGradient,nLight).r;

Color = AmbientClr*(1.0f-cTS)+(cTS*LightClr);
} else {
Color = AmbientClr;
}

PosCam = normalize(PosCam-IN.pWorld);
nCam = normalize(dot(PosCam,IN.Normal)-CountourWidth);

Color = Color*nCam+(1.0f-nCam)*CountourClr;

return float4(Color.rgb,1.0f);
}


//################## Technique ##################
technique Directional {
pass p0 {
AlphaBlendEnable= false;
vertexshader = compile vs_2_0 vs_PW_N();
pixelshader = compile ps_2_0 psDirectional();
}
}
technique Point {
pass p0 {
AlphaBlendEnable= false;
vertexshader = compile vs_2_0 vs_PW_N();
pixelshader = compile ps_2_0 psPoint();
}
}
technique PointDistance {
pass p0 {
AlphaBlendEnable= false;
vertexshader = compile vs_2_0 vs_PW_N();
pixelshader = compile ps_2_0 psPointDistance();
}
}
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
moka (24.10.2011)
Старый 25.10.2011, 10:24   #519
pozitiffcat
Мастер
 
Аватар для pozitiffcat
 
Регистрация: 09.05.2010
Адрес: Самара
Сообщений: 1,083
Написано 254 полезных сообщений
(для 533 пользователей)
Ответ: Xors3D

у меня объект b3d состоит из множества мешей, следовательно там куча тестур. Как мне это обработать, тем более что модель анимационная. И когда я накладываю шейдер, она теряет текстуру
(Offline)
 
Ответить с цитированием
Старый 25.10.2011, 10:49   #520
dsd
Мастер
 
Аватар для dsd
 
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений
(для 1,836 пользователей)
Ответ: Xors3D

Накладывать на каждый меш шейдер отдельно и передавать в шейдер соответствующую текстуру
xSetEntityEffect(mesh,Shader);
xSetEffectTexture(mesh,"seaside",seaside_tex);

А если у тебя именно в меше куча сюрфейсов с отличающимися текстурами, то тебе надо пытаться, что-то замутить с текстурными координатами или в цвете вершин в шейдер дополнительно передавать данные о порядковом номере текстуры для текущей вершины и в шейдер загружать кучу текстур и учить его думать чо чем красить.
Лучше въехать в шейдеры хоть чу-чуть и уже планировать более рациональное их использование. Написанные кем то шейдеры твою игру не спасут. Вот.
(Offline)
 
Ответить с цитированием
Старый 25.10.2011, 11:58   #521
pozitiffcat
Мастер
 
Аватар для pozitiffcat
 
Регистрация: 09.05.2010
Адрес: Самара
Сообщений: 1,083
Написано 254 полезных сообщений
(для 533 пользователей)
Ответ: Xors3D

Сообщение от dsd Посмотреть сообщение
Накладывать на каждый меш шейдер отдельно и передавать в шейдер соответствующую текстуру
xSetEntityEffect(mesh,Shader);
xSetEffectTexture(mesh,"seaside",seaside_tex);

А если у тебя именно в меше куча сюрфейсов с отличающимися текстурами, то тебе надо пытаться, что-то замутить с текстурными координатами или в цвете вершин в шейдер дополнительно передавать данные о порядковом номере текстуры для текущей вершины и в шейдер загружать кучу текстур и учить его думать чо чем красить.
Лучше въехать в шейдеры хоть чу-чуть и уже планировать более рациональное их использование. Написанные кем то шейдеры твою игру не спасут. Вот.
я вообще не могу понять шейдеры.. откуда мне брать формулы вычисления. Как вот мне узнать что этот пиксел крайний и его нужно нарисовать черным? типо окантовка модели... и т.п.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Nex (25.10.2011)
Старый 25.10.2011, 12:26   #522
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Ответ: Xors3D

Как вот мне узнать что этот пиксел крайний и его нужно нарисовать черным?
для честного outlining-а нужен SM 4
(Offline)
 
Ответить с цитированием
Старый 25.10.2011, 12:49   #523
pozitiffcat
Мастер
 
Аватар для pozitiffcat
 
Регистрация: 09.05.2010
Адрес: Самара
Сообщений: 1,083
Написано 254 полезных сообщений
(для 533 пользователей)
Ответ: Xors3D

Сообщение от HolyDel Посмотреть сообщение
для честного outlining-а нужен SM 4
это еще че такое
(Offline)
 
Ответить с цитированием
Старый 25.10.2011, 12:51   #524
SBJoker
Злобный Админ
 
Аватар для SBJoker
 
Регистрация: 04.09.2005
Сообщений: 5,926
Написано 3,415 полезных сообщений
(для 9,330 пользователей)
Ответ: Xors3D

ShaderModel 4 / Шейдеры четвертой версии
__________________
(Offline)
 
Ответить с цитированием
Старый 25.10.2011, 13:03   #525
dsd
Мастер
 
Аватар для dsd
 
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений
(для 1,836 пользователей)
Ответ: Xors3D

Ну если в кратце и врать, то.

в шейдере у тебя есть входные данные - этакие переменные и константы.

Есть первоначальный обработчик этих данных который нужным образом совместит твои данные и модель которую ты красить собрался. Это вершинный шейдер. В нем ты в общем случае должен для каждой вершины сформировать данные в которых ты для этой вершины укаюешь ее текстурные координаты и нормаль. Ну и еще можно все что угодно туда вписать необходимое для извращений.

вот когда все вершины получили свои правильные по мнению видеокарты данные происходит переход на нижний уровень где уже непосредственно рисуются точки которые ты увидешь на экране. Это называется пиксельный шейдер.

И по сути он работает уже не с моделью, а только с одним ее треугольником. Из вершинного шейдера ты передал текстурные координаты вершинам треугольника и командой sampler2d() можешь приказать шейдеру из какой текстуры узнать какая точкой той текстуры попадает в это место. Это есть наш цвет с которым мы должны работать дальше.

Еще в вершинном шейдере мы подготовливаем данные о нормали поверхности. Которые магическим образом передаются в текущий пиксель. Еще мы можем в шейдер этакой глобальной переменной передать вектор вдоль которого светит свет.
Дальше командой normalize() можно сделать векторы нормали и направления света длинной 1. И есть команда dot() скалярное произведение векторов. Котрая при нормализации входных векторов вернет косинус угла между ними.

И вот тут происходит магия. У нас есть из сэмплера цвет пикселя от текстуры. Есть косинус угла между нормалью и повернутым обратно светом, этот косинус является той. Частью света которую отразит наш пиксель прямо нам в глаз. Перемножаем вектор цвета но косинус получаем четырехмерный вектор цвета который и есть наш пиксель для которого посчитан правильный цвет и затенение.
сорри за мой хранйцузский акцент, пишу с мобилы.
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Xors3d wants YOU! .Squid Xors3D 33 13.01.2013 23:34
Xors3D для D johnk Проекты C++ 8 09.08.2009 14:18
Xors3D for .NET? johnk C++ 7 06.08.2009 09:34
Xors3D ЛысыЙ_Чук-Иванчук Модули для BlitzMax 145 18.06.2009 21:17
xors3d NitE 3D-программирование 9 02.04.2009 22:21


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


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com