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

Вниз

OpenGL   Найти похожие ветки 

 
Nikss   (2007-04-30 18:55) [0]

Здравствуйте! Пытаюсь создать простейшую программку в OpenGL, но не могу понять, что неправильно. Я объявляю процедуры FormCreate, FormPaint, FormResize, FormDestroy, как описано в справочнике, но когда появляется форма, она пустая, и на ней ничего не появляется, а мне нужно, чтобы там сразу были объекты. Скажите, пожалуйста, как это сделать? На всякий случай листинг:

unit GL;
interface
uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, OpenGL, StdCtrls, ExtCtrls;

type
 TForm1 = class(TForm)
   procedure FormClose(Sender: TObject; var Action: TCloseAction);
   procedure FormResize(Sender: TObject);
   procedure FormCreate(Sender: TObject);
   procedure FormPaint(Sender: TObject);
 private
   { Private declarations }
  ghRC:HGLRC;
  ghDC:HDC;
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

function bSetupPixelFormat(DC:HDC):boolean;
var
   pfd:PIXELFORMATDESCRIPTOR;
   ppfd:PPIXELFORMATDESCRIPTOR;
   pixelformat:integer;
begin
   ppfd := @pfd;

   ppfd.nSize := sizeof(PIXELFORMATDESCRIPTOR);
   ppfd.nVersion := 1;
   ppfd.dwFlags :=  PFD_DRAW_TO_WINDOW xor
                    PFD_SUPPORT_OPENGL xor
                    PFD_DOUBLEBUFFER;
   ppfd.dwLayerMask := PFD_MAIN_PLANE;
   ppfd.iPixelType := PFD_TYPE_RGBA;
   ppfd.cColorBits := 16;  
   ppfd.cDepthBits := 16;

   ppfd.cAccumBits := 0;
   ppfd.cStencilBits := 0;

   pixelformat := ChoosePixelFormat(dc, ppfd);
   if pixelformat=0 then
   begin
       MessageBox(0, "ChoosePixelFormat failed", "Error", MB_OK);
       bSetupPixelFormat:=FALSE;
       exit;
   end;

   if SetPixelFormat(dc, pixelformat, ppfd)=false then
   begin
       MessageBox(0, "SetPixelFormat failed", "Error", MB_OK);
       bSetupPixelFormat:=FALSE;
       exit;
   end;
   bSetupPixelFormat:=TRUE;
end;

procedure TForm1.FormCreate(Sender: TObject);
var
  p: TGLArrayf4;
  d: TGLArrayf3;
begin
  WindowState:=wsMaximized;
  ghDC := GetDC(Handle);
  if bSetupPixelFormat(ghDC)=false then
    Close();
  ghRC := wglCreateContext(ghDC);
  wglMakeCurrent(ghDC, ghRC);
  glClearColor(0.0, 0.0, 0.0, 0.0);
  FormResize(Sender);
  glEnable(GL_COLOR_MATERIAL);
  glEnable(GL_DEPTH_TEST);
  glEnable(GL_LIGHTING);
  glEnable(GL_LIGHT0);
    p[0]:=3;
    p[1]:=3;
    p[2]:=3;
    p[3]:=1;
    d[0]:=-1;
    d[1]:=-1;
    d[2]:=-3;
  glLightfv(GL_LIGHT0,GL_POSITION,@p);
  glLightfv(GL_LIGHT0,GL_SPOT_DIRECTION,@d);
end;

procedure TForm1.FormResize(Sender: TObject);
begin
glViewport( 0, 0, Width, Height );
glMatrixMode( GL_PROJECTION );
glLoadIdentity();
glOrtho(-5,5, -5,5, 2,12);
gluLookAt(0,0,5, 0,0,0, 0,1,0);
glMatrixMode( GL_MODELVIEW );
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if ghRC<>0 then
 begin
   wglMakeCurrent(ghDC,0);
   wglDeleteContext(ghRC);
 end;
 if ghDC<>0 then
   ReleaseDC(Handle, ghDC);
end;

procedure TForm1.FormPaint(Sender: TObject);
begin
 wglMakeCurrent(Canvas.Handle,ghrc);
 glClearColor(0.5, 0.5, 0.7, 1.0);
 glClear(GL_DEPTH_BUFFER_BIT xor GL_COLOR_BUFFER_BIT);
 glBegin ( GL_QUADS );
 glNormal3f ( 0.0 , 0.0 , -1.0 );
 glVertex3f ( 1.0 , 1.0 , 1.0 );
 glVertex3f ( -1.0 , 1.0 , 1.0 );
 glVertex3f ( -1.0 , -1.0 , 1.0 );
 glVertex3f ( 1.0 , -1.0 , 1.0 );
 glEnd;

 glBegin ( GL_QUADS );
 glNormal3f ( 1.0 , 0.0 , 0.0 );
 glVertex3f ( -1.0 , 1.0 , 1.0 );
 glVertex3f ( -1.0 , 1.0 , -1.0 );
 glVertex3f ( -1.0 , -1.0 , -1.0 );
 glVertex3f ( -1.0 , -1.0 , 1.0 );
 glEnd;

 glBegin ( GL_QUADS );
 glNormal3f ( 0.0 , -1.0 , 0.0 );
 glVertex3f ( -1.0 , 1.0 , -1.0 );
 glVertex3f ( -1.0 , 1.0 , 1.0 );
 glVertex3f ( 1.0 , 1.0 , 1.0 );
 glVertex3f ( 1.0 , 1.0 , -1.0 );
 glEnd;
 wglMakeCurrent(0,0);
end;  

end.


 
Чародей ©   (2007-04-30 20:35) [1]


> Я объявляю процедуры FormCreate, FormPaint, FormResize,
> FormDestroy, как описано в справочнике

Если объявляешь процедуры вручную то в окошке Events надо выставить связки событий с процедурами, а лучше сразу создавать их от туда(dblClick! :)



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

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

Наверх




Память: 0.45 MB
Время: 0.006 c
15-1202889916
Iam
2008-02-13 11:05
2008.03.23
WebMoney


2-1203507273
uno-84
2008-02-20 14:34
2008.03.23
Какой выбрать элемент


2-1204100700
DimOk
2008-02-27 11:25
2008.03.23
Формы fsMDIChild в DLL


2-1203575014
vegarulez
2008-02-21 09:23
2008.03.23
Вопрос про TEdit. Как отследить ввод тока цифр.


11-1186121703
BMouradov
2007-08-03 10:15
2008.03.23
Поворот изображений





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский