Текущее время: Сб 25 янв 2025 23:43

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 567 ]  На страницу Пред.  1 ... 10, 11, 12, 13, 14, 15, 16 ... 19  След.
Автор Сообщение
 Сообщение Ср 9 май 2012 0:30
Профиль  
Участник
Аватара пользователя
Сообщения: 33
Откуда: Череповец
Зарегистрирован: Пн 23 апр 2012 18:07
watcover3396 писал(а):
2 smt005
Просто у меня реестр забитый, тормозит и т.д. И у меня эта винда стоит уже 2 года...

Так почисти реестр, всего делов-то)


 Сообщение Ср 9 май 2012 0:43
Профиль  
Механоид 3 поколения
Аватара пользователя
Сообщения: 490
Откуда: Украина,Донецкая об.
Зарегистрирован: Чт 4 авг 2011 15:54
2 vvrusanov
Та забейте, просто перекину все нужные проги и проекты на флешку, и переставлю винду.


 Сообщение Ср 9 май 2012 1:45
Профиль  
Разработчик идей
Аватара пользователя
Сообщения: 4577
Откуда: Минск, Беларусь
Зарегистрирован: Ср 14 ноя 2007 19:00
smt005 писал(а):
Можно передать с помощью статического VBO вершины(которые будут храниться в видюхе) и карту высот (массив в качестве атрибута) и Z изменять с помощью вершинного шейдера.
Чувак, да ты гений!!! :supercool: Пойду котелок кипятить. :twisted:

Добавлено спустя 18 минут 30 секунд:

Угар! smt005, ты - гений!!! Респект и уважуха, чувак!!!!
Зырь, что надумал: сохраняем дисплей-лист, отрисовывающий сетку (x,y координаты) и вызываем его при рендере любого куска карты. Карту высот храним в однокомпонентной не-мип-мапнутой текстуре. При изменении карты часть текстуры апдэйтаем (glTexSubImage2D как раз в тему). В вершинном шейдере генерим автоматом текстурные координаты (тупо берём x,y координаты вершин до трансформации), а z-координаты берём из текстуры (texture2DLod). Впридачу ещё и нормали вычисляем налету!!! :supercool: Да это ж прорыв, блин!!! Элегантней решения просто не придумаешь! У меня эйфория. Надо напицца. :twisted:

_________________
Сообщество креативных механоидов:
aim-fans.ru


 Сообщение Чт 10 май 2012 2:31
Профиль  
Разработчик идей
Аватара пользователя
Сообщения: 4577
Откуда: Минск, Беларусь
Зарегистрирован: Ср 14 ноя 2007 19:00
И как всегда облом. Хрен текстуру полапаешь в вершинном шейдере. Профильтровал. Оказалось, текстуры лишь некоторых форматов доступны в вершинном шейдере, плюс не так давно эту возможность дали людям вообще - не все видюхи умеють. У меня обращение к текстуре в вершинном шейдере (считывание высоты вершины как цвет соответствующей точки в текстуре) приводит к тому, что карта тупо не рисуецца ваще. Работает как обращение к неопределённым данным.
Только начиная с OpenGL3.0 можно на сий метод надеяццо. Ой как впадлу видюху покупать... Но идея рендерить ландшафт из карты высот в виде текстуры - не ноу-хау совсем - уже практикуют.

_________________
Сообщество креативных механоидов:
aim-fans.ru


 Сообщение Чт 10 май 2012 10:42
Профиль  
Трёхмерный
Аватара пользователя
Сообщения: 3622
Зарегистрирован: Пн 17 янв 2005 19:23
Передавай данные не текстурой а атрибутом ( attribute vec3 Map; ).

_________________
https://sites.google.com/site/intelligencecells
http://www.youtube.com/user/IntelligenceCells


 Сообщение Чт 10 май 2012 14:38
Профиль  
Разработчик идей
Аватара пользователя
Сообщения: 4577
Откуда: Минск, Беларусь
Зарегистрирован: Ср 14 ноя 2007 19:00
Тогда я не смогу знать высоты соседних вершин, и из-за этого не смогу вычислять нормали в вершинном шейдере. Либо придётся передавать кучу данных, комбинируя их на CPU, что не перспективно и неэлегантно. А так - полюбуйся на вершинный шейдер:

uniform sampler2D Texture0;
uniform float scale;
varying vec3 Normal;
void main(void)
{
vec2 texCoord = gl_Vertex.xy*0.0009765625;
float M = texture2DLod( Texture0, texCoord, 0.0 ).r * scale;
float T = texture2DLod( Texture0, vec2(texCoord.x,texCoord.y+0.0009765625), 0.0 ).r * scale;
float B = texture2DLod( Texture0, vec2(texCoord.x,texCoord.y-0.0009765625), 0.0 ).r * scale;
float R = texture2DLod( Texture0, vec2(texCoord.x+0.0009765625,texCoord.y), 0.0 ).r * scale;
float L = texture2DLod( Texture0, vec2(texCoord.x-0.0009765625,texCoord.y), 0.0 ).r * scale;
gl_Position = gl_ModelViewProjectionMatrix * vec4(gl_Vertex.x, M, gl_Vertex.y, 1.0);
Normal = gl_NormalMatrix * normalize(vec3(R-L,-2.0,T-B));
}

Надо уже современной видюхой обзавестись, чтоб OpenGL4.0 поддерживала, а то постоянно во что-то упираюсь. Во встроенной графике Intel Core i5 нет доступа к текстурам в вершинном шейдере, и я приплыл.
Может, ещё и геометрические и тесселяционные шейдеры надумаеццо освоить когда-нить зачем-нить.

Добавлено спустя 13 минут 10 секунд:

Ну так вот с таким шейдером никто ни на что не жалуется, однако карты я не вижу.
Но если между строчек:

float L = texture2DLod( Texture0, vec2(texCoord.x-0.0009765625,texCoord.y), 0.0 ).r * scale;
gl_Position = gl_ModelViewProjectionMatrix * vec4(gl_Vertex.x, M, gl_Vertex.y, 1.0);

я вставляю конкретное значение M, вот так:

float L = texture2DLod( Texture0, vec2(texCoord.x-0.0009765625,texCoord.y), 0.0 ).r * scale;
M=0.0;
gl_Position = gl_ModelViewProjectionMatrix * vec4(gl_Vertex.x, M, gl_Vertex.y, 1.0);

, то хотя бы поверхность карты появляется (нормаль всё равно цену на дрова показывает). Это указывает на то, что данные, вытягиваемые из текстуры неопределены, и, соответственно, все последующие вычисления, эти данные использующие, не происходят. Поскольку доступа к текстуре нет, то высота средней точки M не может быть вычислена, и, соответственно, по цепочке, выходные данные вершинного шейдера (gl_Position) также не вычисляются, а значит и треуг не рендерится. Но когда я вставляю строчку "M=0.0;" череда невычислений на ней и заканчивается. И я вижу гладкий квадрат.
Вот таким вот раком всё происходит, если текстура имеет формат, с которым не может работать вершинный шейдер. А тот формат, который для него пригоден (однокомпонентная float текстура) - не поддерживается вообще! Маразм, не так ли?
Так что начну поиски видюхи без заморочек.

_________________
Сообщество креативных механоидов:
aim-fans.ru


 Сообщение Чт 10 май 2012 22:55
Профиль  
Трёхмерный
Аватара пользователя
Сообщения: 3622
Зарегистрирован: Пн 17 янв 2005 19:23
Шаман писал(а):
Надо уже современной видюхой обзавестись
А как же проги работающие на любых компах? Помнится ты "болел" этим.

Вообще, вроде можно сделать рельеф в шейдере на обычных картах. Давно на какомто форуме кто-то писал что рендерит рельеф с помошью шейдеров. Но не помню даже то что он сам это делал или какойто движёк использовал.

