![]() |
|
#1
|
||||
|
||||
![]() подскажите плиз, как убрать определенную линию с формы?, команда glClear(GL_COLOR_BUFFER_BIT); не подойдет, т.к она стирает полностью со всей формы
|
#2
|
||||
|
||||
![]() Ставь вопрос конкретнее.
В OpenGL не удаляется, а не отрисовывается, то что не нужно. Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
Этот пользователь сказал Спасибо 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; Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
Этот пользователь сказал Спасибо 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; Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
Этот пользователь сказал Спасибо angvelem за это полезное сообщение: | ||
sariman (03.03.2012)
|
#7
|
||||
|
||||
![]() огромное спасибо за помощь)
|