Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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
2-1165493327
SMAC
2006-12-07 15:08
2006.12.24
Прозрачность (2)


1-1163268032
Redline
2006-11-11 21:00
2006.12.24
Нажатие клавиши через SendMessage


3-1160475468
Nike
2006-10-10 14:17
2006.12.24
Ошибка "Operation not allowed on a unidirectional dataset"


15-1164651828
Cyrax
2006-11-27 21:23
2006.12.24
Картотека спортсменов


2-1165226089
KyRo
2006-12-04 12:54
2006.12.24
Ошибка подскажите как исправить