Нее, как-то можно.
Есть прога RenderMonkey, на ней можно тренероваться в написании шейдеров. Так там тангент и бинормаль можно передать с помощью атрибута. Т.е. если в проге используется VBO то значит нужный тангент передаваемого массива соответствует нужной вершине.
Если используется glBegin() и glEnd() что маловероятно, тогда облом.

_________________
https://sites.google.com/site/intelligencecells
http://www.youtube.com/user/IntelligenceCells


 Сообщение Пт 11 май 2012 1:33
Профиль  
Разработчик идей
Аватара пользователя
Сообщения: 4577
Откуда: Минск, Беларусь
Зарегистрирован: Ср 14 ноя 2007 19:00
smt005 писал(а):
А как же проги работающие на любых компах? Помнится ты "болел" этим.
А, так я выздоровел уже! :yes:
smt005 писал(а):
Вообще, вроде можно сделать рельеф в шейдере на обычных картах.
Если обычной картой делать, то и шейдеры не нужны. Составил массивы, рассчитал нормали, указал поинтеры на массивы, составил дисплейный список из стрипов трегольников, и готово - рисуй сколько угодно, не грузя ни проц, ни шину и не убивая фпс. А как насчёт динамически-изменяемого рельефа, который чуть ли не каждый кадр полнится новыми воронками от взрывов? Каждый кадр перерассчитывать нормали, обновлять буффера и таскать обновлённые вершины (float4) и нормали (float3) - это 28 байт данных на вершину. А если картой высот? Это 4 (float) или вообще 2 (short int) байта на вершину (нормали вычисляются в шейдере, x,z координаты передаются необновляемым массивом вершин из дисплейного списка, торчащего статично в видеопамяти). Причём обновлять можно лишь изменённый регион карты, т.е. не всю текстуру обновлять, а лишь её часть. Почти никаких вычислений на CPU, минимальная нагрузка на шину данных. Минус - нужен OpenGL 3.1, требующий от вершинного шейдера возможности работать с текстурами. Прорыв, я те отвечаю! Ищу видюху, короче. :twisted:

_________________
Сообщество креативных механоидов:
aim-fans.ru


 Сообщение Сб 12 май 2012 20:15
Профиль  
Разработчик идей
Аватара пользователя
Сообщения: 4577
Откуда: Минск, Беларусь
Зарегистрирован: Ср 14 ноя 2007 19:00
Слава нВидии и её знаменитой поддержке всех на свете расширений и форматов, а особенно доступу вершинных шейдеров к текстурам 16+битных форматов! Благодаря этому мне удалось, наконец отренедерить напрямую карту высот размером 1024х1024 вершины:
ИзображениеИзображение
А вот так вторая картинка выглядела бы, если бы поверхность рельефа была зеркальной:
Изображение
А вот ещё один ракурс, на котором заметна 256-битная дискретизация значений нормали на гладком рельефе (я ведь deferred shading применяю - сначала нормали записываются в текстуру на первом этапе, а затем используются для наложения света на втором этапе):
Изображение


В общем, как и задумывалось, карта высот рельефа загружается как текстура, а рендер карты сводится к подаче статичного неизменяемого буффера xy координат, сидящего в видеопамяти. Третья координата берётся шейдером из карты высот. Нормаль к каждой вершине вычисляется на основании высот 4-х соседних вершин прямо в шейдере.
Счастье мне! :teeth:

_________________
Сообщество креативных механоидов:
aim-fans.ru


 Сообщение Вс 13 май 2012 6:11
Профиль  
Механоид 5 поколения
Аватара пользователя
Сообщения: 1260
Откуда: island Syberia
Зарегистрирован: Ср 10 янв 2007 9:14
Ладно, вычислить получилось, даже отобразить. А как изменять сие прямо в игре?

_________________
_=S.A.L.K.E.R.=_
"Кто кого еще порвет" - сказала Тузику грелка, надутая до 10 атмосфер
"У нас большие леса. Они способны без остатка поглотить любое воинское формирование" (с)


 Сообщение Вс 13 май 2012 11:11
Профиль  
Разработчик идей
Аватара пользователя
Сообщения: 4577
Откуда: Минск, Беларусь
Зарегистрирован: Ср 14 ноя 2007 19:00
Карта высот (текстура в видеопамяти) имеет дупликат в основной памяти. Когда некоторый участок карты изменяется, текстура ландшафта в видеопамяти обновляется (перезагружается заново). Так происходит синхронизация карт. Чтобы не тягать по шине данных всю карту, можно перезагружать лишь изменённый кусок карты (где кратер возник) - квадратик можно обновить функцией glTexSubImage2D(...).
А можно поступить ещё рациональнее! Можно все вычисления делать на GPU вообще! Например, привязав карту ландшафта как один из выводных буфферов. Любой эффект (кратер, трещина) может быть представлен текстуркой, которая рисуется на карте рельефа посредством смешивания. Тут нужно профильтровать вопрос насчёт обрезания выводных данных шейдера - я слышал, что текстуры float-формата не приводятся насильно к диапазону [0...1], и я это продемонстрировал выше в картинках - там высоты гор от 0 до 20+, и плоских вершин не заметно, не так ли?
Осталось проверить рендер в текстуры float-формата. Надеюсь, обрезки опять же не будет. Тогда можно делать терраформинг на 100% на GPU, а также избавиться от этих артефактов с отражениями.

Добавлено спустя 57 секунд:

Ах, да... Всё это будет стоить юзерам OpenGL 3+. :angel:

Добавлено спустя 9 минут 39 секунд:

Насчёт текстуры во floating point формате, которым я воспользовался в примерах выше. Карта грузилась так:
GLuint TexName;
glGenTextures(1, &TexName);
glBindTexture(GL_TEXTURE_2D, TexName);
glTexParameteri(targetType, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(targetType, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexImage2D(GL_TEXTURE_2D, 0, GL_R32F, 1024, 1024, 0, GL_RED, GL_FLOAT, HeightsMap);

Добавлено спустя 1 час 9 минут 54 секунды:

Шаман писал(а):
Осталось проверить рендер в текстуры float-формата. Надеюсь, обрезки опять же не будет. Тогда можно делать терраформинг на 100% на GPU, а также избавиться от этих артефактов с отражениями.
Проверил - работает. Судя по литературе, не совсем все видюхи (OpenGL3.0) умеют рендерить во float - текстуры - некоторые ограничиваются HALF_FLOAT форматом, но так или иначе обрезки и приведения к диапазону [0...1] для floatовых текстур не делается в принципе.
Однако это всё не дёшево даётся - внутренний трафик видеопамяти огромен: каждый пиксель текстуры формата GL_RGBA32F занимет 128 бит памяти. И если на видюхе написано GDDR3 64 бита (как на моей), это значит, что чтение/запись каждого пиксела текстуры идёт за два цикла (а тактовая частота памяти намного меньше частоты чипа, которая помпезно рекламируется). Так что все эти развлечения так же дороги, как и попиксельные нормализации нормалей.

_________________
Сообщество креативных механоидов:
aim-fans.ru


 Сообщение Вс 13 май 2012 11:30
Профиль  
Трёхмерный
Аватара пользователя
Сообщения: 3622
Зарегистрирован: Пн 17 янв 2005 19:23
Шаман писал(а):
Чтобы не тягать по шине данных всю карту, можно перезагружать лишь изменённый кусок карты

Т.е. ты делишь текстуру на кусочки? Или можно передать в видюху часть текстуры?

_________________
https://sites.google.com/site/intelligencecells
http://www.youtube.com/user/IntelligenceCells


 Сообщение Вс 13 май 2012 18:45
Профиль  
Разработчик идей
Аватара пользователя
Сообщения: 4577
Откуда: Минск, Беларусь
Зарегистрирован: Ср 14 ноя 2007 19:00
smt005 писал(а):
Или можно передать в видюху часть текстуры?
Фэйспалм! Третий раз: знаком ли ты с этой доисторической функцией времён первых ГЛей:
glTexSubImage2D
Я ею никогда не пользовался, но судя по описанию, она перезаливает указанный регион текстуры (прямоугольный кусок). Т.е. эта функция похожа на glTexImage2D, но перезаливает не всю картинку, а лишь её часть.
Но опять же, я за терраформинг прямо на GPU, чтоб освободить CPU от работы с массивами, а шину данных - от бессмысленного трафика. Каждый должен заниматься своим делом. Терраформинг - конкретная геометрическая задача, включающая обработку большого массива данных, посему этим должен заниматься GPU.

_________________
Сообщество креативных механоидов:
aim-fans.ru


 Сообщение Вс 13 май 2012 18:56
Профиль  
Трёхмерный
Аватара пользователя
Сообщения: 3622
Зарегистрирован: Пн 17 янв 2005 19:23
Терраформинг, терраформинг, а о физике ты подумал?

_________________
https://sites.google.com/site/intelligencecells
http://www.youtube.com/user/IntelligenceCells


 Сообщение Вс 13 май 2012 20:49
Профиль  
Разработчик идей
Аватара пользователя
Сообщения: 4577
Откуда: Минск, Беларусь
Зарегистрирован: Ср 14 ноя 2007 19:00
Упс. :oops: Просвяти меня и ты - я PhysX не трогал ваще ещё. Что ему надо и в каком формате?

_________________
Сообщество креативных механоидов:
aim-fans.ru


 Сообщение Вс 13 май 2012 21:14
Профиль  
Трёхмерный
Аватара пользователя
Сообщения: 3622
Зарегистрирован: Пн 17 янв 2005 19:23
Проше говоря, твой метод не подойдёт и не спрашивай почему.

_________________
https://sites.google.com/site/intelligencecells
http://www.youtube.com/user/IntelligenceCells


 Сообщение Вс 13 май 2012 22:13
Профиль  
Разработчик идей
Аватара пользователя
Сообщения: 4577
Откуда: Минск, Беларусь
Зарегистрирован: Ср 14 ноя 2007 19:00
Эммм... ФизХ требует статичного буффера xyz координат? :roll:

Добавлено спустя 30 секунд:

В общем, ещё один гол в ворота самописной физики.

_________________
Сообщество креативных механоидов:
aim-fans.ru


 Сообщение Вс 13 май 2012 23:26
Профиль  
Трёхмерный
Аватара пользователя
Сообщения: 3622
Зарегистрирован: Пн 17 янв 2005 19:23
Цитата:
В общем, ещё один гол в ворота самописной физики.
:lol: :lol: :lol: :lol: :lol: :lol: :lol: :lol: :supercool:
И ещё один километр или скорее парссек до написания полноценного движка.
Спассибо, поржал.

Цитата:
Эммм... ФизХ требует статичного буффера xyz координат?
Я даже тебя не понял. Из примеров PhysX, там нет сетки, вершины могут быть где угодно и их изменение в пространстве тоже может быть любым. Можно моделировать металлические бочки, резину, ткань и т.д.

_________________
https://sites.google.com/site/intelligencecells
http://www.youtube.com/user/IntelligenceCells


 Сообщение Вс 13 май 2012 23:49
Профиль  
Разработчик идей
Аватара пользователя
Сообщения: 4577
Откуда: Минск, Беларусь
Зарегистрирован: Ср 14 ноя 2007 19:00
А я немного продвинул шейдеры рисования ландшафта - теперь вершинный шейдер может вычислять ещё и тангенту с битангентой. Для демонстрации я использовал 3 текстуры:
DiffuseMap - карта цвета (RGB) и прозрачность (A);
EmissionMap - карта эмиссии, т.е. самосвечения (RGB) - немножко лавы в трещинках добавляет; :teeth:
BumpMap - обычная плоская карта нормалей (RGB):
Изображение
Красиво, не правда ли? Но самое главное - всё вычисляется на GPU: нормали, тангенты и битангенты для каждой вершины вычисляются в вершинном шейдере на основании высот 4-х соседних вершин. Вот как выглядит вершинный шейдер:
Вершинный шейдер писал(а):
varying vec3 Normal;
varying vec3 Tangent;
varying vec3 Bitangent;
uniform sampler2D HeightMap;
void main(void)
{
vec2 c = gl_Vertex.xy*0.0009765625;
float M = texture2DLod( HeightMap, c, 0.0 ).r;
float T = texture2DLod( HeightMap, vec2(c.x,c.y+0.0009765625), 0.0 ).r;
float B = texture2DLod( HeightMap, vec2(c.x,c.y-0.0009765625), 0.0 ).r;
float R = texture2DLod( HeightMap, vec2(c.x+0.0009765625,c.y), 0.0 ).r;
float L = texture2DLod( HeightMap, vec2(c.x-0.0009765625,c.y), 0.0 ).r;
gl_Position = gl_ModelViewProjectionMatrix * vec4(gl_Vertex.x, M, gl_Vertex.y, 1.0);
Normal = normalize(gl_NormalMatrix * vec3(L-R,2.0,B-T));
Tangent = normalize(gl_NormalMatrix * vec3(2.0,R-L,0.0));
Bitangent = normalize(gl_NormalMatrix * vec3(0.0,T-B,2.0));
gl_TexCoord[0] = gl_Vertex;
}

Как видно из кода, на каждую вершину происходит 5 обращений к текстуре (карта высот) и 3 нормализации векторов.

_________________
Сообщество креативных механоидов:
aim-fans.ru


 Сообщение Пн 14 май 2012 0:38
Профиль  
Трёхмерный
Аватара пользователя
Сообщения: 3622
Зарегистрирован: Пн 17 янв 2005 19:23
Да, симпотичней.

_________________
https://sites.google.com/site/intelligencecells
http://www.youtube.com/user/IntelligenceCells


 Сообщение Вт 15 май 2012 1:36
Профиль  
Разработчик идей
Аватара пользователя
Сообщения: 4577
Откуда: Минск, Беларусь
Зарегистрирован: Ср 14 ноя 2007 19:00
Народ, помогите советом. Какая, по Вашему мнению, должна быть дальность видимости (в метрах) и какая детализация ландшафта (сколько метров между вершинами ландшафта)?
Километрик вдаль проглядывать достаточно будет? И размер ячейки сетки метр-на-метр не жирно ли?

_________________
Сообщество креативных механоидов:
aim-fans.ru


 Сообщение Вт 15 май 2012 2:34
Профиль  
Механоид 3 поколения
Аватара пользователя
Сообщения: 490
Откуда: Украина,Донецкая об.
Зарегистрирован: Чт 4 авг 2011 15:54
2 Шаман
Кажется километр будет многовато=)


 Сообщение Вт 15 май 2012 6:27
Профиль  
Разработчик идей
Аватара пользователя
Сообщения: 4577
Откуда: Минск, Беларусь
Зарегистрирован: Ср 14 ноя 2007 19:00
Ну так а 100м явно мало. Ну сколько?

Добавлено спустя 16 минут 17 секунд:

А пока тизер дам:
Изображение
Ностальгия по Сектору Вулканов. :teeth: Это я от недостатка маны играться начинаю с мелочами. Бибьясню конкретнее. В общем, все любят высокую детализацию текстур, чтоб уткнувшись вплотную мордой в поверхность не наблюдалась размытая каша. Однако чем выше детализация текстуры, тем больше памяти она занимет. Посему текстурировать квадратный километр карты с детализацией в микрометр не получится. Соответственно, мы берём относительно небольшую текстуру и отшлёпываем её на каждом квадратном метре карты. Так, уткнувшись мордой в землю мы имеем вполне приличный вид поверхности. Однако! Чем дальше мы отодвигаемся от поверхности, тем большую площадь ландшафта охватывает каждый пиксель экрана. В итоге, если мы взлетим достаточно высоко, каждый квадратный метр карты, на котором умещается наша высокодетализованная текстура, сольётся в один пиксель и каждый квадратик на карте станет одного цвета. Поверхность ландшафта, такая красивая сблизи, станет тупо-коричневой массой. Что же делать? Шаман знает ответ! :mrgreen: Взять несколько текстур (а можно одну и ту же) и накладывать их всех вместе с разным масштабом: одну текстуру накладывать на каждый квадратный метр карты, другую - на квадрат 10х10 метров, третью - на квадрат 100х100 метров и т.д. Результат наблюдаем на картинке выше.
Очевидно это очередной велосипед, но мне поф. :tongue:

Добавлено спустя 3 часа 16 минут 34 секунды:

Хм... Оптимизировал вывод рельефа по-максимуму: рисуется лишь та часть карты, что под камерой, красивым кружочком вокруг (камера двигается - рендеримая часть карты перемещается вместе с ней). Центр зоны определяется прямо в шейдере. Рисовка идёт без участия основной памяти и CPU - используется универсальный дисплей лист, рисующий рельеф полосками GL_TRIANGLE_STRIP и использующий один большой неизменяемый буффер вершин (x,y координаты только) безо всяких аттрибутов.
Так вот у меня детализация карты 1 метр, и я потестал разные дальности видимости - от 100 метров до 1000. Тормоза начинаются после 300 метров. В принципе, на вид вполне достаточно, ИМХО. Однако... Ну что такое 300 метров? Не поснайперить, не полюбоваться горизонтом. Нулевая видимость на расстоянии 300 метров (туманом же границу придётся ретушировать) - такого ж даже в городском смоге быть не может!
В принципе, идеальным решением была бы переменая детализация - вблизи вершины через каждый метр, а чем участок дальше от камеры, тем вершины реже. Но как такое замутить я представляю недостаточно чётко для реализации. Зато чётко вижу анусность в том, что при таком подходе объекты вдали могут проваливатсья под землю. :smile:
Другое решение - уменьшить детализацию. А чтобы треугольные изломы карты не бросались в глаза, особо рельефные места можно заретушировать объектами-декорациями.

_________________
Сообщество креативных механоидов:
aim-fans.ru


 Сообщение Вт 15 май 2012 10:04
Профиль  
Механоид 5 поколения
Аватара пользователя
Сообщения: 4676
Зарегистрирован: Вс 29 авг 2010 18:18
О, я где-то читал про эту тему, ну, про проблему детализации текстур. Ща, поищу.

_________________
GAMES ARE ONLY FUN IF THEY HURT A LITTLE BIT


 Сообщение Вт 15 май 2012 11:29
Профиль  
Трёхмерный
Аватара пользователя
Сообщения: 3622
Зарегистрирован: Пн 17 янв 2005 19:23
2 Шаман Разделяй текущую локацию на части, в центре высокая детализация, вдали низкая. 9 текстур. А так же используй теселяцию.
А ещё тебе надо решить проблему того как ты будеш текстурить разными текстурами, не может же вся локация покрыавться одной текстурой.
Для этой цели может пригодиться "мегатекстура".

_________________
https://sites.google.com/site/intelligencecells
http://www.youtube.com/user/IntelligenceCells


 Сообщение Вт 15 май 2012 13:30
Профиль  
Скриптизёр
Сообщения: 10646
Откуда: Мариуполь
Зарегистрирован: Пт 13 апр 2007 17:15
Издалека очень плохо выглядит, имхо. Вблизи хорошо.


 Сообщение Вт 15 май 2012 15:03
Профиль  
Разработчик идей
Аватара пользователя
Сообщения: 4577
Откуда: Минск, Беларусь
Зарегистрирован: Ср 14 ноя 2007 19:00
smt005 писал(а):
2 Шаман Разделяй текущую локацию на части, в центре высокая детализация, вдали низкая.
На части делить не буду - озарило меня по полной. Я буду рендерить кружок вокруг игрока, состоящий из радиально-расходящихся колец, каждое последующее из которых экспоненциально больше по ширине, но все содержат одинаковое количество треугов. Так ландшафт будет иметь одинаковую детализацию на любом расстоянии, и при этом огромнющую дальность видимости. Поскольку я использую карту высот в видеопамяти как текстуру, то вершины треугов в кольцах не обязаны попадать чётко на вершины сетки. Однако нужно будет составлять мипмапы для карты, чтобы дальние кольца, треуги которых охватывают площади десятков ячеек карты, брали усреднённое значение высоты из мипмапы соответствующего левела. Интересно, floatовые текстуры мипмапаются?

Добавлено спустя 2 минуты 50 секунд:

smt005 писал(а):
А так же используй теселяцию.
Ой, а что это такое и с чем это кушать? Мне казалось, что сие есть разбиение треугов на несколько.

Добавлено спустя 3 минуты 12 секунд:

smt005 писал(а):
А ещё тебе надо решить проблему того как ты будеш текстурить разными текстурами, не может же вся локация покрыавться одной текстурой.
Я уже писал об этом. Я планирую накладывать текстуры на отрисованный ландшафт зонами - как отметины на поверхность накладывать. Деферред шейдинг же, чо. Но это потом. Пока что я вожусь с отрисовкой самого ландшафта и использую одну текстуру просто чтоб не утомлять сознание моноцветным ландшафтом. :smile:

_________________
Сообщество креативных механоидов:
aim-fans.ru


 Сообщение Вт 15 май 2012 23:24
Профиль  
Трёхмерный
Аватара пользователя
Сообщения: 3622
Зарегистрирован: Пн 17 янв 2005 19:23
Krogoth писал(а):
Интересно, floatовые текстуры мипмапаются?
Вроде нет, но уточни перед использованием.
Krogoth писал(а):
Ой, а что это такое и с чем это кушать? Мне казалось, что сие есть разбиение треугов на несколько.

Да.

_________________
https://sites.google.com/site/intelligencecells
http://www.youtube.com/user/IntelligenceCells


 Сообщение Ср 16 май 2012 2:55
Профиль  
Разработчик идей
Аватара пользователя
Сообщения: 4577
Откуда: Минск, Беларусь
Зарегистрирован: Ср 14 ноя 2007 19:00
smt005 писал(а):
Вроде нет, но уточни перед использованием.
Всё-таки да. Это хорошо.

Добавлено спустя 26 секунд:

Ну что ж, будем попробовать колечки рисовать...

Добавлено спустя 2 часа 11 минут 3 секунды:

Шаман писал(а):
Интересно, floatовые текстуры мипмапаются?
Те, что шкалят за привычный диапазон [0...1] мипмапаются только функцией

void glGenerateMipmap(GLenum target);

ибо привычная старым чайникам gluBuild2DMipmaps обрезает все пикселы до диапазона [0...1].

Добавлено спустя 53 секунды:

glGenerateMipmap вошла в состав ядра лишь при OpenGL 3.

_________________
Сообщество креативных механоидов:
aim-fans.ru


 Сообщение Ср 16 май 2012 17:00
Профиль  
Механоид 5 поколения
Аватара пользователя
Сообщения: 1260
Откуда: island Syberia
Зарегистрирован: Ср 10 янв 2007 9:14
Кстати, о птичках. В 6 уроке от NeHe грузиться текстура силами glAUX. Пользоваться устаревшими и неразвивающимися библиотеками вроде как не стоит. Сегодня на работе причинил к проекту Textures.h версии 1.2. Выдает темный экран. Если закомментить загрузку, то все работает. Только текстуры нет.
Завтра собираюсь пересобрать объект по-другому - там много повторов, можно в отдельные методы выделить. Да и формат имеет смысл описать структурой и грузить сразу все, безо всяких fread/fseek. Просто открыл, загрузил и радоваться.
Кстати, имеет ли смысл отбросить реализацию openGL от мелкомягких? Если да, то где взять иную реализацию? И подойдут ли к ней либы от опять же мелкомягких?

_________________
_=S.A.L.K.E.R.=_
"Кто кого еще порвет" - сказала Тузику грелка, надутая до 10 атмосфер
"У нас большие леса. Они способны без остатка поглотить любое воинское формирование" (с)


Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 567 ]  На страницу Пред.  1 ... 10, 11, 12, 13, 14, 15, 16 ... 19  След.

Часовой пояс: UTC + 4 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB