Форум: "Начинающим";
Текущий архив: 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.041 c