Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Media";
Текущий архив: 2007.09.02;
Скачать: [xml.tar.bz2];

Вниз

Совместное использование OpenGL и VCL компонент   Найти похожие ветки 

 
Tab   (2006-11-22 06:35) [0]

На форме где "рисую" OpenGl"ем, расположены TPanel и еще несколько компонент. При рисовании на форме, компоненты не перерисовываются. как Сделать чтобы OpenGl не мешал стандартным компонентам?

в OnCreate делаю так:

DC := GetDC (Handle);
SetDCPixelFormat(DC);
hrc := wglCreateContext(DC);
wglMakeCurrent(DC, hrc);
glClearColor (255, 255, 255, 1.0);
glColor3f (1.0, 0.0, 0.5);          
 glEnable(GL_DEPTH_TEST);
 vpHeight:=frmGL.ClientHeight;
 vpWIdth:=ClientWidth-Panel1.Width;
glViewport(0, 0, vpWIdth, vpHeight);


 
Rial ©   (2006-11-22 18:01) [1]

> [0] Tab   (22.11.06 06:35)
> На форме где "рисую" OpenGl"ем, расположены TPanel и еще
> несколько компонент. При рисовании на форме, компоненты
> не перерисовываются. как Сделать чтобы OpenGl не мешал стандартным
> компонентам?

Ответь еще на несколько вопросов:
1. Так ты OpenGL"ем рисуешь на форме или компонентах ?
2. В какой момент и при каких условиях проиходит перерисовка ?
3. Во скольких формах ты импользуешь графику ?
4. Так такие все таки еще компоненты ?
5. То, что ты делаешь в OnCreate ... ну еще ничего это не говорит,
и помочь не может в нахождении ошибки.
Процедурки какие то неописанные ранее,
переменные, о которых лично я первый раз слышу.

Вообще, приведенного кода вряд ли может хватить для правильной
инициализации. Строчек то явно маловато :)
Поэтому вывод:

1. Откомментируй вопросы.
2. Посмотри рабочие примеры инициализации. Или же отобрази весь
относящийся к делу код.
3. Что же все таки должно происходить на экране то ? Может,
и OpenGL не нужен ? :)


 
Tab   (2006-11-22 19:58) [2]


> 1. Так ты OpenGL"ем рисуешь на форме или компонентах ?

на форме

> 2. В какой момент и при каких условиях проиходит перерисовка

в OnPaint формы и по таймеру

> 3. Во скольких формах ты импользуешь графику ?

только в главной

> 4. Так такие все таки еще компоненты ?

Label, combobox,  textedit, все это расположено на panel


> 3. Что же все таки должно происходить на экране то ? Может,
> и OpenGL не нужен ? :)

нее :) точно нужен

собствеено я понял в чем причина, там пр рисовании вычисляется фпс. а так как обновляется только в OnPaint то и пишется он только полсе обновления формы. Я поленился взял и поставил отрисовку по таймеру (чтоб фпс постоянно считал) вот сейчас убрал вроде ок. надо теперь его как нибудь отдельно сделать чтоли. Теперь еще вопрос, сама форма при обновлении тоже мерцает как от этого избавиться?

код инициализации:
{=======================================================================
Формат пикселя}
procedure SetDCPixelFormat (hdc : HDC);
var
pfd : TPixelFormatDescriptor;
nPixelFormat : Integer;
begin
FillChar (pfd, SizeOf (pfd), 0);
pfd.dwFlags  := PFD_DRAW_TO_WINDOW or PFD_SUPPORT_OPENGL or PFD_DOUBLEBUFFER;
nPixelFormat := ChoosePixelFormat (hdc, @pfd);
SetPixelFormat (hdc, nPixelFormat, @pfd);
end;

{=======================================================================
Создание формы}
procedure TfrmGL.FormCreate(Sender: TObject);
begin
DC := GetDC (Handle);
SetDCPixelFormat(DC);
hrc := wglCreateContext(DC);
wglMakeCurrent(DC, hrc);
glClearColor (255, 255, 255, 1.0); // цвет фона
glColor3f (1.0, 0.0, 0.5);          // текущий цвет примитивов
 glShadeModel(GL_SMOOTH);                 // Enables Smooth Color Shading
 glEnable(GL_DEPTH_TEST);
 vLeft := -3.0;
 vRight := 3.0;
 vBottom := -3.0;
 vTop := 3.0;
 zNear := 1.0;
 zFar := 100.0;
 Perspective := 30.0;
 x_r:=0;
 y_r:=0;
 dz_r:=-20;
 vpHeight:=frmGL.ClientHeight;
 vpWIdth:=ClientWidth-Panel1.Width;
end;


 
Tab   (2006-11-24 08:46) [3]

Теперь еще вопрос, сама форма при обновлении тоже мерцает как от этого избавиться?


 
Rial ©   (2006-11-24 17:34) [4]

надо делать не Form1.Refresh, а
SendMessage(Form1.Handle, WM_PAINT, 0, 0);
или, на крайний случай,
Form1.RePaint;
А вообще, ты ведь не сказать, каким именно
образом одновляешь ТЫ форму. Так что это опять только
мои догадки.


 
Tab   (2006-11-25 12:10) [5]


> А вообще, ты ведь не сказать, каким именнообразом одновляешь
> ТЫ форму

InvalidateRect(Handle, nil, False);



Страницы: 1 вся ветка

Форум: "Media";
Текущий архив: 2007.09.02;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.038 c
15-1185607519
Ыщтмихайло
2007-07-28 11:25
2007.09.02
Куда податься ламерюге


1-1182725258
ssa
2007-06-25 02:47
2007.09.02
Как заменить выделенный текст в memo?


3-1178888704
RomanLN
2007-05-11 17:05
2007.09.02
создаю БД с ID возникает проблема при удалении записи


2-1186511541
;peg
2007-08-07 22:32
2007.09.02
TWebBrowser и Memo


15-1186077915
KilkennyCat
2007-08-02 22:05
2007.09.02
Вот и заканчивается день ВМФ...





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский