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

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.043 c
3-1126500952
leonidus
2005-09-12 08:55
2005.10.23
Где найти инфу по Join`у?


3-1126079553
Term
2005-09-07 11:52
2005.10.23
CASE в FB1.5


1-1128325284
AlexLines
2005-10-03 11:41
2005.10.23
Как узнать, что приложение запущено под win 95, 98 или win ME


2-1127678744
Pasha L
2005-09-26 00:05
2005.10.23
Ошибка при createprocess


4-1124388955
Piter
2005-08-18 22:15
2005.10.23
Странная работа GetModuleFileName с библиотеками





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