Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Графика и игры
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 02.03.2012, 16:40
Аватар для sariman
sariman sariman вне форума
Активный
 
Регистрация: 19.11.2011
Адрес: Украина, Луганская обл.
Сообщения: 244
Версия Delphi: 7, XE, Lazarus
Репутация: выкл
По умолчанию вопрос по OpenGL

подскажите плиз, как убрать определенную линию с формы?, команда glClear(GL_COLOR_BUFFER_BIT); не подойдет, т.к она стирает полностью со всей формы
Ответить с цитированием
  #2  
Старый 02.03.2012, 21:42
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Ставь вопрос конкретнее.
В OpenGL не удаляется, а не отрисовывается, то что не нужно.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
Этот пользователь сказал Спасибо angvelem за это полезное сообщение:
sariman (03.03.2012)
  #3  
Старый 02.03.2012, 23:48
Аватар для sariman
sariman sariman вне форума
Активный
 
Регистрация: 19.11.2011
Адрес: Украина, Луганская обл.
Сообщения: 244
Версия Delphi: 7, XE, Lazarus
Репутация: выкл
По умолчанию

прошу прощение) не так сформулировал вопрос, у меня есть две линии, которые используются как пики (bass.dll), обновляется у меня функцией glClear(GL_COLOR_BUFFER_BIT); линии, потому что если этого не делать, получается не красиво, но если я начинаю рисовать на форме, то оно стирается, вот я и спрашиваю, чем можно заменить?
Ответить с цитированием
  #4  
Старый 03.03.2012, 00:17
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Всё-таки вы не понимаете принцип работы 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  
Старый 03.03.2012, 00:35
Аватар для sariman
sariman sariman вне форума
Активный
 
Регистрация: 19.11.2011
Адрес: Украина, Луганская обл.
Сообщения: 244
Версия Delphi: 7, XE, Lazarus
Репутация: выкл
По умолчанию

да..я немного не понимаю..я прикрепил исходник, может поможете, буду очень благодарен) чтобы воспроизвести нужно два раза кликнуть по формее если что
Вложения
Тип файла: rar Programma.rar (101.0 Кбайт, 9 просмотров)
Ответить с цитированием
  #6  
Старый 03.03.2012, 01:36
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

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  
Старый 03.03.2012, 18:58
Аватар для sariman
sariman sariman вне форума
Активный
 
Регистрация: 19.11.2011
Адрес: Украина, Луганская обл.
Сообщения: 244
Версия Delphi: 7, XE, Lazarus
Репутация: выкл
По умолчанию

огромное спасибо за помощь)
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 22:14.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025