МХ
Михаил Хромов

Кубик Рубик OpenGl C++

Недавно начал осваивать OpenGL, попытался сделать кубик рубика, но столкнулся с проблемой вращения его, до этого делал вращение только одного, а сейчас даже не знаю как сделать так чтобы вращались сразу 4. Если кто может, подскажите как сделать поворот например верхней и боковой стороны.

Мой код :

//---------------------------------------------------------------------------

#include
#include
#include
#include
#include
#include
#pragma hdrstop

int alpha=0, beta=0, gamma=0;

int x,y,z;

float diffuse[]={0.5, 0.5, 0.5, 1.0};
float lpos[]={-4.0, 4.0, -4.0, 1.0};
float black[]={0.0, 0.0, 0.0, 0.5};

#include "MainForms.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
TForm1::TForm1(TComponent* Owner) : TForm(Owner)
{
HDC dc = Canvas->Handle;

PIXELFORMATDESCRIPTOR pfd;
memset( &pfd, 0, sizeof pfd );
pfd.nSize = sizeof pfd;
pfd.cColorBits = 8;
pfd.cDepthBits = 8;
pfd.iPixelType = PFD_TYPE_RGBA;
pfd.iLayerType = PFD_MAIN_PLANE;
pfd.dwFlags = PFD_SUPPORT_OPENGL | PFD_GENERIC_ACCELERATED;

int index = ChoosePixelFormat( dc, &pfd );
SetPixelFormat( dc, index, NULL );

HGLRC context = wglCreateContext( dc );
wglMakeCurrent( dc, context );

glClearColor( 0, 0.2, 0.4, 1.0 );
glPolygonMode( GL_FRONT_AND_BACK, GL_FILL );
glDepthFunc(GL_LEQUAL);
glShadeModel(GL_SMOOTH);
glEnable(GL_LINE_SMOOTH);
glEnable(GL_DEPTH_TEST);

glEnable(GL_LIGHTING);
glLightModelfv(GL_LIGHT_MODEL_AMBIENT, black);
glEnable(GL_LIGHT0);
glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuse);
glLightfv(GL_LIGHT0, GL_POSITION, lpos);

glEnable(GL_COLOR_MATERIAL);
glColorMaterial(GL_FRONT_AND_BACK, GL_DIFFUSE);

glHint(GL_LINE_SMOOTH_HINT, GL_NICEST);
glEnableClientState( GL_VERTEX_ARRAY );
glEnableClientState( GL_COLOR_ARRAY );

ClientWidth = 500;
ClientHeight = 500;
}
//---------------------------------------------------------------------------
TForm1::~TForm1()
{
HGLRC context = wglGetCurrentContext();
wglMakeCurrent( NULL, NULL );
wglDeleteContext( context );
}
//---------------------------------------------------------------------------
void __fastcall TForm1::DisplayTimerTimer(TObject *Sender)
{
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
glPushMatrix();
glTranslatef(x, y, z);
glRotatef(alpha, 1, 0, 0);
glRotatef(beta, 0, 1, 0);
glRotatef(gamma, 0, 0, 1);
glScalef(0.5, 0.5, 0.5);

glBegin(GL_QUADS);

// Координаты куба

glEnd();

// + 7 кубов

glFinish();

glPopMatrix();

SwapBuffers( Canvas->Handle );
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormResize(TObject *Sender)
{
glViewport( 0, 0, ClientWidth, ClientHeight );
}
//---------------------------------------------------------------------------

НК
Наташа Кушнир

Чувак та весь нет забит етими примерами.

Похожие вопросы
Что делать? (кубик рубик)
Как собрать кубик рубика
как собрать кубик рубик
Какой кубик-рубик лучше купить?
помогите с кубиком рубиком
сборка кубика рубика.
Пересборка кубика рубика
почему кубик-рубик, а не рубик кубик например?)) ) юморите уже)))
Чем покрасить кубик рубика? На кубике рубика обесцветились наклейки. Чем покрасить?
Кубика рубика.