|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
08.02.2010, 19:31 | #1 |
Пользователь
Регистрация: 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]
При установке Линукс не пострадало ни одного пингвина... Зато пострадало много дятлов..
|