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

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

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

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

Ответ
 
Опции темы
Старый 14.11.2011, 20:35   #241
dsd
Мастер
 
Аватар для dsd
 
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений
(для 1,836 пользователей)
Ответ: Странное.

Ты считаешь в реалтайм коэффициенты той или другой текстуры, по нормалям и высоте?
Я считаю:
//кос угла между нормалью и вертикалью
float degcos=dot(norm,float3(0.0f,1.0f,0.0f));
Чем ближе к 1 тем значит горизонтальней поверхность. Плюс разделение по высоте.

Мока, сходи в лес, отойди от опушки вглубь метров на писят хотяб.
И присмотрись внимательней к первой и последней картинкам якобы опровергающим мои слова. А третья это не лес. Лес это когда деревья сверху касаются ветвями.
(Offline)
 
Ответить с цитированием
Старый 14.11.2011, 20:44   #242
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Ответ: Странное.

Сообщение от dsd Посмотреть сообщение
Мока, сходи в лес, отойди от опушки вглубь метров на писят хотяб.
Я вырос в деревне, с дикими лесами вдали от города.
Также в Великобританских (Wales, Scotland, England) и Французских (Север и немного юг) лесах был.

Сообщение от dsd Посмотреть сообщение
И присмотрись внимательней к первой и третей картинкам якобы опровергающим мои слова. А вторая это не лес. Лес это когда деревья сверху касаются ветвями.
Уху, мелкие растения по твоему не являются травой? Ты их никоим образом мешами не сможешь нормально замутить, тебе придётся юзать текстуру с травой, либо будет выглядеть очень голо - текстура с землёй, с редко напичканными кустиками 10-20 сантиметровых пучков травы?

Это всё относиться к траве. И говоря про лесную траву, я имел именно землю с гниющей древесиной и и травой, а не такой как в поле или в парке.
(Offline)
 
Ответить с цитированием
Старый 14.11.2011, 20:47   #243
dsd
Мастер
 
Аватар для dsd
 
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений
(для 1,836 пользователей)
Ответ: Странное.

Ок, ты меня победил Но в лес сходи все же :D, только поглубже, там трава бывает только ранней весной, пока листва не отрастет.
(Offline)
 
Ответить с цитированием
Старый 14.11.2011, 20:53   #244
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Ответ: Странное.

Сообщение от dsd Посмотреть сообщение
Ок, ты меня победил Но в лес сходи все же :D, только поглубже, там трава бывает только ранней весной, пока листва не отрастет.
Ну совсем в глуши, где солнце не пробивается - да. И то не везде, а частями.
Вот в деревне у меня, есть сосновая роща, так там ни травинки радиусом на 300 метров где-то. Т.к. сосны очень высокие, у них даже ниже серидины по высоте веток нету, т.к. там света тоже нет.

Но такой лес - специфика. А если у тебя горная поверхность, то там будут и просветы, и полянки, и опушечки, и трава и земля, очень разнообразно будет.
(Offline)
 
Ответить с цитированием
Старый 14.11.2011, 21:20   #245
dsd
Мастер
 
Аватар для dsd
 
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений
(для 1,836 пользователей)
Ответ: Странное.

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

адрес близарда или бесезды не предлагать
(Offline)
 
Ответить с цитированием
Старый 14.11.2011, 21:51   #246
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Ответ: Странное.

Сообщение от dsd Посмотреть сообщение
Мока, не подскажешь где можно опытных усердных рабов наловить? А?

адрес близарда или бесезды не предлагать
А это ты метко подметил. Но с качественным редактором, можно посадить хотя бы одного человека, и он будет деревца, камушки и травку рассаживать, и будут все довольны.
(Offline)
 
Ответить с цитированием
Старый 15.11.2011, 01:39   #247
dsd
Мастер
 
Аватар для dsd
 
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений
(для 1,836 пользователей)
Ответ: Странное.


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


