
Язык программирования:
C/C++
Среда программирования:
Visual Studio 2015
#include <glut.h> int X = 200;//размер экрана int XS = 100;//грань куба int Angel1 = 0; int Angel2 = 0; int Angel3 = 0; int Angel4 = 0; void Draw() { glClear(GL_COLOR_BUFFER_BIT); glPushMatrix();//матрица для анимации : сохраняем glRotatef(Angel1, 1, 0, 0); glRotatef(Angel2, 0, 1, 0); glRotatef(Angel3, 0, 0, 1); glRotatef(Angel4, 1, 0, 0); glLineStipple(1, 0X00FF); // устанавливаем маску glHint(GL_LINE_SMOOTH_HINT, GL_NICEST);//далее сглаживаем линии glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glEnable(GL_LINE_SMOOTH); glLineWidth(4);//далее строим каркас внутри кубика glBegin(GL_LINES); glColor3d(0, 0, 0); glVertex3f(-XS, -XS, -XS); glVertex3f(XS, XS, -XS); glVertex3f(XS, -XS, -XS); glVertex3f(-XS, XS, -XS); glEnd();//ok glLineWidth(3); glBegin(GL_LINES); glColor3d(0, 0, 0); glVertex3f(-XS, -XS, XS); glVertex3f(XS, XS, XS); glVertex3f(XS, -XS, XS); glVertex3f(-XS, XS, XS); glEnd();//ok glLineWidth(3); glBegin(GL_LINES); glColor3d(0, 0, 0); glVertex3f(XS, -XS, -XS); glVertex3f(-XS, -XS, XS); glVertex3f(XS, -XS, XS); glVertex3f(-XS, -XS, -XS); glEnd();//ok glLineWidth(3); glBegin(GL_LINES); glColor3d(0, 0, 0); glVertex3f(XS, XS, -XS); glVertex3f(-XS, XS, XS); glVertex3f(XS, XS, XS); glVertex3f(-XS, XS, -XS); glEnd();//ok glLineWidth(3); glBegin(GL_LINES); glColor3d(0, 0, 0); glVertex3f(-XS, -XS, -XS); glVertex3f(-XS, XS, XS); glVertex3f(-XS, XS, -XS); glVertex3f(-XS, -XS, XS); glEnd();//ok glLineWidth(3); glBegin(GL_LINES); glColor3d(0, 0, 0); glVertex3f(XS, -XS, -XS); glVertex3f(XS, XS, XS); glVertex3f(XS, XS, -XS); glVertex3f(XS, -XS, XS); glEnd();//ok glEnable(GL_LINE_STIPPLE); // разрешаем рисовать прерывистую линию glLineWidth(1); glBegin(GL_LINE_LOOP);//далее строим сам кубик glColor3d(0, 0, 0); glVertex3f(-XS, -XS, -XS); glVertex3f(XS, -XS, -XS); glVertex3f(XS, XS, -XS); glVertex3f(-XS, XS, -XS); glVertex3f(-XS, -XS, -XS); glEnd(); glBegin(GL_LINE_LOOP); glColor3d(0, 0, 0); glVertex3f(-XS, -XS, XS); glVertex3f(XS, -XS, XS); glVertex3f(XS, XS, XS); glVertex3f(-XS, XS, XS); glVertex3f(-XS, -XS, XS); glEnd(); glBegin(GL_LINES); glColor3d(0, 0, 0); glVertex3f(-XS, -XS, XS); glVertex3f(-XS, -XS, -XS); glVertex3f(XS, -XS, XS); glVertex3f(XS, -XS, -XS); glVertex3f(XS, XS, XS); glVertex3f(XS, XS, -XS); glVertex3f(-XS, XS, XS); glVertex3f(-XS, XS, -XS); glEnd(); glDisable(GL_LINE_STIPPLE); glDisable(GL_LINE_SMOOTH); glPopMatrix();//сбрасываем нашу матрицу glutSwapBuffers(); } void Timer(int)//uнст-ция по анимации { if (Angel1 < 90) Angel1++; else { if (Angel2 < 90) Angel2++; else { if (Angel3 < 90) Angel3++; else { if (Angel4 < 90) Angel4++; else { Angel1 = 0;//обнуляем Angel2 = 0; Angel3 = 0; Angel4 = 0; } } } } //Angel2++; glutPostRedisplay(); //обновляем экран glutTimerFunc(20, Timer, 0); } void Initialize() { glClearColor(1.0, 1.0, 1.0, 1.0); glMatrixMode(GL_PROJECTION);//тип матрицы - проекции glLoadIdentity();//сброс матриц glOrtho(-X, X, -X, X, -X, X);//сетка glMatrixMode(GL_MODELVIEW); } int main(int argc, char** argv)//кол арг в командн строке,их опис в виде указателя на строка { //инициализация glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB); glutInitWindowSize(X*2, X*2); glutInitWindowPosition(200, 200); glutCreateWindow("Kube"); glutDisplayFunc(Draw); glRotatef(55, 1, 0, 0);//поворачиваем наш кубик так, чтобы рисунок совпал в звездочку glRotatef(45, 0, 0, 1); glutTimerFunc(20, Timer, 0);//анимация таймер ф-я нужна в милисек. Initialize(); glutMainLoop();/* Запуск механизма обработки событий */ return 0; }
Прикрепленный файл | Размер |
---|---|
hahulina_demo_cube.zip | 13.35 кб |