Блоґ одного кібера

Історія хвороби контуженого інформаційним вибухом

Обломи – це досвід. (Проби пензля)

leave a comment »

І єдиний спосіб хоч чогось навчитись.

Облом перший:

Мій скрипт, що мав би не вносити одну і ту ж вершину в меш по кілька разів:

        def addvertex(self,a): 
                if a in self.vertexnumbers:
                        return self.vertexnumbers[a]
                else:
                        self.vertexnumbers[a]=self.vertexcount
                        self.vertexes.append(a)
                        self.vertexcount+=1
                        return self.vertexcount-1

Насправді нічого не робить:

vertexes: 139968
faces: 46656
average vertexes per face: 3.0

Облом другий:

Алгебраїчні фрактали не малюються полігонами! Вони попіксельно малюються трасуванням променів. І більшість художників активно використовують ресурси відеокарти. Щоб вийшов хоч трохи гарний фрактал цих полігонів потрібно мільйони (ну, якраз для мегапіксельної фотографії). Навіть якщо припустити що можна проводити обчислення на кластері, то все одно виходить меш, від якої мій комп’ютер падає в обморок. Власне так і сталось після трьох-чотирьох годин обчислень. Тому я тепер більше мільйона вокселів не роблю. І фігня виходить:

Але хоч щось. Принаймі в людей, що роблять приголомшливі кліпи з цим явно витрачають мінімум тиждень на рендеринг, і кілька років на навчання. Результати того ще й як варті:

Облом третій:

Який термін не придумай – він вже був придуманий до тебе. Я от тільки познайомився з тривимірним фракталом Мандельброта, і називав його булькою. А він виявляється насправді лампочка.

Але хоч суть вловив. Майже така ж проста як і в двовимірного:

z'=z^n +c (Для людей що не в захопленні від математики: Ця проста ітераційна формула задає нескінченний химерний світ, частину якого можна спостерігати в кліпі “Life is strange” вище.)

Замість n пишуть 8. В плоскому було 2. Оце і вся різниця. Ну, і звісно формула гіперкомлексного піднесення до степеня:

\langle x, y, z\rangle^n = r^n\langle\cos(n\theta)\cos(n\phi),\sin(n\theta)\cos(n\phi),\sin(n\phi)\rangle

де r = \sqrt{x^2+y^2+z^2} , \theta =\arctan(y/x), і \phi=\arctan(z/\sqrt{x^2+y^2})=\arcsin(z/r).

def eightspower(x,y,z):
        r=(x*x+y*y+z*z)**4
        theta=atan2(x,y)
        phi=atan2(sqrt(x*x+y*y),z)
        return r*cos(8*theta)*cos(8*phi),r*sin(8*theta)*cos(8*phi),r*sin(8*phi)

def mandelbulb(x,y,z):
        x2,y2,z2=x,y,z
        for i in range(5):
                if x2*x2+y2*y2+z2*z2 > 2:
                        return False
                new=eightspower(x2,y2,z2)
                x2=new[0]+x
                y2=new[1]+y
                z2=new[2]+z
        return True

Останній облом.

Вважаючи що малювати геометричні фрактали простіше, вирішив намалювати, скажімо так, “гору Коха” (по аналогії з кривою Коха).

Суть – берем правильний трикутник. В нього вписуємо вдвічі менший трикутник (ділимо його на чотири інші правильні трикутники). На центральному, як на основі будуємо правильний тетраедр. З тими трикутниками що залишились, і з гранями тетраедра робим те саме що з початковим трикутником. І так далі.

Вийшо отаке:

Гірський краєвид

Гірський краєвид

Але нутром чую, що воно якесь не те. В деяких місцях пірамідка вмнута всередину. І взагалі проекція її вершини на основу часто не лежить в центрі основи. Може проблеми з векторами? Прийшлось писати їх самому. Дивно що в Python немає такого вбудованого класу.

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

Але насамкінець ще трохи гарного:

Я глянув на ігровий движок Блендера. Чудесна річ, мушу вам сказати. Не знаю хто придумав що він складний для вивчення. Єдине що було для мене важким – імітувати середню кнопку миші на моєму тачпаді.

І вся гра зроблена суто тачпадом. Жодного рядка коду.

Advertisements

Written by bunyk

Травень 18, 2010 at 17:18

Залишити відповідь

Заповніть поля нижче або авторизуйтесь клікнувши по іконці

Лого WordPress.com

Ви коментуєте, використовуючи свій обліковий запис WordPress.com. Log Out / Змінити )

Twitter picture

Ви коментуєте, використовуючи свій обліковий запис Twitter. Log Out / Змінити )

Facebook photo

Ви коментуєте, використовуючи свій обліковий запис Facebook. Log Out / Змінити )

Google+ photo

Ви коментуєте, використовуючи свій обліковий запис Google+. Log Out / Змінити )

З’єднання з %s

%d блогерам подобається це: