Текущий архив: 2006.12.24;
Скачать: CL | DM;
Вниз
Подскажите алгоритм доски? Найти похожие ветки
← →
Desk (2006-12-06 06:43) [0]По которому можно нарисовать текстуру как у доски. Чтобы со всякими разводами и линиями, как у настоящей деревянной доски было.
← →
Сергей М. © (2006-12-06 09:06) [1]алгоритм этот прост до безобразия
Image.Picture.LoadFromFile("ТекстураКакУДоски.bmp");
← →
iXT (2006-12-06 09:17) [2]Сабж 5 балов :)
← →
Elen © (2006-12-06 09:29) [3]
> По которому можно нарисовать текстуру как у доски
Наверно такого алгоритма нет, то биш просто свежеспиленную доску нарисовать можно, чередуя полоски разным цветом с размытием на краях, а вот что с сучками делать? Возьми один из готовых текстур в инете чтоб особо не париться
← →
iXT (2006-12-06 09:33) [4]
> Elen © (06.12.06 09:29) [3]
Кажется в MS Office они были
← →
Jeer © (2006-12-06 10:51) [5]
> Подскажите алгоритм доски? [D7]
Алгоритм можно придумать любой, другое дело, что такого готового вряд ли ты найдешь, поэтому - [1].
← →
Barloggg (2006-12-06 11:04) [6]да, вообщето это просто делается.
Именно для таких вещей и были придуманы трехмерные текстуры.
если автор хочет сделать целиком и полностью уникальную текстуру дерева значит ему нужно сначала это дерево вырастить, а потом выпилить из него доску.
то есть натурально делать мятые цилиндры один внутри другого не допуская их касания между собой и также делать сучки.
Всем нам известный шпон, (который на мебели или на фанере) делается срезанием стружки с целого бревна по спирали поэтому разводы выглядят такими скругленными и смазанными. На досках все резче и прямее. особенно на центральных брусьях.
в общем сначала надо создать ухренительных размеров трехмерный массив, попиксельно вырастить в нем дерево, потом по спирали сделать срез и получить искомую текстуру.
вот и весь алгоритм.
← →
Kolan © (2006-12-06 11:06) [7]> ухренительных
это 10 в какой степени?
← →
Barloggg (2006-12-06 11:07) [8]в ухренительной. на сколько оперативки хватит :)
впрочем существуют такие вещи как альфаблендинг например так что можно сбацать в черновом реждиме, а потом поразмазывать как следует.
← →
Jeer © (2006-12-06 12:11) [9]Надо сразу выращивать плоское дерево по размеру изображения:)
← →
Barloggg (2006-12-06 12:20) [10]не, тогда может криво получится все-таки мятые цилиндры это больше похоже на скелетную анимацию чем генерить извивающиеся линии
по сути выращивание дерева делается намазкой слоя за слоем. сначала делается скелет. с ветками.
потом слой за слоем намазывается белыми и коричневыми пикселями. по рандому - удвоенным слоем.
а потом делается срезка.
хотя делать сразу плоское тоже можно, но это будет хорошо разве что для осевого разреза. А вот снять стружку по спирали и получить текстуру фанеры можно только трехмерным деревом.
← →
Sapersky (2006-12-06 13:25) [11]Подскажите алгоритм доски?
Ищи инструкции по созданию "деревянных" текстур в Photoshop. Я в своё время видел что-то такое - вроде всё довольно просто, никаких супер-мудрёных фильтров не применяется, вполне возможно написать самому.
← →
vidiv © (2006-12-06 19:15) [12]Форма с одной кнопкой:
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;
← →
vidiv © (2006-12-06 19:19) [13]Вот пример: http://vid.sakhgu.sakhalin.ru/tree.png примерно 50kb
Страницы: 1 вся ветка
Текущий архив: 2006.12.24;
Скачать: CL | DM;
Память: 0.5 MB
Время: 0.031 c