![]() |
Ответ: Странное.
А ведь не так уж и чудовищно :) По-моему на планеты из споры смахивает.
![]() |
Ответ: Странное.
Только как понимаю сама "планета" рендерится как сфера, а не как ландшафт на сфере?
|
Ответ: Странное.
Я не понял, что ты спросил.
У меня есть сфера с относительно равномерно разбросанными по поверхности вершинами. Для каждой точки её координаты есть вектор от центра сферы к этой точке. В текстурных координатах я храню индексы этой точки в массиве в котором карта высот. Карта высот заданна в диапазоне (0,1). Я устанавливаю уровень 0 на карте высот равным 0.25, все значения меньшие это ниже уровня моря. Дальше я вычисляю такое значение: val=1+scale*(massive[u][v]-0.25); где scale это в долях единицы отношение радиуса к высоте ландшафта на сфере. Потом координаты точки я умножаю на val. Profit... Это верхний уровень моего генератора ландшафта, нижний будет сложней. Итоговая поверхность как я планирую будет из 128*256*256*256 полигонов из которых видимыми будет 256*256*10. В смысле каждый полигон этой сферы будет дополнительно преобразовываться в искривленную плоскость 256х256 или 128х128 если таки будут артефакты из-за ограничения кол-ва индексов. |
Ответ: Странное.
Почитай: http://vterrain.org/LOD/spherical.html
http://www.zib.de/clasen/download/Sp...Electronic.pdf Суть в том, что хороший ландшафт, это не статичный набор вершин и трианглов, а динамично адаптируемый, под положение и обзор камеры и детализацию на уровне, чтобы уменьшить количество трианглов, и иметь возможность рисовать большие просторы. В случае с планетами, то тут используется немного иной подход. Вот когда ты отлетаешь от планеты, ты видишь минимум деталей, планета почти как сфера, когда подлетаешь ближе, там где камера, нужно отрисовывать более детальный ландшафт, это называется LOD (Level of Detail). Я про то что у тебя твоя планета, подойдёт только для полётов вокруг, или не далеко из атмосферы, т.к. если смотреть ближе, то детализация будет весьма низкой, что не будет "приятно" выглядеть.. |
Ответ: Странное.
Мока, этой сферы на самом деле не будет, только массив 2н х н, я сделал сферой чтобы увидеть то в массиве или не то. Так как результат похож на планету, значит генерация исходных данных происходит корректным образом. А как я собираюсь сделать эти милиарды треугольников не слишком вислыми, я писал выше. А уровень детализации выставляется вообще легко, у меня генератор выдает одинаковую карту высот для любого кол-ва элементов в карте. То есть я в любой момент без особых проблем могу изменить детализацию, изменив в программе всего одно число.
|
Ответ: Странное.
Можно на скрины поглядеть?
|
Ответ: Странное.
Пока нет, может через пару недель или позже появится что-нить рабочее или хотя бы не падающее, может вообще не появится.
|
Ответ: Странное.
Генератор камней с разной поверхностью полусфер.
на пробел сделать новый камень, [v] &[b] изменить детализацию меша. |
Ответ: Странное.
![]() Когда-то в раннем детстве мне на глаза попадалась диаграмма соответствия цветов основного и отраженного света, толи наоборот приятное глазу цветовое соотношение. Мож у кого есть чо достойное почитать по этой теме, желательно на русском языке. |
Ответ: Странное.
А xCountVertices() сильно ресурсоемкая операция или оно просто читает где-то сохраненое кол-во вертексов для сюрфэйса?
Ну и по классам вопрос: 1000 строк для класса это нормально или следует избегать? |
Ответ: Странное.
Насчёт класса, не нормально, т.к. обычно он должен выполнять только конкретные задачи, если в нём реализовано много разных задач, то это дело нужно разбить на более мелкие.
|
Ответ: Странное.
в нем одна кооонкретная задача :) а уж сколько памяти он отожрет на один объект, мммм...
|
Ответ: Странное.
Какая задача, опиши?
|
Ответ: Странное.
Ландшафт :D, может сегодня к ночи сочиню кой-чо :)
|
Ответ: Странное.
Не могу представить класс ландшафта на 1000 строк..
|
Ответ: Странное.
Написал какую-то адовую херню, которая отжирает примерно 70 мб памяти, на генерацию позиции уходит 40 мс, вроде. Вроде даже происходит все как планировал, почти.За исключением синхронизации обновления ландшафта от движений камеры. Если память будет уходить такими темпами то мое приложение будет требовать как минимум гиг свободной оперативки :)) На встроенном видео наверно уже сейчас фпс близок к критическому уровню:)
|
Ответ: Странное.
В чём прикол тут? Ландшафт генерируется снова и снова?
Если использовать потоки, то будет практически без каких либо лагов. |
Ответ: Странное.
Ландшафт в каждую большую клетку генерится один и тот же, то есть в дальнейшем мне надо будет сохранять не мир, а то что юзер накликает :)
зы: я больше не люблю массивы и ручное выделение памяти |
Ответ: Странное.
![]() Нечто отдаленно напоминающее ландшафт с дальним и ближним планом. У кого сколько фпс? А то у меня появилось ощущение, что так не делают потому что это не по детски жрет ресурсы с посредственным результатом. ![]() ![]() |
Ответ: Странное.
Как мышкой крутиться в твоих приложениях? А то тупо летать по осям с фиксированным поворотом очень тупо.
|
Ответ: Странное.
Если удерживвать среднюю кнопку мыши появится мауслук.
|
Ответ: Странное.
48-50 фпс. Дерганья при подгрузке ландшафта.
|
Ответ: Странное.
Ты пытаешься изобрести LoD ландшафт извратными путями. Это делается на более низком уровне (DX), лучше не трать на подобное время, либо перебирайся на GAPI и тогда уже разрабатывай на самом деле серьёзные вещи.
|
Ответ: Странное.
Цитата:
|
Ответ: Странное.
Это к тому, что если ты хочешь писать на ксорсе, пиши на нём, но то что ты делаешь, не совсем относится к ксорсу, такое можно делать на чём угодно, толку правда от этого мало. Кроме как разработки самой системы ландшафта и подгрузки используя потоки, но как уже сказал, для этого нужен более низкий доступ к GAPI.
Просто, я не совсем понимаю чем ты занимаешь, это чисто опыт и удовольствие в экспериментах и изучение самого языка, либо это попытка реализовать что-то конкретное? Если второе, то в таком случае, ты это делаешь очень извращённо и не весьма продуктивно, это как пить из бочки и ли забивать гвозди ложкой. |
Ответ: Странное.
Цитата:
|
Ответ: Странное.
Цитата:
Вообще я на примере этого пытался научиться использовать классы и вроде как понял, ну кроме ссылок и двоеточий. Плюс в башке более менее выкристализовался алгоритм как получить такой ландшафт. Сейчас я на каждое смещение генерирую данные для всего ландшафта и все пицот тыщ вершин деформирую и обновляю нормали xUpdateN(), что есть плохо, а последние два пункта так и вовсе прискорбно. Если сочинить алгоритм способный смещать данные на одну строку, то быстродействие вырастет радикально, а разрешение ландшафта в (2048х128)^2 пикселей это ведь круто. |
Ответ: Странное.
Цитата:
кстати если тебя заинтересовала картинка номер два, то подобное без извращений генерируется легко и в течении пары десятков миллисекунд |
Ответ: Странное.
Как лучше?
1) for(int i=0;i<1000000;i++) { double z=somedata[i]; anotherdata[i]=z*0.125*i; } 2) double z; for(int i=0;i<1000000;i++) { z=somedata[i]; anotherdata[i]=z*0.125*i; } 3) double *z; for(int i=0;i<1000000;i++) { z=somedata[i]; anotherdata[i]=z*0.125*i; } Или разницы нет? |
Ответ: Странное.
Между первым и вторым в плане производительности разницы нет (если использовать нормальный компилятор), т.к. на стеке локальные переменные выделяются в области видимости функции. С точки зрения качества кода, то переменную лучше объявлять как можно ближе к тому месту, где она будет использоваться (ну, не превращая все в кашу, конечно).
Между первыми двумя и третим разница существенная (мне кажется, ты таки еще не разобрался в указателях). ЗЫ. Вообще это все можно было бы загуглить. А еще лучше проверить самому. Например, глянуть ассемблерный листинг того, что компилятор наделал. |
Ответ: Странное.
Мне таки с каждым днем кажется, что я в с++ все меньше и меньше понимаю :)
С указателями я более-менее уловил уже что куда, вроде. т.к. такая структура данных у меня обрабатывается нормально и выдает то, что и планировалось изначально. Меня просто интересовал следующий момент: Если у меня есть цикл с хреновой тучей итераций, то в каждой итерации объявлять переменные служащие для хранения промежуточных данных это то же самое, что объявить их до цикла или нет(в плане производительности). |
Ответ: Странное.
Цитата:
|
Ответ: Странное.
Цитата:
int _tmain(int argc, _TCHAR* argv[]) { int somedata[100]; int anotherdata[100]; double* z=(double*)malloc(sizeof(double));//определить размер данных for(int i=0;i<100;i++) { *z=somedata[i];//юзать разыменовывая anotherdata[i]=(*z)*0.125f*i; } return 0; } что бы исключить случайного приведения float к int юзается не так 0.125, а так 0.125f |
Ответ: Странное.
Таки да глупость смозорозил под 3.
Но разыменовывание уж очень какое-то ректальное тайнство из серии: "а я всеравно прав, #$%^@ #$%@^ компилятор!!!" :) чет я не могу вообразить себе ситуацию, когда это потребутся, у меня все-таки в конце цепочки указателей последний указывает на обычную переменную. Цитата:
|
Ответ: Странное.
Цитата:
Код:
class mycl |
Ответ: Странное.
Цитата:
Код:
#include "stdafx.h" |
Ответ: Странное.
Цитата:
Цитата:
|
Ответ: Странное.
Цитата:
|
Ответ: Странное.
Цитата:
xMod(yk,resolution) - зачем использовать хорсовские функции для вычисления модуля? yk % resolution же. по поводу демки - работает. когда генерируется очередной кусок - есть небольшое подвисание. это на i7 с 8 гигабайтами оперативки. МоКа правильно говорит - хочешь писать низкоуровневые вещи - пиши их на низкоуровневом АПИ. тем ни менее - сам алгоритм работает. все нормально, без косяков. |
Ответ: Странное.
то что ты делаешь в коде вообще не понятно, отложи свою программу на пол годика и вернись к ней, ты что нибудь разберешь? Пиши код понятный, как будто ты пишешь его для когото!
double ****strip; как юзать структуры, если ты это хочешь... Код:
struct Vertex |
Ответ: Странное.
Holydel, у меня на всю программу один объект. Командой new я пользуюсь толь ко в конструкторе. А потом как карточный шулер тасую нижние уровни указателей. Если бы я пользовал нью каждый раз вместо перетасовки уровней оно бы каждую секунду по 15 мб памяти отжирало бы, в следствии чего и извращаюсь
:-) Старую версию я бросил и пишу новую в ней подвисаний нет, но она сложней раз в десять структурно, но вроде быстрей и дает над данными много контроля без усилий. К зиме или лету допишу, наверно. Главное что оно кол-во элементов теперь меняет легко и непринужденно это не блитцевский мод. Оно у меня контролирует индексы массивов, что бы они в чужую память не лезли и в минуса не уходили. |
Ответ: Странное.
Pozitiffcat, через полгода вспомню, даже через год. Но на данном этапе разработки поего 'продукта' смысла комментить особого нет ибо итоговый алгоритм от первоначального отличается порой радикально. Вот допишу если тогда комментов накидаю :-)
|
Ответ: Странное.
Цитата:
З.Ы. я делаю огромнейшие проекты на c++ для фирмы, у меня ниразу небыло необходимости что либо объявить так как делаешь ты |
Ответ: Странное.
Цитата:
|
Ответ: Странное.
если ты объявишь класс, то единожды выделенная память будет использоваться снова и снова
Код:
struct Spicture |
Ответ: Странное.
![]() Очередные 2+2=4 :) Я таки сделал ландшафт частицами, в демке 400 частиц из поверхностей 32х32 клеток, в нормальной версии должно быть такого разрешения 36 частиц. Оказывается для хрома есть нечто такое же как андроид маркет https://chrome.google.com/webstore?h...rce=chrome-ntp |
Ответ: Странное.
|
Ответ: Странное.
выглядит клево
|
Ответ: Странное.
Ага, может в итоге и текстуры будут не нужны, какой-нить нерегулярный шум в шейдере намутить, или травы натыкать еще одной системой частиц.
|
Ответ: Странное.
смущают резкие прямые возвышенности похожие на разделения между квадратными кусками терейна.
|
Ответ: Странное.
Главное, что в черне заработало, а дальше уже надо коэффициенты подбирать для шумогенераторов, чтобы совпадали. Счас нижний давит сильней чем верхний просто.
|
Ответ: Странное.
|
Ответ: Странное.
Цитата:
http://outerra.com/ |
Ответ: Странное.
Почитал чутка их форум.
-Wow! Your engine looking so nice. I'm trying to create something same. But I can't solve some problems. How did you do that? - We just use our amazing fractal algoritms. A bit math, a bit coding and so is on. - Oukey... -Fuck yeahh... Как вот так у них на форуме дело обстоит :-) |
Ответ: Странное.
И правильно. А то задают вопросы: "Как сделать игру". Как ещё ответить, если только не: "Ну нужно желание, немножко воспользоваться смекалкой, и да, не забыть про кодинг".
Правильно ответили.. |
Ответ: Странное.
Да у них весь раздел про технологии это колонка тонкого английского юмора.
Причем спрашивают люди отмедитировавшие на эту тему пару месяцев, а в ответ им несут такую ересь, што пестец. |
Ответ: Странное.
Накурился. Походу то что мне хочется это нетривиальная задача, надо сочинять нечто типа растеризации только в четырехугольнике и по парабалам или корню от исходных данных. Кстати шум перлина должен замечательно получится шейдером ибо механизм вычисления координаты в текстурах шума разных октав и размероа я сочинил, а растеризация реализована вроде железом.
|
Ответ: Странное.
Цитата:
|
Ответ: Странное.
Цитата:
![]() Нагавнокодил таки простейший шум перлина с простым растеризатором. Говнокод это когда знаешь как сделать быстрей, но сделаешь так только за деньги? !!текстура 2^size x 2^size не надо туда ставить больших значений!! PHP код:
|
Ответ: Странное.
|
Сравнение двух алгоритмов
![]() слева перлин справа даймонд размер текстур идентичный 512 х 512 на пробел новые текстуры. Результат какого алгоритма красивше? Зы. Почитал статьи как делать шум перлина на гамдеве. Я походу какой-то адовый кодило, ни мат обоснования, ни возведений в хрензнаеткакую степень с корнем. никахих функций напоминающих гаусинный блюр. Короче это не шум перлина, хоть и выглядит также :D |
Ответ: Странное.
Цитата:
cout << "mystr" << intvar << floatvar << endl; |
Ответ: Сравнение двух алгоритмов
Цитата:
|
Часовой пояс GMT +4, время: 22:30. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot