![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как отрисовывать линию по таймеру в OPENGL ?
Горгер © (2006-11-06 01:47:00)Что-то я неправильно делаю?
Линия не отображается вообще. Черным-черно и все
Смотрите:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Timer1.Tag:=Timer1.Tag+1;
wglmakeCurrent(dc,hrc);
glClearColor(0.1,0.0,0.0,1.0);
glClear(GL_COLOR_BUFFER_BIT);
DrawLine(Timer1.Tag);
SwapBuffers(dc);
end;
end.
Процедура DrawLine
procedure DrawLine(i:integer);
begin
glBegin(GL_LINES);
glVertex2f(0.0,0.0);
glvertex2f(0.0+0.1*cos(i),0.2+0.6*sin(i));
glEnd;
Ketmar (2006-11-07 00:36:00) [1]>[5] Горгер(c) 7-Nov-2006, 00:32
>И вам, товарищи
что вовремя посоветовали книги читать? это мы завсегда готовы. %-)
Горгер (2006-11-07 00:32:00) [2]Все сделал, заработало...
Спасибо книге Краснова.
И вам, товарищи
Ketmar (2006-11-06 17:23:00) [3]>[3] Rial(c) 6-Nov-2006, 11:41
>Я тоже подумал об этом, но не рискнул предъявить автору.
ему надо предъявить книгу. и пинком отправить читать. %-)
Rial (2006-11-06 11:41:00) [4]
> [0] Горгер © (06.11.06 01:47)
Вообще, у вас не код, а недоразумение какое то.
Надо бы почитать книжки по OpenGL.
И по программированию в том числе.
1. А если надо будет рисовать две линии, то
будешь делать с помощью 2 таймеров, т.к.
поле Tag только один у одного таймера ?
2. Установка цвета очистки не обязательна
на каждом тике. Можно задать цвет один раз при
инициализации.
3.То же касается и wglMageCurrent.
Она к тому же часто очень тормозит, поэтому код приведенный
может работать медленнее, чем отрисовка тысяч линий.
4.Очень понравилось вот это: 0.0 + XXX, оригинально...
5.Вообще, забудь про системный таймер, когда имеешь дело
с OpenGL !
6.Странно, что никто не задумался о цвете выводимых линий.
А кто собственно сказал, что они дожны быть другого цвета ?
(Там беленький по умолчанию, но все же лучше задать его явно).
7.Вместо Sin и Cos отдельно лучше использовать SinCos
из модуля Math.
8. I : Integer => Const I : Integer
P.S.
> [2] Ketmar © (06.11.06 03:47)
Я тоже подумал об этом, но не рискнул предъявить автору.
Ketmar (2006-11-06 03:47:00) [5]неа, это ж OpenGL. тут намного интересней узнать, что есть dc и hrc.
Rial (2006-11-06 03:28:00) [6]Рисовать линию надо в обработчике события WM_PAINT.
В таймере только посылай сообщение на перерисовку с
помощью SendMessage(Wnd, WM_Paint, 0, 0);