я походу перестал деградировать в кодинге, я терь мутирую
void land::sewmesh(){
//фаза первая сшиваю меш ближний со средним.
for(int j=0;j<number;j++){

//***********************************************************************************
    
for(int i=0;i<=resolution-4;i=i+4){
        
float val0=surf->quad[strip[0][j][0][i]]->v00.pos.y;
        
float val1=surf->quad[strip[0][j][0][i+3]]->v01.pos.y;
                
// квад 0
        
surf->quad[strip[0][j][0][i]]->v00.changeheight(val0);
        
surf->quad[strip[0][j][0][i]]->v01.changeheight(0.75*val0+0.25*val1);
                
// квад 1
        
surf->quad[strip[0][j][0][i+1]]->v00.changeheight(0.75*val0+0.25*val1);
        
surf->quad[strip[0][j][0][i+1]]->v01.changeheight(0.5*val0+0.5*val1);
                
// квад 2
        
surf->quad[strip[0][j][0][i+2]]->v00.changeheight(0.5*val0+0.5*val1);
        
surf->quad[strip[0][j][0][i+2]]->v01.changeheight(0.25*val0+0.75*val1);
                
// квад 3
        
surf->quad[strip[0][j][0][i+3]]->v00.changeheight(0.25*val0+0.75*val1);
        
surf->quad[strip[0][j][0][i+3]]->v01.changeheight(val1);
//************************************************************************************
//***********************************************************************************

        
val0=surf->quad[strip[number-1][j][resolution-1][i]]->v10.pos.y;
        
val1=surf->quad[strip[number-1][j][resolution-1][i+3]]->v11.pos.y;
                
// квад 0
        
surf->quad[strip[number-1][j][resolution-1][i]]->v10.changeheight(val0);
        
surf->quad[strip[number-1][j][resolution-1][i]]->v11.changeheight(0.75*val0+0.25*val1);
                
// квад 1
        
surf->quad[strip[number-1][j][resolution-1][i+1]]->v10.changeheight(0.75*val0+0.25*val1);
        
surf->quad[strip[number-1][j][resolution-1][i+1]]->v11.changeheight(0.5*val0+0.5*val1);
                
// квад 2
        
surf->quad[strip[number-1][j][resolution-1][i+2]]->v10.changeheight(0.5*val0+0.5*val1);
        
surf->quad[strip[number-1][j][resolution-1][i+2]]->v11.changeheight(0.25*val0+0.75*val1);
                
// квад 3
        
surf->quad[strip[number-1][j][resolution-1][i+3]]->v10.changeheight(0.25*val0+0.75*val1);
        
surf->quad[strip[number-1][j][resolution-1][i+3]]->v11.changeheight(val1);
//************************************************************************************
//***********************************************************************************

        
val0=surf->quad[strip[j][0][i][0]]->v00.pos.y;
        
val1=surf->quad[strip[j][0][i+3][0]]->v10.pos.y;
                
// квад 0
        
surf->quad[strip[j][0][i][0]]->v00.changeheight(val0);
        
surf->quad[strip[j][0][i][0]]->v10.changeheight(0.75*val0+0.25*val1);
                
// квад 1
        
surf->quad[strip[j][0][i+1][0]]->v00.changeheight(0.75*val0+0.25*val1);
        
surf->quad[strip[j][0][i+1][0]]->v10.changeheight(0.5*val0+0.5*val1);
                
// квад 2
        
surf->quad[strip[j][0][i+2][0]]->v00.changeheight(0.5*val0+0.5*val1);
        
surf->quad[strip[j][0][i+2][0]]->v10.changeheight(0.25*val0+0.75*val1);
                
// квад 3
        
surf->quad[strip[j][0][i+3][0]]->v00.changeheight(0.25*val0+0.75*val1);
        
surf->quad[strip[j][0][i+3][0]]->v10.changeheight(val1);
//************************************************************************************
//***********************************************************************************

        
val0=surf->quad[strip[j][number-1][i][resolution-1]]->v01.pos.y;
        
val1=surf->quad[strip[j][number-1][i+3][resolution-1]]->v11.pos.y;
                
// квад 0
        
surf->quad[strip[j][number-1][i][resolution-1]]->v01.changeheight(val0);
        
surf->quad[strip[j][number-1][i][resolution-1]]->v11.changeheight(0.75*val0+0.25*val1);
                
// квад 1
        
surf->quad[strip[j][number-1][i+1][resolution-1]]->v01.changeheight(0.75*val0+0.25*val1);
        
surf->quad[strip[j][number-1][i+1][resolution-1]]->v11.changeheight(0.5*val0+0.5*val1);
                
// квад 2
        
surf->quad[strip[j][number-1][i+2][resolution-1]]->v01.changeheight(0.5*val0+0.5*val1);
        
surf->quad[strip[j][number-1][i+2][resolution-1]]->v11.changeheight(0.25*val0+0.75*val1);
                
// квад 3
        
surf->quad[strip[j][number-1][i+3][resolution-1]]->v01.changeheight(0.25*val0+0.75*val1);
        
surf->quad[strip[j][number-1][i+3][resolution-1]]->v11.changeheight(val1);
//************************************************************************************

//фаза два выравнивание внутренних точек меша

//внешний ряд
//***********************************************************************************
                // квад 0
        
surf->quad[strip[1][j][0][i]]->v00.changeheight(surf->quad[strip[1][j][0][i]]->v00.pos.y);
        
surf->quad[strip[1][j][0][i]]->v01.changeheight(surf->quad[strip[1][j][0][i]]->v01.pos.y);
                
// квад 1
        
surf->quad[strip[1][j][0][i+1]]->v00.changeheight(surf->quad[strip[1][j][0][i+1]]->v00.pos.y);
        
surf->quad[strip[1][j][0][i+1]]->v01.changeheight(surf->quad[strip[1][j][0][i+1]]->v01.pos.y);
                
// квад 2
        
surf->quad[strip[1][j][0][i+2]]->v00.changeheight(surf->quad[strip[1][j][0][i+2]]->v00.pos.y);
        
surf->quad[strip[1][j][0][i+2]]->v01.changeheight(surf->quad[strip[1][j][0][i+2]]->v01.pos.y);
                
// квад 3
        
surf->quad[strip[1][j][0][i+3]]->v00.changeheight(surf->quad[strip[1][j][0][i+3]]->v00.pos.y);
        
surf->quad[strip[1][j][0][i+3]]->v01.changeheight(surf->quad[strip[1][j][0][i+3]]->v01.pos.y);
//************************************************************************************
//***********************************************************************************

                // квад 0
        
surf->quad[strip[number-2][j][resolution-1][i]]->v10.changeheight(surf->quad[strip[number-2][j][resolution-1][i]]->v10.pos.y);
        
surf->quad[strip[number-2][j][resolution-1][i]]->v11.changeheight(surf->quad[strip[number-2][j][resolution-1][i]]->v11.pos.y);
                
// квад 1
        
surf->quad[strip[number-2][j][resolution-1][i+1]]->v10.changeheight(surf->quad[strip[number-2][j][resolution-1][i+1]]->v10.pos.y);
        
surf->quad[strip[number-2][j][resolution-1][i+1]]->v11.changeheight(surf->quad[strip[number-2][j][resolution-1][i+1]]->v11.pos.y);
                
// квад 2
        
surf->quad[strip[number-2][j][resolution-1][i+2]]->v10.changeheight(surf->quad[strip[number-2][j][resolution-1][i+2]]->v10.pos.y);
        
surf->quad[strip[number-2][j][resolution-1][i+2]]->v11.changeheight(surf->quad[strip[number-2][j][resolution-1][i+2]]->v11.pos.y);
                
// квад 3
        
surf->quad[strip[number-2][j][resolution-1][i+3]]->v10.changeheight(surf->quad[strip[number-2][j][resolution-1][i+3]]->v10.pos.y);
        
surf->quad[strip[number-2][j][resolution-1][i+3]]->v11.changeheight(surf->quad[strip[number-2][j][resolution-1][i+3]]->v11.pos.y);
//************************************************************************************
//***********************************************************************************

                // квад 0
        
surf->quad[strip[j][1][i][0]]->v00.changeheight(surf->quad[strip[j][1][i][0]]->v00.pos.y);
        
surf->quad[strip[j][1][i][0]]->v10.changeheight(surf->quad[strip[j][1][i][0]]->v10.pos.y);
                
// квад 1
        
surf->quad[strip[j][1][i+1][0]]->v00.changeheight(surf->quad[strip[j][1][i+1][0]]->v00.pos.y);
        
surf->quad[strip[j][1][i+1][0]]->v10.changeheight(surf->quad[strip[j][1][i+1][0]]->v10.pos.y);
                
// квад 2
        
surf->quad[strip[j][1][i+2][0]]->v00.changeheight(surf->quad[strip[j][1][i+2][0]]->v00.pos.y);
        
surf->quad[strip[j][1][i+2][0]]->v10.changeheight(surf->quad[strip[j][1][i+2][0]]->v10.pos.y);
                
// квад 3
        
surf->quad[strip[j][1][i+3][0]]->v00.changeheight(surf->quad[strip[j][1][i+3][0]]->v00.pos.y);
        
surf->quad[strip[j][1][i+3][0]]->v10.changeheight(surf->quad[strip[j][1][i+3][0]]->v10.pos.y);
//************************************************************************************
//***********************************************************************************

                // квад 0
        
surf->quad[strip[j][number-2][i][resolution-1]]->v01.changeheight(surf->quad[strip[j][number-2][i][resolution-1]]->v01.pos.y);
        
surf->quad[strip[j][number-2][i][resolution-1]]->v11.changeheight(surf->quad[strip[j][number-2][i][resolution-1]]->v11.pos.y);
                
// квад 1
        
surf->quad[strip[j][number-2][i+1][resolution-1]]->v01.changeheight(surf->quad[strip[j][number-2][i+1][resolution-1]]->v01.pos.y);
        
surf->quad[strip[j][number-2][i+1][resolution-1]]->v11.changeheight(surf->quad[strip[j][number-2][i+1][resolution-1]]->v11.pos.y);
                
// квад 2
        
surf->quad[strip[j][number-2][i+2][resolution-1]]->v01.changeheight(surf->quad[strip[j][number-2][i+2][resolution-1]]->v01.pos.y);
        
surf->quad[strip[j][number-2][i+2][resolution-1]]->v11.changeheight(surf->quad[strip[j][number-2][i+2][resolution-1]]->v11.pos.y);
                
// квад 3
        
surf->quad[strip[j][number-2][i+3][resolution-1]]->v01.changeheight(surf->quad[strip[j][number-2][i+3][resolution-1]]->v01.pos.y);
        
surf->quad[strip[j][number-2][i+3][resolution-1]]->v11.changeheight(surf->quad[strip[j][number-2][i+3][resolution-1]]->v11.pos.y);}
//************************************************************************************
}




Сообщение от MoKa Посмотреть сообщение
Но с качественным редактором, можно посадить хотя бы одного человека, и он будет деревца, камушки и травку рассаживать, и будут все довольны.
А кто будет зарплату платить такому человеку? Ведь без денег работать согласится только полное и бесперспективное чмо, которому тем не менее потребуется рабочее место. Тем более редактор писать. Это не кошерно. Только код и максимум константы в ини файле
(Offline)
 
Ответить с цитированием
Старый 15.11.2011, 14:54   #248
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Ответ: Странное.

Сообщение от dsd Посмотреть сообщение
А кто будет зарплату платить такому человеку? Ведь без денег работать согласится только полное и бесперспективное чмо, которому тем не менее потребуется рабочее место. Тем более редактор писать. Это не кошерно. Только код и максимум константы в ини файле
Есть такие, и будут сидеть и делать. Главное заинтриговать, и заинтересовать. На том же гд.ру, часто появляются молодые парни, начинающие моделеры, даёшь им редактор, план работ, и он будет пахать. Редактор важно, т.к. им нада это дело в движке наблюдать - это сильно мотивирует.

По поводу кода, что-то снова чувство что это дело можно было хорошенько сократить циклами.

С нормалями что-то странное. Кстати, если правильно обработать, и определить по какой лучше диагонали сгибать два триангла в кваде, то можно правильно подобрать чтобы этих не красивостей с нормалями не было.
(Offline)
 
Ответить с цитированием
Старый 16.11.2011, 00:04   #249
dsd
Мастер
 
Аватар для dsd
 
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений
(для 1,836 пользователей)
Ответ: Странное.

Я не верю в голый энтузиазм.

Я почему то считаю, что один цикл и восемь выполняются разное время, и один выполнится быстрей.

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

Или еще лучше, смотреть перепад высот между точками на диагоналях и пускать диагональ по максимальному перепаду.
Кстати я пытался нормаль считать по всем точкам вокруг, но разницы от четырех не было, наверно нужно просто циклом сглаживать разницу между нормалями и все станет ок.
(Offline)
 
Ответить с цитированием
Старый 17.11.2011, 23:23   #250
pozitiffcat
Мастер
 
Аватар для pozitiffcat
 
Регистрация: 09.05.2010
Адрес: Самара
Сообщений: 1,083
Написано 254 полезных сообщений
(для 533 пользователей)
Ответ: Странное.

А расскажите теорию такого шейдера, чтобы рисовать на поверхности. Как у dsd. Сам хочу написать
вот скачал я шейдер который написал dsd но нихера в нем не понял. можт есть че почитать на эту тему?
(Offline)
 
Ответить с цитированием
Старый 18.11.2011, 00:31   #251
dsd
Мастер
 
Аватар для dsd
 
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений
(для 1,836 пользователей)
Ответ: Странное.


Перепилил... ммм... ядро. Необъяснимым образом оно стало быстрей и красивей и генерирует теперь более правдоподобную форму О_о.


А че там не понятного то?
Смотри:
Первое я сделал текстуру. В этой текстуре 4 ряда и четыре колонки.
Ряды это текущая местность по высоте, а столбцы отображают деградацию текстуры от уклона, ведь чем больше уклон тем "хуже" выглядит поверхность.

Теперь по самому шейдеру.

1. В вертексном дополнительно передается мировой игрек не умноженный ни на че, это тот же игрек что и в хорсе.
2. В пиксельном происходит первичный анализ этой высоты для выбора строки в текстуре. Далее выбранная строка передается в функцию которая анализируя отклонение вектора нормали поверхности от вертикали определяет столбец текстуры.
Это если в кратце.

Но так на границах слоев, как по нормалям так и по высотом наблюдаются очень четкие и уродские швы. То мой шейдер производит смешивание сначала слоев по нормалям, а затем и по высотам.

Если все еще не понятно, то пость кусок моего шейдера, а я детально скажу, что в том куске происходит.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Reizel (18.11.2011)
Старый 18.11.2011, 00:36   #252
pozitiffcat
Мастер
 
Аватар для pozitiffcat
 
Регистрация: 09.05.2010
Адрес: Самара
Сообщений: 1,083
Написано 254 полезных сообщений
(для 533 пользователей)
Ответ: Странное.

с эти ясно.. как получается отобразить какойто кусок текстуры полностью вот не понятно... ведь если плоскость у которой высота например равна 1, то я хочу рисовать текстуру травы смешивая с текстурой земли... мне получается нужно еще както считать UVW координаты текстуры
(Offline)
 
Ответить с цитированием
Старый 18.11.2011, 00:40   #253
dsd
Мастер
 
Аватар для dsd
 
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений
(для 1,836 пользователей)
Ответ: Странное.

Ну дополнительно нужно и меш в хорсе подготовить. Надо назначить всем точкам окрашиваемого меша текстурные координаты u=worldx v=worldz
В шейдере потом надо найти дробную часть от этих координат и поделить на четыре(по числу моих столбцов) получатся текстурные координаты в пределах лоскутка.
(Offline)
 
Ответить с цитированием
Старый 18.11.2011, 17:14   #254
dsd
Мастер
 
Аватар для dsd
 
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений
(для 1,836 пользователей)
Ответ: Странное.


Встроенные тени в хорсе круты неимоверно. Я так понял это теневые объемы. Но блин это не под мое кол-во полигонов.

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

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

Вот допустим для рендера с позиции света, я отрубаю нахрен все шейдеры и текстуры кроме тех, что с прозрачностью. Создаю

xCreateDSS (1024,1024 ) ;
Handle shadowmap=xCreateTexture(1024,1024,256)

Потом делаю рендер. В DSS, я так понимаю, появляется мой буфер глубины с позиции света. Теперь что бы прописать его в текстуру я должен типа как постэффектом пройтись, где уже в текстуру буду писать значение глубины буфера ?

Или наложить на все объекты шейдер который в цвет запишет расстояние от света до пикселей?
А?
(Offline)
 
Ответить с цитированием
Старый 18.11.2011, 17:26   #255
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Ответ: Странное.

нет. это не теневые объемы. чтобы в текстуру записать глубину с позиции источника света - надо рендерить мир с позиции источника света. текстура должна быть подходящей. 32F например. ну или можно как то хитро собирать в обычную. и распаковывать обратно.

Или наложить на все объекты шейдер который в цвет запишет расстояние от света до пикселей?
да. хотя есть специальные depth текстуры. в них можно просто рендерить. хотя ето ближе к ффп.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
dsd (18.11.2011)
Ответ


Опции темы

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

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


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


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