![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Подскажите алгоритм доски? [D7]
Desk © (2006-12-06 06:43:00)По которому можно нарисовать текстуру как у доски. Чтобы со всякими разводами и линиями, как у настоящей деревянной доски было.
vidiv (2006-12-06 19:19:00) [1]Вот пример: http://vid.sakhgu.sakhalin.ru/tree.png примерно 50kb
vidiv (2006-12-06 19:15:00) [2]Форма с одной кнопкой:
procedure TForm1.Button1Click(Sender: TObject);
var Bmp:TBitMap;
i, j, x, y, s: integer;
PLine, NewLine:PIntegerArray;
C:Byte;
const BlurSize = 30;
begin
Randomize;
Bmp := TBitmap.Create;
Bmp.Width := ClientWidth;
Bmp.Height := ClientHeight;
Bmp.PixelFormat := pf32bit;
Bmp.Canvas.Pen.Color := $536974;
Bmp.Canvas.Brush.Style := bsSolid;
Bmp.Canvas.Brush.Color := $2D4755;
Bmp.Canvas.FillRect(Rect(0, 0, Bmp.Width, Bmp.Height));
Bmp.Canvas.Brush.Color := $5E8383;
for i:=ClientWidth*ClientHeight div 40 downto 0 do begin
x := random(Bmp.Width);
y := random(Bmp.Height);
Bmp.Canvas.Ellipse(x, y, x + random(5) + 10, y + random(2) + 1);
end;
GetMem(NewLine, Bmp.Width * 4);
for y := 0 to pred(Bmp.Height) do begin
PLine := Bmp.ScanLine[y];
for x:=0 to pred(Bmp.Width) do begin
for j:=0 to 2 do begin
S := 0;
for i:=x - BlurSize to x + BlurSize do
if (i>=0) and (i < Bmp.Width) then begin
S := S + PByte(Integer(PLine) + i*4 + j)^;
end else
case j of
0: S := S + $2d;
1: S := S + $47;
2: S := S + $55;
end;
PByte(Integer(NewLine) + x*4 + j)^ := S div (BlurSize * 2+1);
end;
end;
CopyMemory(PLine, NewLine, Bmp.Width * 4);
end;
FreeMem(NewLine);
Canvas.Draw(0, 0, Bmp);
Bmp.Free
end;
Sapersky (2006-12-06 13:25:00) [3]Подскажите алгоритм доски?
Ищи инструкции по созданию "деревянных" текстур в Photoshop. Я в своё время видел что-то такое - вроде всё довольно просто, никаких супер-мудрёных фильтров не применяется, вполне возможно написать самому.
Barloggg (2006-12-06 12:20:00) [4]не, тогда может криво получится все-таки мятые цилиндры это больше похоже на скелетную анимацию чем генерить извивающиеся линии
по сути выращивание дерева делается намазкой слоя за слоем. сначала делается скелет. с ветками.
потом слой за слоем намазывается белыми и коричневыми пикселями. по рандому - удвоенным слоем.
а потом делается срезка.
хотя делать сразу плоское тоже можно, но это будет хорошо разве что для осевого разреза. А вот снять стружку по спирали и получить текстуру фанеры можно только трехмерным деревом.
Jeer (2006-12-06 12:11:00) [5]Надо сразу выращивать плоское дерево по размеру изображения:)
Barloggg (2006-12-06 11:07:00) [6]в ухренительной. на сколько оперативки хватит :)
впрочем существуют такие вещи как альфаблендинг например так что можно сбацать в черновом реждиме, а потом поразмазывать как следует.
Kolan (2006-12-06 11:06:00) [7]> ухренительных
это 10 в какой степени?
Barloggg (2006-12-06 11:04:00) [8]да, вообщето это просто делается.
Именно для таких вещей и были придуманы трехмерные текстуры.
если автор хочет сделать целиком и полностью уникальную текстуру дерева значит ему нужно сначала это дерево вырастить, а потом выпилить из него доску.
то есть натурально делать мятые цилиндры один внутри другого не допуская их касания между собой и также делать сучки.
Всем нам известный шпон, (который на мебели или на фанере) делается срезанием стружки с целого бревна по спирали поэтому разводы выглядят такими скругленными и смазанными. На досках все резче и прямее. особенно на центральных брусьях.
в общем сначала надо создать ухренительных размеров трехмерный массив, попиксельно вырастить в нем дерево, потом по спирали сделать срез и получить искомую текстуру.
вот и весь алгоритм.
Jeer (2006-12-06 10:51:00) [9]
> Подскажите алгоритм доски? [D7]
Алгоритм можно придумать любой, другое дело, что такого готового вряд ли ты найдешь, поэтому - [1].
iXT (2006-12-06 09:33:00) [10]
> Elen © (06.12.06 09:29) [3]
Кажется в MS Office они были
Elen (2006-12-06 09:29:00) [11]
> По которому можно нарисовать текстуру как у доски
Наверно такого алгоритма нет, то биш просто свежеспиленную доску нарисовать можно, чередуя полоски разным цветом с размытием на краях, а вот что с сучками делать? Возьми один из готовых текстур в инете чтоб особо не париться
iXT (2006-12-06 09:17:00) [12]Сабж 5 балов :)
Сергей М. (2006-12-06 09:06:00) [13]алгоритм этот прост до безобразия
Image.Picture.LoadFromFile('ТекстураКакУДоски.bmp');