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

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

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

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

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

Ну ради такого дела завел таки аську: 615638833.
Почему нельзя на форум выложить? Такие тайные технологий что за ними пентагон охотится?
(Offline)
 
Ответить с цитированием
Старый 23.10.2011, 17:45   #167
dsd
Мастер
 
Аватар для dsd
 
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений
(для 1,836 пользователей)
Ответ: Странное.


Кажется я сделал велосипед


Придумал генерацию лайтмапов на основе хейгтмапы.

1. Узнаем с какой стороны солнце.
2. Создаем массив из интегер с разрешением в 4 раза больше того массива в котором хранятся данные высот вершин. у меня это (8х32)х(8х32).
3. Узнаем направление источника света в виде 2д вектора. Строим еще один массив с разрешением равным количеству вершин. Далее смещаясь от угла куда первыми приходят лучи от света проверяем затенит ли вершина соседнюю (минимальный перепад высот который будет затенен вычисляется легко, т.к. дельтаикс и дельтаигрек между вершинами постоянны. Заполняем массив значениями. На свету эта вершина или нет.
4. Для мест где соседствуют затененные с освещенными вершины строим более подробные кусочки лайтмапы 4х4.
5. Учусь писать изображение не врайтпикселями, а сразу числами в жопег или бмп.
6. Немного извращений в пиксельном шейдере. И будет быстрая лайтмапа за время исполнения на цпу ~ 1 мс или меньше.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Reizel (23.10.2011)
Старый 23.10.2011, 18:46   #168
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений
(для 6,051 пользователей)
Ответ: Странное.

делал нечто подобное, только шейдером, имея карту высот на видюхе и рендеря лайтмап за несколько кадров кусками. шейдер выглдяит вот так:
	float2 TexCoords = IN.ScreenTC / MapSize;
	float h = tex2D(heighttex,TexCoords).r;
	float height = h * heightMult;
	float3 pos = float3(TexCoords.x,height,TexCoords.y);

	float3 end = saturate(pos - LightDir*(1.0f/MapSize)*128); 

	float3 step = (end - pos)/128.0f;


	float p = 0;

	for(int i=0;i<128;i++)
	{
		pos += step;

		p = tex2D(heighttex,pos.xz).r * heightMult;
		if (pos.y < p) return float4(0,1-(step.y*i)/heightMult,0,1);  //0;// Intersection!//
	}

	return 1;// (no intersections)
суть в том что от каждого обрабатываемого пикселя ведётся луч в направлении солнца, и если за требуемое кол-во итераций, луч врезается в хейтмап, значит пиксель затенён.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
dsd (23.10.2011)
Старый 23.10.2011, 18:58   #169
Reizel
Задрот
 
Аватар для Reizel
 
Регистрация: 24.07.2009
Адрес: Ивановская область, г. Кинешма
Сообщений: 1,574
Написано 407 полезных сообщений
(для 863 пользователей)
Ответ: Странное.

Сообщение от dsd Посмотреть сообщение
Почему нельзя на форум выложить? Такие тайные технологий что за ними пентагон охотится?
Можно, даже нужно, и даже выложу, но я смотрю, что у тебя здорово получается делать генератор, потому имею желание общаться не только на форуме)
(Offline)
 
Ответить с цитированием
Старый 24.10.2011, 05:13   #170
dsd
Мастер
 
Аватар для dsd
 
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений
(для 1,836 пользователей)
Не, там такой говнокод что переделывать уже хочется.

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

Решил сочинять класс вода. Имея в виду перегрузку операторов и используя наследование и виртуальные функции. Это будет эпичная хрень на девиантных методах программирования

//  вектор в тридэ
class float3 {
    public:
    float x;
    float y;
    float z;
};
//вершина
class vert_data {
    public:
    int index;
    float3 position;
    float3 normal;
    /*
    обновление нормали.
    есть четыре вектора (1,0,val00-val10) (0,1,val00-val01) (-1,0,val00-(val-10)) (0,1,val00-(val0-1))
    попарно векторное умножение даст четыре нормали сумма/4 результирующая нормаль.
    одно вычисление валидно для четырех квадов
    */
};
//квад
class quad {
    public:
    Handle *surf;
    vert_data v00;
    vert_data v01;
    vert_data v10;
    vert_data v11;
    int index;
};

