Comments 15
Может хватит уже использовать статический конвеер? Этот метод рендеринга устарел уже лет как 10. За это время способы рендеринга уже пару раз менялись: glBegin/glEnd+FFP — VAO+FFP — VBO+shaders. Может хотя бы в 2013 будем использовать VBO?
Если вы внимательно прочитаете начиная с фразы «Сразу оговорюсь...» то поймете что я делал OpenGL часть по туториалам.
Дайте пример правильного кода. Буду благодарен.
Дайте пример правильного кода. Буду благодарен.
Тогда уже все на GPU считать.
jbryan.github.com/webgl-experiments/life.html
jbryan.github.com/webgl-experiments/life.html
О, спасибо. Интересно.
Про GPU я начал думать, но пока не придумал как переделать код под него.
Про GPU я начал думать, но пока не придумал как переделать код под него.
Спасибо за интересную статью!
Единственное возможно стоит картинки перенести в хабрасторадж — а то уже не открываются.
> Код, связанный с OpenGL я в тексте статьи опущу, т.к. он достаточно простой.
Возможно не стоило опускать а добавить спойлером — это тоже интересно — залез в исходники ради них :).
Единственное возможно стоит картинки перенести в хабрасторадж — а то уже не открываются.
> Код, связанный с OpenGL я в тексте статьи опущу, т.к. он достаточно простой.
Возможно не стоило опускать а добавить спойлером — это тоже интересно — залез в исходники ради них :).
Очень много
Объекты
mutable
. Это не принято в функциональных языках. А в многих местах оно вообще не несёт смысла — почему mutable
объявлен Size
? Он меняется во время работы программы?Position: (int * int)
— а зачем? Чтобы держать в голове, что первый элемент это X, а второй — Y-координата? Или читабельности добавляют конструкции вида fst cell.Position
?Объекты
Random
создаются алгоритмом самостоятельно, это нехорошо. Желательно пользоваться всегда одним и тем же объектом, который передаётся ему «снаружи» — это сделает результат повторяемым.Реализация логики игры на том же F# в 127 символов trelford.com/blog/post/140.aspx
Не меняя саму логику вычислений уложился в 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
Не совсем в тему — а вам действительно комфортно видеть красное на синем?
Не знаю, может это у меня цветовосприятие такое, но аж плохо становится при виде такого сочетания.
Не знаю, может это у меня цветовосприятие такое, но аж плохо становится при виде такого сочетания.
Sign up to leave a comment.
Жизнь Конвея на F# + OpenGL