Адрюшка Rush
Адрюшка Rush

Закрасить грани куба OpenGL C++

Попытался закрасить грани куба, а вышло так что закрасился каркас куба. Что нужно исправить чтобы грани закрасились каждая определенным цветом?

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

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

#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_LINE );
glDepthFunc(GL_LEQUAL);
glShadeModel(GL_SMOOTH);
glEnable(GL_LINE_SMOOTH);
glHint(GL_LINE_SMOOTH_HINT, GL_NICEST);

ClientWidth = 400;
ClientHeight = 400;
}
//---------------------------------------------------------------------------
TForm1::~TForm1()
{
HGLRC context = wglGetCurrentContext();
wglMakeCurrent( NULL, NULL );
wglDeleteContext( context );
}
//---------------------------------------------------------------------------
void __fastcall TForm1::DisplayTimerTimer(TObject *Sender)
{
glClear( GL_COLOR_BUFFER_BIT );

glBegin(GL_QUADS);

glColor3f(1.0,0.0,0.0);
glVertex3f( -1, -1, -1);
glVertex3f( -1, 1, -1);
glVertex3f( -1, 1, 1);
glVertex3f( -1, -1, 1);

glColor3f(0.0,1.0,0.0);
glVertex3f( 1, -1, -1);
glVertex3f( 1, -1, 1);
glVertex3f( 1, 1, 1);
glVertex3f( 1, 1, -1);

glColor3f(0.0,0.0,1.0);
glVertex3f( -1, -1, -1);
glVertex3f( -1, -1, 1);
glVertex3f( 1, -1, 1);
glVertex3f( 1, -1, -1);

glColor3f(1.0,1.0,0.0);
glVertex3f( -1, 1, -1);
glVertex3f( -1, 1, 1);
glVertex3f( 1, 1, 1);
glVertex3f( 1, 1, -1);

glColor3f(1.0,0.0,1.0);
glVertex3f( -1, -1, -1);
glVertex3f( 1, -1, -1);
glVertex3f( 1, 1, -1);
glVertex3f( -1, 1, -1);

glColor3f(0.0,1.0,1.0);
glVertex3f( -1, -1, 1);
glVertex3f( 1, -1, 1);
glVertex3f( 1, 1, 1);
glVertex3f( -1, 1, 1);

glEnd();

glFinish();

glPopMatrix();

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

ИТ
Иришка Татарникова

Определите объекты класса
glRectangle
и закрашивайте нужным цветом.

Советую помимо этого определить точки источников света.
В зависимости от взаимного положения точки взгляда и источников можно задать функцию, вычисляющую освещённость грани в текущем положении относительно источника (каков наклон грани относительно источника) и регулировать цвет/оттенок грани при её движении.
Это будет классно.

Похожие вопросы
Периметр грани куба 36 см. найти площадь грани куба и обьем
можно ли программировать трехмерную графику в visual c++ без использования openGL или DirectX?
Как сделать куб в перспективе в C#
Помогите не могу решить ошибку C++ OPENGL
Кубик Рубик OpenGl C++
Углы между плоскостью и гранями куба
OPENGL. Текстурирование прямоугольника.
Помогите с C++. Проблема с OpenGL. Библиотека GLUT.
расписать подробно решение задачи Периметр грани куба=36см. Найдите площадь грани куба. Найдите объем куба.
OpenGL, C++, как сделать так чтобы нормально устанавливать вершины?