C++Builder
  Начало   Форум   Помощь Войти Регистрация  
Страниц: [1]   Вниз
  Печать  
Автор Тема: glPushMatrix() и glPopMatrix()  (Прочитано 1156 раз)
Sergey1985
Участник


Сказали спасибо: +8/-1
Offline

Сообщений: 310


glPushMatrix() и glPopMatrix()
« : 07 Сентябрь 2014, 13:01:54 »

Приветствую вас товарищи форумчане. Возник вопрос такого рода (приведу сразу код)
Код
#include 
#pragma hdrstop
 
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
       : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::PixelFormat()
{
 int nPixelFormat;
 TPixelFormatDescriptor pfd;
 memset(&pfd,0,sizeof(pfd));
 pfd.nVersion = 1;
 pfd.dwFlags = PFD_DOUBLEBUFFER+PFD_SUPPORT_OPENGL+
               PFD_DRAW_TO_WINDOW;
 pfd.iPixelType = PFD_TYPE_RGBA;
 pfd.cColorBits = 24;
 pfd.cAlphaBits = 64;
 pfd.cAccumBits = 64;
 pfd.cDepthBits = 32;
 pfd.cStencilBits = 64;
 pfd.iLayerType = PFD_MAIN_PLANE;
 
 nPixelFormat = ChoosePixelFormat(DC,&pfd);
 if (nPixelFormat!=0)
    SetPixelFormat(DC,nPixelFormat, &pfd);
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::FormCreate(TObject *Sender)
{
    DC = GetDC(Handle);
    PixelFormat();
    hrc = wglCreateContext(DC);
    wglMakeCurrent(DC, hrc);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Graph()
{
  TPaintStruct ps;
    BeginPaint(Handle,&ps);
    glClearColor(1,0.5,0.5,1);
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
 
    // ???? ???????
    if (CheckBox1->Checked)
     glEnable(GL_DEPTH_TEST);
 
// ???? ??????? ?????????????? ????????
    glPushMatrix();
 
    glRotated(5,0,1,0);
    glColor3f(0,1,0);
    glBegin(GL_QUAD_STRIP);
    glVertex3f(1.25,1.25,1.0);
    glVertex3f(1.25,-1.0,1.0);
    glVertex3f(-1.0,1.25,0);
    glVertex3f(-1.0,-1.0,0);
    glEnd();
 
    glPopMatrix();
 
    glColor3f(1,1,0);
    glBegin(GL_QUAD_STRIP);
    glVertex3f(1.0,1.0,0);
    glVertex3f(1.0,-1.25,0);
    glVertex3f(-1.25,1.0,1.0);
    glVertex3f(-1.25,-1.25,1.0);
    glEnd();
 
glDisable(GL_DEPTH_TEST);
 
   glFlush();
   SwapBuffers(DC);
   EndPaint(Handle,&ps);
}
void __fastcall TForm1::FormResize(TObject *Sender)
{
if (WidthHeight)
    glOrtho(-2,2,-2*Height/Width, 2*Height/Width, -10,10);
   else
    glOrtho(-2*Width/Height, 2*Width/Height, -2,2,-10,10);
 
    glViewport(0,0,Width,Height);
 
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormDestroy(TObject *Sender)
{
    wglMakeCurrent(0,0);
    wglDeleteContext(hrc);
    ReleaseDC(Handle,DC);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
     Graph();
}

Функциями glPushMatrix() и glPopMatrix() я хотел добиться того чтобы одна пластинка вращалась а другая стояла не месте. Но они либо вместе вращаются либо вместе стоят.
Знатоки OpenGL подскажите в чем дело.
« Последнее редактирование: 08 Сентябрь 2014, 07:35:57 от S0mbre » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  




....

Powered by SMF 1.1.21 | SMF © 2025, Simple Machines
Страница сгенерирована за 0.087 секунд. Запросов: 19.