Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Мультимедиа в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.02.2010, 19:31   #1
Krechet
Пользователь
 
Аватар для Krechet
 
Регистрация: 03.12.2008
Сообщений: 76
По умолчанию PushMatrix и PopMatrix

procedure TForm1.FormCreate(Sender: TObject);
begin
DC:= GetDC(Panel1.Handle);
PixelFormat;
hrc:=wglCreateContext(DC);
wglMakeCurrent(DC, hrc);
loadtexture(GetCurrentDir+'\1.bmp', 1,1);
px:=0;
py:=0;
pz:=0;
sx:=0.001; spx:=0.002;
sy:=0.002; spy:=0.003;
sz:=0.003; spz:=0.001;
RX:=0;
RY:=0;
RZ:=0;
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
prim:=gluNewQuadric();
radS:=0.05;
radT:=0.05;

glNewList(1, GL_COMPILE);
gluQuadricDrawStyle(prim, GLU_FILL);
gluQuadricTexture (prim,true);
glColor3f(1,0,0);
gluSphere(prim, radS, 100, 10);
glEndList;
end;

procedure TForm1.FormPaint(Sender: TObject);
var
ps:TPaintStruct;
begin

glEnable (GL_NORMALIZE);
glEnable (GL_LIGHTING);
glEnable (GL_LIGHT0);
glEnable (GL_AUTO_NORMAL);
glEnable(GL_COLOR_MATERIAL);
glEnable(GL_DEPTH_TEST);
glLightModelf (GL_LIGHT_MODEL_TWO_SIDE,1);
Position [0] := 0;
Position [1] := 0;
Position [2] := 0.2;
Position [3] := 1;
glLightfv (GL_LIGHT0, GL_POSITION, @position);
glPushMatrix;
glscalef(4.0,4.0,1.0);

glEnable(GL_FOG);
glFogi(GL_FOG_MODE,GL_EXP2);
glEnable(gl_Blend);
glFogfv(GL_FOG_COLOR,@FogColor);

BeginPaint(panel1.Handle, ps);
glClearColor(0.1,0.3, 0.1, 0);
glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);

glRotated(45, 0, 0, 0);

glRotated(RX,1,0,0);
glRotated(RY,0,1,0);
glRotated(RZ,0,0,1);

glPushMatrix;
draws;
glEnable(GL_TEXTURE_2D);
glTexImage2D(gl_texture_2d,0,3,64,6 4,0,GL_RGBA,GL_UNSIGNED_BYTE,textur es[1]);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glMaterialfv(GL_FRONT_AND_BACK,GL_A MBIENT_AND_DIFFUSE,@back_color);
glCallList(1);
glPopMatrix;

glPushMatrix;
drawt;
auxSolidTorus(0.02,radT);
glPopMatrix;

glPushMatrix;
glBegin(GL_QUADS);
glColor4f(0.0, 1.0, 0.0, 0.25);
glVertex3f(0.25, 0.25, -0.25);
glVertex3f(0.25, 0.25, 0.25);
glVertex3f(0.25, -0.25, 0.25);
glVertex3f(0.25, -0.25, -0.25);
glEnd;

glBegin(GL_QUADS);
glColor4f(0.0, 0.0, 1.0, 0.25);
glVertex3f(0.25, -0.25, 0.25);
glVertex3f(0.25, -0.25, -0.25);
glVertex3f(-0.25, -0.25, -0.25);
glVertex3f(-0.25, -0.25, 0.25);
glEnd;

glBegin(GL_QUADS);
glColor4f(1.0, 0.0, 0.0, 0.25);
glVertex3f(-0.25, -0.25, -0.25);
glVertex3f(-0.25, -0.25, 0.25);
glVertex3f(-0.25, 0.25, 0.25);
glVertex3f(-0.25, 0.25, -0.25);
glEnd;

glBegin(GL_QUADS);
glColor4f(0.25, 1.0, 0.5, 0.25);
glVertex3f(-0.25, 0.25, 0.25);
glVertex3f(-0.25, 0.25, -0.25);
glVertex3f(0.25, 0.25, -0.25);
glVertex3f(0.25, 0.25, 0.25);
glEnd;

glBegin(GL_QUADS);
glColor4f(0.5, 1.0, 0.25, 0.25);
glVertex3f(0.25, 0.25, 0.25);
glVertex3f(0.25, -0.25, 0.25);
glVertex3f(-0.25, -0.25, 0.25);
glVertex3f(-0.25, 0.25, 0.25);
glEnd;

glBegin(GL_QUADS);
glColor4f(0.0, 0.25, 0.5, 0.25);
glVertex3f(0.25, 0.25, -0.25);
glVertex3f(0.25, -0.25, -0.25);
glVertex3f(-0.25, -0.25, -0.25);
glVertex3f(-0.25, 0.25, -0.25);
glEnd;
glPopMatrix;
glPopMatrix;

glDisable(GL_DEPTH_TEST);
glFlush();
swapBuffers(DC);
endPaint(panel1.Handle,ps);
end;




procedure TForm1.Timer1Timer(Sender: TObject);
begin
drawS;
end;


procedure TForm1.Draws;
begin

px:=px+sx;
if px > 0.25-radS then
begin
sx:=-sx;
end else
if px < -0.25+radS then
begin
sx:=-sx;
end;

py:=py+sy;
if py > 0.25-radS then
begin
sy:=-sy;
end else
if py < -0.25+radS then
begin
sy:=-sy;
end;

pz:=pz+sz;
if pz > 0.25-radS then
begin
sz:=-sz;
end else
if pz < -0.25+radS then
begin
sz:=-sz;
end;

gltranslatef(px,py,pz);
InvalidateRect(handle, nil, false);

end;

procedure TForm1.DrawT;
begin

px:=px+spx;
if px > 0.25-radT then
begin
spx:=-spx;
end else
if px < -0.25+radT then
begin
spx:=-spx;
end;

py:=py+spy;
if py > 0.25-radT then
begin
spy:=-spy;
end else
if py < -0.25+radT then
begin
spy:=-spy;
end;

pz:=pz+spz;
if pz > 0.25-radT then
begin
spz:=-spz;
end else
if pz < -0.25+radT then
begin
spz:=-spz;
end;

gltranslatef(px,py,0);
InvalidateRect(handle, nil, false);

end;

procedure TForm1.Timer2Timer(Sender: TObject);
begin
drawt;
end;

end.[/CODE]
При установке Линукс не пострадало ни одного пингвина... Зато пострадало много дятлов..
Krechet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц