Как стать автором
Обновить

Комментарии 15

Может хватит уже использовать статический конвеер? Этот метод рендеринга устарел уже лет как 10. За это время способы рендеринга уже пару раз менялись: glBegin/glEnd+FFP — VAO+FFP — VBO+shaders. Может хотя бы в 2013 будем использовать VBO?
Если вы внимательно прочитаете начиная с фразы «Сразу оговорюсь...» то поймете что я делал OpenGL часть по туториалам.
Дайте пример правильного кода. Буду благодарен.
Читал я внимательно. Мой комментарий стоило рассматривать как совет. Посмотрите в интернете примеры реализации рендеринга с помощью VBO, там все просто.
P.S. Минусы аргументируйте пожалуйста.
О, спасибо. Интересно.
Про GPU я начал думать, но пока не придумал как переделать код под него.
Ну там относительно просто все. Нужно читать из текстуры предыдущее состояние, сам шаг для клетки считать в шейдере, и результат писать в текстуру. По ссылке есть весь код для WebGL, на десктопе оно не сильно отличается.
Спасибо за интересную статью!
Единственное возможно стоит картинки перенести в хабрасторадж — а то уже не открываются.

> Код, связанный с OpenGL я в тексте статьи опущу, т.к. он достаточно простой.

Возможно не стоило опускать а добавить спойлером — это тоже интересно — залез в исходники ради них :).
Хабрастор не загружает картинки. Похоже локальные политики безопасности на работе. Как получится — перенесу обязательно.
Очень много mutable. Это не принято в функциональных языках. А в многих местах оно вообще не несёт смысла — почему mutable объявлен Size? Он меняется во время работы программы?

Position: (int * int) — а зачем? Чтобы держать в голове, что первый элемент это X, а второй — Y-координата? Или читабельности добавляют конструкции вида fst cell.Position?

Объекты Random создаются алгоритмом самостоятельно, это нехорошо. Желательно пользоваться всегда одним и тем же объектом, который передаётся ему «снаружи» — это сделает результат повторяемым.
В принципе согласен. Есть что дорабатывать.
Не меняя саму логику вычислений уложился в 991 символ. Но это уже не читабельно :)
let anc p = 
    let nc (x,y) = [|(x-1,y-1);(x-1,y);(x-1,y+1);(x,y-1);(x,y+1);(x+1,y-1);(x+1,y);(x+1,y+1);|]
    nc p |> Array.map (fun p -> (match p with|(x,_) when x<0->Size-1|(x,_) when x>=Size->0|(x,_)->x),(match p with|(_,y) when y<0->Size-1|(_,y)when y>=Size->0|(_,y)->y))
let ec f c = f |> Array.exists (fun af -> c = af)
let pf f = anc >> Array.partition(fun c -> ec field c)
let pFr f = pf f >> snd
let pEx f = pf f >> fst
let rnd = new System.Random() 
let gc=(rnd.Next(Size), rnd.Next(Size)) 
let gcs = let rec lst (l:list<int*int>)=match l.Length with|c when c=CC->l|_->match gc with|c when not(ec(l|>List.toArray)c)->lst(c::l)|_->lst l
          List.Empty |> lst |> List.toArray 
let i f =
    let fn=f|>PSeq.collect(fun c->pFr f c)|>Seq.distinct 
    let b=fn|>Seq.filter (fun c ->pEx f c|>Array.length=3)|>Seq.map(fun c->gc)
    let a=f|> PSeq.filter(fun c -> match pEx f c|>Array.length with |n when n<=3&&n>=2->true|_->false)
    a|>Seq.append b|>Seq.toArray
Не совсем в тему — а вам действительно комфортно видеть красное на синем?
Не знаю, может это у меня цветовосприятие такое, но аж плохо становится при виде такого сочетания.
Честно говоря комфортно, но допускаю что может зависеть от настроек монитора.
Может он конь? :)
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Изменить настройки темы

Истории