//менеджер квадов
class manager {
    public:
    //массив под поверхности
    Handle *surf;
    // массив квадов
    quad ****sys;
    //размер элемента группы квадов.
    int size;
};

class water {
    public:
    manager sea;
    manager river;
    manager lake;
};
Вот такой мне представляется структура... эмм... комплекса классов для разных типов воды.

Сообщение от impersonalis Посмотреть сообщение
неужели есть люди, которые думают, что изучат ЯП, прочитав учебник? Разумеется, надо развиваться и самостоятельно. Однако, благодаря квази-студентам, которые не в состоянии написать диплом, девальвация образования и поддерживается. У меня много примеров студентов, которые работали (в т.ч. и по специальности) и учились (без кавычек). ЧЯДНТ?
Честно говоря, теперь, узнав что автор уже человек с высшим образованием, технарь, не может осилить относительно простую теорию (в которой сам заинтересован - а такая мотивация сдвигает горы), я испытываю батхёрт мне приходит в голову анекдот (изначально он был с полит.подтекстом, но не нашёл оригинала).
http://www.detskie-anekdoty.ru/detsk...po lgoda.html
dsd, умерьте спесь: если б вы были семи пядей во лбу и действительно ценили своё время - вы бы бросили учёбу курсе на первом-втором. А так - гордится тут абсолютно нечем.
Прошу извинить, если обидел. Это сугубо моё мнение. Практика показала, что, разумеется, есть и другие стратегии поведения, но они сопровождаются и другими решениями (типа того, что я привёл: бывает да - ВУЗ не тот выбрал, со специальностью ошибся, недооценил свой интеллект). Думаю, нам всё же пора вернуться к теме обсуждений, а не доказывать друг другу свою крутость.
Наверно в Москве строителей готовят в технических вузах. Я учился в технологическом. Математика там преподавалась одну пару в неделю первые два курса, с одним практическим занятием раз в две недели. А всякие сопроматы к математике имеют такое же отношение как и хоровое пение. На технических специальностях помоему дают больше математики за один первый месяц, причем в том числе по часам . Так что у строителей дело с математикой обстоит может и лучше чем у бухов но едва-едва.

Придумал прикольную защиту от кряканья триальных версий. Делается обычный таймер по которому приложение вырубается.

создается второй таймер, который сработает через время: таймер1+RND(10,240);

Создаем меш, парентим его к камере, создаем поверхность 30-40 тыщ квадов перед камерой, так чтобы они перекрывали обзор, а координаты у вершин образовывающих квад совпадали. Ставим этому мешу xEntityAlpha mesh,0.01. xHideEntity mesh
если таймер2 дотикал до своего времени xShowEntity mesh.
Fatality.
Драйвер видюхи в панике. И даже если после восстановления все ок, это ттттттттрмооооооозззззззззиииииииитттттт адски, а почему не понятно и не видно

Какие-то проблемы, ок вышлите нам екзешник, ага значит проблемы нет?

Your use of this software is subject to the terms of the
agreement located at http://go.microsoft.com/fwlink/?link...08&clcid=0x409.

If you do not agree to these terms, you may not use the software.
Это типа можно использовать даже если я не согласен с условиями их лицензии?

Последний раз редактировалось dsd, 13.12.2011 в 22:59.
(Offline)
 
Ответить с цитированием
Старый 24.10.2011, 20:53   #171
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Ответ: Странное.

Использование данного софта Вами, покрывается условиями соглашения, по ссылке: ...

Если вы не согласны с условиями соглашения, вы не должны использовать данный софт.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
dsd (25.10.2011)
Старый 25.10.2011, 00:27   #172
dsd
Мастер
 
Аватар для dsd
 
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений
(для 1,836 пользователей)
Ответ: Странное.


Маленькое вуду со снегом и чем-то вроде контрастности зависящей от текстуры.

float4 color=diffuse * lit * lightColor+diffuse*ambient;
color=1.1*pow(color,1.7);
if(input.position2>=75.0f) {color=1.1*pow(color,4);}
return color;}
Можно забацать очень психоделический шейдер если еще и кубамапу как-нибудь не адекватно использовать и блики от отраженного света.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
St_AnGer (25.10.2011)
Старый 25.10.2011, 00:32   #173
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Ответ: Странное.

выглядит круто
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Эти 3 пользователя(ей) сказали Спасибо impersonalis за это полезное сообщение:
dsd (25.10.2011), Reizel (25.10.2011), St_AnGer (25.10.2011)
Старый 25.10.2011, 03:16   #174
Reizel
Задрот
 
Аватар для Reizel
 
Регистрация: 24.07.2009
Адрес: Ивановская область, г. Кинешма
Сообщений: 1,574
Написано 407 полезных сообщений
(для 863 пользователей)
Ответ: Странное.

Дерево

Суть в чем: есть главная рекурсивная функция BuildTree, принимающая параметром небольшую структурку:
struct Trunc{
        float x,y,z;                //Координаты
        float nx,ny,nz;             //Нормаль епта)
        float fSectionSize;         //Размер одной секции (длина)
        float fSectionRadius;       //Радиус секции, стартовый           
        float fSectionFinishRadius; //КОгда кончать строить хуйту

        int iMesh,iSurface;         //Геометрия, сурфейс
        int iVertexCount;           //Точность
        int iSectionCount;          //Количество секций, блеать
        int iLeafSurface;           //Сурфейс листвы
    };
По нему она строит циклично ствол + искривляет его чуть чуть, и в каждом стыке запускает еще пару-тройку рекурсивных стволов (чуть -чуть изменяя структуру входную)

(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо Reizel за это полезное сообщение:
Mr_F_ (25.10.2011), Randomize (25.10.2011)
Старый 25.10.2011, 11:00   #175
dsd
Мастер
 
Аватар для dsd
 
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений
(для 1,836 пользователей)
Ответ: Странное.



Function BuildTree()
gh=xLoadMesh("mesh/tree.b3d")
xEntityTexture gh,treetex
base=xCopyEntity (gh)
xScaleEntity base,2,1,2

MakeItCone(gh)



ph=xCreateCube()
xPositionMesh ph,0,1,0
xEntityAlpha ph,0.1
CreateChilds(ph,1,1)



For d=0 To xCountChildren(ph)-1
	child=xGetChild(ph,d)
	CreateChilds(child,0.6,0.5)
Next


For d=0 To xCountChildren(ph)-1
	child=xGetChild(ph,d)
		For z=0 To xCountChildren(child)-1
			childl2=xGetChild(child,z)
			CreateChilds(childl2,0.8,0.25)
		Next
Next

For d=0 To xCountChildren(ph)-1
	child=xGetChild(ph,d)
		For z=0 To xCountChildren(child)-1
			childl2=xGetChild(child,z)
				For x=0 To xCountChildren(childl2)-1
					childl3=xGetChild(childl2,x)
						CreateChilds(childl3,1.2,0.125)
				Next
		Next
Next
End Function

Function CreateChilds(child,zscale#,level#)
qbranches=Rand(1,4)
sdegree=Rand(0,359)
For i=0 To qbranches

pc=xCopyEntity(gh,child)
xPositionEntity pc,0,xMeshHeight(child)-0.01,0
xScaleEntity pc,level,zscale+Rnd(-0.1,0.1),level
xRotateEntity pc,40+Rnd(-15,15),sdegree+i*(360/(qbranches+1))+Rnd(-25,25),0 
Next
End Function
Но это глупо все-таки. По-моему надо замутить покореженный ствол с минимумом толстых корявых веток. На конце каждой ветки сделать типа моих камней только с низкой детализацией, и натыкать рандомно штук 10-20 двухсторонних квадов для имитации отдельных мелких веток. И все одной поверхностью. Ствол можно думать из сетки деформированной шумом перлина и свернутой в цилиндр, которую еще несколькими синусами вдоль игрека изогнуть и в переменно от высоты отскэйлить. То же и для веток. Должно получиться дешево и сердито.

У тебя кстати получилось похоже на алгоритм в котором есть несколько точек куда ветки должны более охотно расти.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Reizel (25.10.2011)
Старый 25.10.2011, 14:09   #176
Reizel
Задрот
 
Аватар для Reizel
 
Регистрация: 24.07.2009
Адрес: Ивановская область, г. Кинешма
Сообщений: 1,574
Написано 407 полезных сообщений
(для 863 пользователей)
Ответ: Странное.

Твое дерево круче смотрится, но оно состоит из готовой модели??
мое делается с нуля, вот код

а насчет рандомного ствола - проще сделать окружность, слегка помятую:


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

Нет. Там 12 полигонов свернутых в трубочку и раставленными в тридэмаксе тектсурными координатами. Раньше для меня было проблемой сгенерировать такой меш. А деревья одинаковые. У твоего со ствлом все гуд, лучше чем у меня, но вот листья приклеены неправильно. Их надо клейть ближе к концам веток, на толстых частях ветвей у нормального дерева листьев нет, если это не тополь. И если ты присмотришься к самим листьям у нормального дерева, то увидешь, что листья у них примерно одного размера и нормали поверхности ВСЕХ листьев смотрят в одном направлении, на источник освещения. Впринципе последний левел ветвей должен быть плоским и стараться лежать в плоскости примерно паралельной плоскости с нормалью (0,1,0) плюс минус 15 градусов. Вот такие у меня дополнеия к эль сустем.

кстати можно не заморачиваться со слиянием всех элементов дерева в одну поверхность я уже практически дописал менеджер квадов, который можно будет легко превратить в менеджер трианглов каковым и обернуть все полигоны сингосюрфицируемого дерева. А потом провести слияние вершин с одинаковыми нормалями позициями и текстурными координатами. Единственно надо пытаться уложиться по полигонам в ~15к .
(Offline)
 
Ответить с цитированием
Старый 25.10.2011, 16:14   #178
Reizel
Задрот
 
Аватар для Reizel
 
Регистрация: 24.07.2009
Адрес: Ивановская область, г. Кинешма
Сообщений: 1,574
Написано 407 полезных сообщений
(для 863 пользователей)
Ответ: Странное.

Вот с листвой то у меня и были основные проблемы))
Не знал как их клеить. Да и тормозное оно какое-то, из за тексы с альфаканалом ФПС падает в 2 раза. Провал
(Offline)
 
Ответить с цитированием
Старый 25.10.2011, 16:49   #179
dsd
Мастер
 
Аватар для dsd
 
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений
(для 1,836 пользователей)
Ответ: Странное.

. Ну вот поэтому я и хочу основную часть листвы имитировать несколькими мятыми облачками.
Кстати твоему дереву не от чего тормозить, разве что ты каждый листик сделал отдельным сюрфейсом, тогда да. Мое не тормозило на встроеном intel gma 945. При этом еще и листики все поварачивались к камере на каждый кадр.

у тебя фэйл по элементам образующим твое дерево, а по само алгоритму пока все нормально, наверно. Так пару раз бубном стукнуть и полсотни строк накидать, что бы листья синглсюрфейсом стали.
(Offline)
 
Ответить с цитированием
Старый 25.10.2011, 17:24   #180
Reizel
Задрот
 
Аватар для Reizel
 
Регистрация: 24.07.2009
Адрес: Ивановская область, г. Кинешма
Сообщений: 1,574
Написано 407 полезных сообщений
(для 863 пользователей)
Ответ: Странное.

Листья синглсюрфейс
struct Trunc{
        float x,y,z;                //Координаты
        float nx,ny,nz;             //Нормаль епта)
        float fSectionSize;         //Размер одной секции (длина)
        float fSectionRadius;       //Радиус секции, стартовый            :     size
        float fSectionFinishRadius; //КОгда кончать строить хуйту

        int iMesh,iSurface;         //Геометрия, сурфейс
        int iVertexCount;           //Точность
        int iSectionCount;          //Количество секций, блеать
        int iLeafSurface;           //Сурфейс листвы
    };
ПС может я не так понимаю значение термина "синглсюрфейс" ?
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

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

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


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


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