![]() |
|
|
#1
|
||||
|
||||
|
подскажите плиз, как убрать определенную линию с формы?, команда glClear(GL_COLOR_BUFFER_BIT); не подойдет, т.к она стирает полностью со всей формы
|
|
#2
|
||||
|
||||
|
Ставь вопрос конкретнее.
В OpenGL не удаляется, а не отрисовывается, то что не нужно. |
| Этот пользователь сказал Спасибо angvelem за это полезное сообщение: | ||
sariman (03.03.2012)
| ||
|
#3
|
||||
|
||||
|
прошу прощение) не так сформулировал вопрос, у меня есть две линии, которые используются как пики (bass.dll), обновляется у меня функцией glClear(GL_COLOR_BUFFER_BIT); линии, потому что если этого не делать, получается не красиво, но если я начинаю рисовать на форме, то оно стирается, вот я и спрашиваю, чем можно заменить?
|
|
#4
|
||||
|
||||
|
Всё-таки вы не понимаете принцип работы OpenGL. В нём нет команд стереть объект (линию), при не надобности, объект просто не рисуется.
Код:
function DrawGLScene : Boolean;
begin
// Очистить сцену и буфер глубины
glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
glLoadIdentity; // Сбросить текущую матрицу
...
if isDrawLine then
DrawLine; // рисовать нужное
...
end; |
| Этот пользователь сказал Спасибо angvelem за это полезное сообщение: | ||
sariman (03.03.2012)
| ||
|
#5
|
||||
|
||||
|
да..я немного не понимаю..я прикрепил исходник, может поможете, буду очень благодарен) чтобы воспроизвести нужно два раза кликнуть по формее если что
|
|
#6
|
||||
|
||||
|
1. Почисти Дельфи от вируса (\bin\lib\sysconst.bak) переименуй в sysconst.dcu
2. Если выкладываешь, постарайся обойтись без всякого сброда вроде: sBitBtn, sLabel, sButton; 3. Немного изменённый код, с цветом разбирайся сам, я эту библиотеку не использую. (держу только для того, чтобы можно было отвечать на вопросы): Код:
public
{ Public declarations }
procedure WMPaint(var Msg: TWMPaint); message WM_PAINT;
end;
...
// Рисование картинки
procedure TForm1.WMPaint(var Msg: TWMPaint);
var
ps : TPaintStruct;
Level : DWORD;
High : FLOAT;
begin
BeginPaint(Handle, ps);
// очистка буфера цвета и буфера глубины
glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
glColor3f(0.388235294, 0.388235294, 0.388235294);
glBegin(GL_LINES);
glVertex2f(-0.99, 1);
glVertex2f(-0.99, 0.77);
glVertex2f(-0.99, 0.77);
glVertex2f(0.87, 0.77);
glVertex2f(0.87, 0.76);
glVertex2f(0.87, 1);
glEnd;
Level := BASS_ChannelGetLevel(Channel);
High := MulDiv(100, HIWORD(Level), 32768) / 100;
if High = 2 then
Exit;
glLineWidth(8);
glBegin(GL_LINES);
// првый спектр
glColor3f(1, 1, 1);
glVertex2f(0, -1);
glColor3f(0, 0, 0);
glVertex2f(High, -1);
// левый спектр
glColor3f(0, 0, 0);
glVertex2f(-High, -1);
glColor3f(1, 1, 12);
glVertex2f(0, -1);
glEnd;
glFlush;
SwapBuffers(DC); // вывод на экран
EndPaint(Handle, ps);
end;
procedure TForm1.tmr1Timer(Sender: TObject);
begin
InvalidateRect(Handle, nil, False);
end; |
| Этот пользователь сказал Спасибо angvelem за это полезное сообщение: | ||
sariman (03.03.2012)
| ||
|
#7
|
||||
|
||||
|
огромное спасибо за помощь)
|