Форум программистов, компьютерный форум, киберфорум
Наши страницы

Delphi: графика, звук, видео

Войти
Регистрация
Восстановить пароль
 
flatgad
geJI<|>eP
186 / 186 / 1
Регистрация: 22.07.2010
Сообщений: 733
#1

Куча линий. - Delphi

28.09.2010, 01:19. Просмотров 870. Ответов 4
Метки нет (Все метки)

Привет всем. Попытаюсь изложить суть своего вопроса. У меня каждую секунду рисуется около 100 линий (рисую через canvas) линии могут накладываться друг на друга но не пересекаться, лини выходят из одной точки. Вопрос таков можно ли как то сделать что бы к примеру после того как отрисовалось 10 линий рисовалась 11 но 1-я стиралась ? Исходники не надо если можно то лучше алгоритм как это можно решить. Скорость алгоритма очень нужна. Может можно и не через канвас, тогда буду рад услышать альтернативы. Заранее всем откликнувшимся спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.09.2010, 01:19
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Куча линий. (Delphi):

Вывод линий - Delphi
Всем привет! Дайте пожайлуста исходник Delphi вывода линий на экран или линии. Пробую через DeviceInterface.Clear но посадка FPS просто...

Массив линий - Delphi
Все доброго дня, возни такой вопрос, как мне создать массив линий? к примеру пишу так Lines: array of TShape; потом можно...

Распознание линий - Delphi
Программисты помогите мне решить такую проблему, я сделал небольшую программу по которой движется shape(машина) и передвигается по...

Прорисовка и удаление линий - Delphi
Нужна помощь!!! создаю несколько динамических объектов (TButton), между ними провожу линии (делаю связь), нужно чтобы при движении одного...

Point, тип линий - Delphi
Доброе время суток, Форумчане! Подтолкните пожалуйста барана по нужной дороге.:sorry: Суть в том, что реализуя программку наподобие Paint,...

Рисование линий в Canvas - Delphi
Как обработать MouseMove чтобы на форме отображались две пересекающиеся прямые( пересекаются под прямым углом) в точке где расположен...

4
snake32
1639 / 1093 / 160
Регистрация: 26.02.2009
Сообщений: 4,041
Записей в блоге: 5
28.09.2010, 03:11 #2
Цитата Сообщение от flatgad Посмотреть сообщение
Вопрос таков можно ли как то сделать что бы к примеру после того как отрисовалось 10 линий рисовалась 11 но 1-я стиралась ?
поверх первой линии рисуете ещё одну с цветом фона, но это сработает если фон всегда однотонный.
Цитата Сообщение от flatgad Посмотреть сообщение
Скорость алгоритма очень нужна. Может можно и не через канвас, тогда буду рад услышать альтернативы.
DirectX, OpenGL
1
Viper27
5 / 5 / 1
Регистрация: 01.01.2011
Сообщений: 147
11.01.2011, 14:13 #3
Про закрашивание цветом фона вы не поняли... Человек хотел удалять линию для повышения производительности, а так отрисовывается ещё больше
1
snake32
1639 / 1093 / 160
Регистрация: 26.02.2009
Сообщений: 4,041
Записей в блоге: 5
11.01.2011, 15:05 #4
Цитата Сообщение от Viper27 Посмотреть сообщение
Про закрашивание цветом фона вы не поняли... Человек хотел удалять линию для повышения производительности, а так отрисовывается ещё больше
Отрисовывается больше на ОДНУ линию, чем если бы линии вообще не стирались. Это много? Хорошо, Viper27, предложите более производительный вариант через канву с однотонным фоном.
1
flatgad
geJI<|>eP
186 / 186 / 1
Регистрация: 22.07.2010
Сообщений: 733
12.01.2011, 11:23  [ТС] #5
Цитата Сообщение от snake32 Посмотреть сообщение
Отрисовывается больше на ОДНУ линию, чем если бы линии вообще не стирались. Это много? Хорошо, Viper27, предложите более производительный вариант через канву с однотонным фоном.
Всем спасибо за ответы проблема решена с помощью OpenGL. Кому надо алгоритм таков:
1. Записывается координаты n линий в список.
2. Рисуем на форме
3. Удаляем из списка координаты 1-й линию и добавляем координаты следующей.
4. Перерисовываем заданный список. Тем самым обновляем экран. и получается красивая картинка.

Вот немного кода:

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
  Lines:TList;
//Список где хранятся координаты
type
PVec2f = ^TVec2f;
TVec2f = packed record
x,y:GLfloat;
end;
....
//Инициализация OpenGL
DC:=GetDC(Form1.Panel1.Handle);
RC:=CreateRenderingContext(DC,[opDoubleBuffered],32,24,0,0,0,0);
ActivateRenderingContext(DC, RC);
glBlendFunc(GL_SRC_Alpha, gl_one);
...
//Добавление координат линии в список
New(p);
p.x := (0.9)*cos(pi*(angle)/180);
p.y := (0.9)*sin(pi*(angle)/180);
Lines.Add(p);
..
//Отрисовка линий
procedure TForm1.brush_openGL();
var m:integer;
value_sig1,value_sig2,value_sig3,value_sig4:Single;
R, G, B : GLFloat;
begin
glClear(GL_COLOR_BUFFER_BIT);
 glDisable(GL_BLEND);
 brash_diag_openGL();
 glLineWidth(3);
 glBegin (GL_LINES);
  glColor3d(1.0,1.0,1.0);
   value_sig1:=StrToFloat(Form1.sEdit9.text)/255;
   glVertex2f(0,0);
   glVertex2f( 0 , value_sig1 );
   value_sig2:=StrToFloat(Form1.sEdit10.text)/255;
   glVertex2f(0,0);
   glVertex2f( value_sig2 , 0  );
   value_sig3:=StrToFloat(Form1.sEdit11.text)/255;
   glVertex2f(0,0);
   glVertex2f( 0 , -value_sig3  );
   value_sig4:=StrToFloat(Form1.sEdit12.text)/255;
   glVertex2f(0,0);
   glVertex2f( -value_sig4 ,0  );
  glEnd;
  if (kol_OpenGL>16*sEdit8.Tag-1) and (sCheckBox2.Checked=False) then begin  
   //16*sEdit8.Tag-1  количество линий
    color_list.Delete(0);
    lines.Delete(0);
    kol_OpenGL:=kol_OpenGL-1;
  end;
  if Lines.Count>1 then begin
  glEnable(GL_BLEND);
  glBlendFunc(GL_SRC_ALPHA,GL_ONE);
  glLineWidth(1);
  glLineWidth(1.8);
  glBegin (GL_LINES);
  for m:=0 to Lines.Count-1 do
  begin
   ColorToGL (StringToColor('c'+color_list.ValueFromIndex[m]), R, G, B);
   glColor3d(R-0.5,G-0.5,B-0.5);
   glVertex2f(0,0);
   glVertex2fv(Lines.Items[m]);
  end;
glEnd;
end;
brash_freq_text();
swapbuffers(dc);
end;
0
12.01.2011, 11:23
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.01.2011, 11:23
Привет! Вот еще темы с ответами:

OpenGL наложение линий - Delphi
Добрый день. Нужна помощь специалистов по OpenGl. На 2d-плоскости рисуются линии поверх друг друга. Необходимо отобразить...

Построить прямоугольник из четырех линий - Delphi
Нужно построить как бы рамку в несколько пикселей по координатам Rect(300,300,500,500) -Это может быть и прямоугольник, только с...

Удаление невидимых линий(Z-буфер) - Delphi
Здравствуйте! С графикой не знаком, а нужно нарисовать сложную 3D фигуру: 1)с удалением невидимых линий 2)со светом; решил попробовать...

Изменить толщину линий в Chart-е - Delphi
Здравствуйте. Как можно изменить толщину линий на график Editing Chart1 на Delphi.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru