Главная страница
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.044 c
2-1127728182
Алексей2
2005-09-26 13:49
2005.10.23
Убрать обработчик события


14-1127983580
ocean
2005-09-29 12:46
2005.10.23
Честность и доброта не нужны


14-1127910784
Иванов__
2005-09-28 16:33
2005.10.23
Нужен подобный компонент но бесплатный


14-1128080700
nk
2005-09-30 15:45
2005.10.23
AVP 5.0.121


3-1126646105
TALLA
2005-09-14 01:15
2005.10.23
MySQL через ADO, invalid field size