Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.10.23;
Скачать: CL | DM;

Вниз

Opengl - прозрачный фон и вывод текста и другое   Найти похожие ветки 

 
Shader ©   (2005-09-26 19:40) [0]

Просьба помочь в работе с openGL:

1) Необходимо задать прозрачный фон
2) не пойму как задать координаты для объекта (сфера, например)
3) Нужно вывести текст при помощи openGL
4) Работа с OPenGL но не на форме, например на Image
5) Не пойму как поставить два источника света


 
Shader ©   (2005-09-26 19:48) [1]

Забыл, вот что в исходнике:

unit Unit1;
interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, ExtCtrls, StdCtrls, jpeg,
 ///////
   opengl;
 ///////

type
 TForm1 = class(TForm)
   Button1: TButton;
   Button2: TButton;
   Image1: TImage;
   procedure FormCreate(Sender: TObject);
   procedure FormClose(Sender: TObject; var Action: TCloseAction);
   procedure Button1Click(Sender: TObject);
   procedure Button2Click(Sender: TObject);

 private
   { Private declarations }
   //////////////////
     ghRC:HGLRC;
     ghDC:HDC;
     procedure Draw;
   //////////////////
 public
   { Public declarations }
 end;

var
 Form1: TForm1;
 x:boolean;
 Y:integer;
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;
                                     {формат указания цвета
                                         PFD_TYPE_RGBA
                                          (цвет указывается четырьмя параметрами)
                                            PFD_TYPE_COLORINDEX
                                             (цвет указывается индексом в палитре)}
         ppfd.cColorBits := 16;  {глубина цвета}
         ppfd.cDepthBits := 16;  {глубина Z-буффера}
         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
     X:=false;
        //////////////////////////////////////
          ghDC := GetDC(Handle);
          bSetupPixelFormat(ghDC);
          ghRC := wglCreateContext(ghDC);      
                    {указатель на контекст воспроизведения (Rendering Context)}
          wglMakeCurrent(ghDC, ghRC);          
                {  дескриптор устройства (для нас – просто указатель на окно)}
        ///////////////////////////////////////
        glClearColor(0.0, 0.0, 0.0, 9.0);      {Цвет очистки или заднего фона}
          glViewport( 0, 0, Width, Height );
          glMatrixMode( GL_PROJECTION );       {выбор положения камеры начат}
          glLoadIdentity();                    {сброс}
          glOrtho(-5,5, -5,5, 2,12);           {масштаб коордитнатных осей}
          gluLookAt(2,2,5,                     {координаты камеры}
                    0,0,0,                     {координаты направления камеры}
                    0,1,0);                    {координаты направления оси Y}
          glMatrixMode( GL_MODELVIEW );      
                                                  {выбор положения камеры окончен}
        glEnable(GL_COLOR_MATERIAL);           {цвет объекта}
        glEnable(GL_DEPTH_TEST);               {объёмность}
    glEnable(GL_LIGHTING);                     {освещённость}
      glEnable(GL_LIGHT0);                     {активна лампочка №0}
          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);      
             {расположение лампочки #0}
        glLightfv(GL_LIGHT0,GL_SPOT_DIRECTION,@d);
             {направление света лампочки #0}

end;

procedure Tform1.Draw;    {то, что рисуем}
     var
       quadObj :GLUquadricObj;
begin
       glClear(GL_DEPTH_BUFFER_BIT xor GL_COLOR_BUFFER_BIT);   {очистка буфера}
       quadObj:=gluNewQuadric;                                 {создание объекта}
       gluQuadricDrawStyle(quadObj, GLU_FILL);
                                   {GLU_FILL, GLU_LINE, GLU_POINT}
       glColor3f(0,1,0);                              {цвет фигуры}
       glEnable(GL_POINT_SMOOTH);                     {сглаживание}
       gluSphere(quadObj, 1,1000,1000);
///////////
{как задать координаты ??? для этой сферы}
///////////
       gluDeleteQuadric(quadObj);                {освобождение памяти}
       gluDeleteQuadric(Figure);                  
       SwapBuffers(ghDC);                        {вывод содержимого буфера}
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.Button1Click(Sender: TObject);
begin
 draw;
end;

end.



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

Текущий архив: 2005.10.23;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.629 c
3-1126194426
kreyl
2005-09-08 19:47
2005.10.23
MSSQL2000 Как передать в процедуру имя таблицы в виде строки?


1-1128334839
Shlomo
2005-10-03 14:20
2005.10.23
Rave Reports: Region Component – его рамки?


4-1124471350
LyNx
2005-08-19 21:09
2005.10.23
Интеграция одного окна в другое


2-1127907181
Гость22
2005-09-28 15:33
2005.10.23
Как не дать закрыть свое приложение?


11-1109577063
Интересующийся
2005-02-28 10:51
2005.10.23
KOLMouseDown: как заставить реагировать на нажатие кнопок мыши?