/* #include */ #include #include #include #include #include #include // cella tipus definialasa typedef struct _cell { int id; int x, y; float min, max; float value; float step; char* format; } cell; cell rotate1[4] = { //glRotatef(45, 0.5f, 1.0f, 0.5f); { 1, 160, 60, -360.0f, 360.0f, 45.0f, 1.0f, "%.2f" }, { 2, 240, 60, -1.0f, 1.0f, 0.5f, 0.01f, "%.2f" }, { 3, 300, 60, -1.0f, 1.0f, 1.0f, 0.01f, "%.2f" }, { 4, 360, 60, -1.0f, 1.0f, 0.5f, 0.01f, "%.2f" } }; cell color[3] = { //glColor3f(0.5, 0.5, 0.5); { 5, 180, 90, 0.0f, 1.0f, 0.5f, 0.005f, "%.2f" }, { 6, 240, 90, 0.0f, 1.0f, 0.5f, 0.005f, "%.2f" }, { 7, 300, 90, 0.0f, 1.0f, 0.5f, 0.005f, "%.2f" } }; cell scale1[3] = { //glScalef(1.2, 0.7, 2.0); { 8, 180, 170, 0.0f, 3.0f, 1.2f, 0.01f, "%.2f" }, { 9, 240, 170, 0.0f, 3.0f, 0.7f, 0.01f, "%.2f" }, { 10, 300, 170, 0.0f, 3.0f, 2.0f, 0.01f, "%.2f" } }; cell translate1[3] = { //glTranslatef(0.0, 17.5, 0.0); { 11, 180, 280, -100.0f, 100.0f, 0.0f, 2.0f, "%.2f" }, { 12, 260, 280, -100.0f, 100.0f, 17.5f, 2.0f, "%.2f" }, { 13, 340, 280, -100.0f, 100.0f, 0.0f, 2.0f, "%.2f" } }; cell rotate2[4] = { //glRotatef(yRot, 0.0f, 1.0f, 0.0f); { 14, 160, 310, -360.0f, 360.0f, 10.0f, 1.0f, "%.2f" }, { 15, 240, 310, -1.0f, 1.0f, 0.0f, 0.01f, "%.2f" }, { 16, 300, 310, -1.0f, 1.0f, 1.0f, 0.01f, "%.2f" }, { 17, 360, 310, -1.0f, 1.0f, 0.0f, 0.01f, "%.2f" } }; cell scale2[3] = { //glScalef(1.0, 0.7, 1.7); { 18, 180, 390, 0.0f, 3.0f, 1.0f, 0.01f, "%.2f" }, { 19, 240, 390, 0.0f, 3.0f, 0.7f, 0.01f, "%.2f" }, { 20, 300, 390, 0.0f, 3.0f, 1.7f, 0.01f, "%.2f" } }; cell translate2[3] = { //glTranslatef(0.0, -1.5, 17.0); { 21, 200, 530, -100.0f, 100.0f, 0.0f, 2.0f, "%.2f" }, { 22, 280, 530, -100.0f, 100.0f, -1.5f, 2.0f, "%.2f" }, { 23, 360, 530, -100.0f, 100.0f, 17.0f, 2.0f, "%.2f" } }; cell rotate3[4] = { //glRotatef(xRot, 1.0f, 0.0f, 0.0f); { 24, 180, 560, -360.0f, 360.0f, 10.0f, 1.0f, "%.2f" }, { 25, 260, 560, -1.0f, 1.0f, 1.0f, 0.01f, "%.2f" }, { 26, 320, 560, -1.0f, 1.0f, 0.0f, 0.01f, "%.2f" }, { 27, 380, 560, -1.0f, 1.0f, 0.0f, 0.01f, "%.2f" } }; cell scale3[3] = { //glScalef(1.0, 1.0, 7.0); { 28, 180, 590, 0.0f, 10.0f, 1.0f, 0.01f, "%.2f" }, { 29, 240, 590, 0.0f, 10.0f, 1.0f, 0.01f, "%.2f" }, { 30, 300, 590, 0.0f, 10.0f, 7.0f, 0.10f, "%.2f" } }; cell translate3[3] = { //glTranslatef(0.0, 0.0, 2.5); { 31, 200, 620, -100.0f, 100.0f, 0.0f, 2.0f, "%.2f" }, { 32, 280, 620, -100.0f, 100.0f, 0.0f, 2.0f, "%.2f" }, { 33, 360, 620, -100.0f, 100.0f, 2.5f, 0.5f, "%.2f" } }; cell rotate12[4] = { { 34, 160, 60, 0.0f, 0.0f, 0.0f, 0.0f, "%.2f" }, { 35, 240, 60, 0.0f, 0.0f, 0.0f, 0.0f, "%.2f" }, { 36, 300, 60, 0.0f, 0.0f, 0.0f, 0.0f, "%.2f" }, { 37, 360, 60, 0.0f, 0.0f, 0.0f, 0.0f, "%.2f" } }; cell rotate22[4] = { { 38, 160, 310, 0.0f, 0.0f, 0.0f, 0.0f, "%.2f" }, { 39, 240, 310, 0.0f, 0.0f, 0.0f, 0.0f, "%.2f" }, { 40, 300, 310, 0.0f, 0.0f, 0.0f, 0.0f, "%.2f" }, { 41, 360, 310, 0.0f, 0.0f, 0.0f, 0.0f, "%.2f" } }; cell rotate32[4] = { { 42, 180, 560, 0.0f, 0.0f, 0.0f, 0.0f, "%.2f" }, { 43, 260, 560, 0.0f, 0.0f, 0.0f, 0.0f, "%.2f" }, { 44, 320, 560, 0.0f, 0.0f, 0.0f, 0.0f, "%.2f" }, { 45, 380, 560, 0.0f, 0.0f, 0.0f, 0.0f, "%.2f" } }; cell translate12[3] = { { 46, 180, 280, 0.0f, 0.0f, 0.0f, 0.0f, "%.2f" }, { 47, 260, 280, 0.0f, 0.0f, 0.0f, 0.0f, "%.2f" }, { 48, 340, 280, 0.0f, 0.0f, 0.0f, 0.0f, "%.2f" } }; cell translate22[3] = { { 49, 200, 530, 0.0f, 0.0f, 0.0f, 0.0f, "%.2f" }, { 50, 280, 530, 0.0f, 0.0f, 0.0f, 0.0f, "%.2f" }, { 51, 360, 530, 0.0f, 0.0f, 0.0f, 0.0f, "%.2f" } }; cell translate32[3] = { { 52, 200, 620, 0.0f, 0.0f, 0.0f, 0.0f, "%.2f" }, { 53, 280, 620, 0.0f, 0.0f, 0.0f, 0.0f, "%.2f" }, { 54, 360, 620, 0.0f, 0.0f, 0.0f, 0.0f, "%.2f" } }; //------------------------------------------------- tank 1 -------------------------------------------- cell Rotate1[4] = { //glRotatef(45, 0.5f, 1.0f, 0.5f); { 55, 160, 60, -360.0f, 360.0f, 45.0f, 1.0f, "%.2f" }, { 56, 240, 60, -1.0f, 1.0f, 0.5f, 0.01f, "%.2f" }, { 57, 300, 60, -1.0f, 1.0f, 1.0f, 0.01f, "%.2f" }, { 58, 360, 60, -1.0f, 1.0f, 0.5f, 0.01f, "%.2f" } }; cell Color[3] = { //glColor3f(0.5, 0.5, 0.5); { 59, 180, 90, 0.0f, 1.0f, 0.5f, 0.005f, "%.2f" }, { 60, 240, 90, 0.0f, 1.0f, 0.5f, 0.005f, "%.2f" }, { 61, 300, 90, 0.0f, 1.0f, 0.5f, 0.005f, "%.2f" } }; cell Scale1[3] = { //glScalef(1.2, 0.7, 2.0); { 62, 180, 170, 0.0f, 3.0f, 1.2f, 0.01f, "%.2f" }, { 63, 240, 170, 0.0f, 3.0f, 0.7f, 0.01f, "%.2f" }, { 64, 300, 170, 0.0f, 3.0f, 2.0f, 0.01f, "%.2f" } }; cell Translate1[3] = { //glTranslatef(0.0, 17.5, 0.0); { 65, 200, 320, -100.0f, 100.0f, 0.0f, 2.0f, "%.2f" }, { 66, 280, 320, -100.0f, 100.0f, 17.5f, 2.0f, "%.2f" }, { 67, 360, 320, -100.0f, 100.0f, 0.0f, 2.0f, "%.2f" } }; cell Rotate2[4] = { //glRotatef(yRot, 0.0f, 1.0f, 0.0f); { 68, 180, 350, -360.0f, 360.0f, 10.0f, 1.0f, "%.2f" }, { 69, 260, 350, -1.0f, 1.0f, 0.0f, 0.01f, "%.2f" }, { 70, 320, 350, -1.0f, 1.0f, 1.0f, 0.01f, "%.2f" }, { 71, 380, 350, -1.0f, 1.0f, 0.0f, 0.01f, "%.2f" } }; cell Scale2[3] = { //glScalef(1.0, 0.7, 1.7); { 72, 180, 380, 0.0f, 3.0f, 1.0f, 0.01f, "%.2f" }, { 73, 240, 380, 0.0f, 3.0f, 0.7f, 0.01f, "%.2f" }, { 74, 300, 380, 0.0f, 3.0f, 1.7f, 0.01f, "%.2f" } }; cell Rotate3[4] = { //glRotatef(xRot, 1.0f, 0.0f, 0.0f); { 75, 180, 520, -360.0f, 360.0f, 10.0f, 1.0f, "%.2f" }, { 76, 260, 520, -1.0f, 1.0f, 0.0f, 0.01f, "%.2f" }, { 77, 320, 520, -1.0f, 1.0f, 1.0f, 0.01f, "%.2f" }, { 78, 380, 520, -1.0f, 1.0f, 0.0f, 0.01f, "%.2f" } }; cell Translate2[3] = { //glTranslatef(0.0, 0.0, 2.5); { 79, 200, 550, -100.0f, 100.0f, 0.0f, 2.0f, "%.2f" }, { 80, 280, 550, -100.0f, 100.0f, 16.0f, 2.0f, "%.2f" }, { 81, 360, 550, -100.0f, 100.0f, 17.0f, 2.0f, "%.2f" } }; cell Rotate4[4] = { //glRotatef(xRot, 1.0f, 0.0f, 0.0f); { 82, 180, 580, -360.0f, 360.0f, 10.0f, 1.0f, "%.2f" }, { 83, 260, 580, -1.0f, 1.0f, 1.0f, 0.01f, "%.2f" }, { 84, 320, 580, -1.0f, 1.0f, 0.0f, 0.01f, "%.2f" }, { 85, 380, 580, -1.0f, 1.0f, 0.0f, 0.01f, "%.2f" } }; cell Scale3[3] = { //glScalef(1.0, 1.0, 7.0); { 86, 180, 610, 0.0f, 10.0f, 1.0f, 0.01f, "%.2f" }, { 87, 240, 610, 0.0f, 10.0f, 1.0f, 0.01f, "%.2f" }, { 88, 300, 610, 0.0f, 10.0f, 7.0f, 0.10f, "%.2f" } }; cell Translate3[3] = { //glTranslatef(0.0, 0.0, 2.5); { 89, 200, 640, -100.0f, 100.0f, 0.0f, 2.0f, "%.2f" }, { 90, 280, 640, -100.0f, 100.0f, 0.0f, 2.0f, "%.2f" }, { 91, 360, 640, -100.0f, 100.0f, 2.5f, 0.5f, "%.2f" } }; cell Rotate12[4] = { //glRotatef(45, 0.5f, 1.0f, 0.5f); { 92, 160, 60, 0.0f, 0.0f, 0.0f, 0.0f, "%.2f" }, { 93, 240, 60, 0.0f, 0.0f, 0.0f, 0.0f, "%.2f" }, { 94, 300, 60, 0.0f, 0.0f, 0.0f, 0.0f, "%.2f" }, { 95, 360, 60, 0.0f, 0.0f, 0.0f, 0.0f, "%.2f" } }; cell Translate12[3] = { //glTranslatef(0.0, 17.5, 0.0); { 96, 200, 320, 0.0f, 0.0f, 0.0f, 0.0f, "%.2f" }, { 97, 280, 320, 0.0f, 0.0f, 0.0f, 0.0f, "%.2f" }, { 98, 360, 320, 0.0f, 0.0f, 0.0f, 0.0f, "%.2f" } }; cell Rotate22[4] = { //glRotatef(yRot, 0.0f, 1.0f, 0.0f); { 99, 180, 350, 0.0f, 0.0f, 0.0f, 0.0f, "%.2f" }, { 100, 260, 350, 0.0f, 0.0f, 0.0f, 0.0f, "%.2f" }, { 101, 320, 350, 0.0f, 0.0f, 0.0f, 0.0f, "%.2f" }, { 102, 380, 350, 0.0f, 0.0f, 0.0f, 0.0f, "%.2f" } }; cell Rotate32[4] = { //glRotatef(xRot, 1.0f, 0.0f, 0.0f); { 103, 180, 520, 0.0f, 0.0f, 0.0f, 0.0f, "%.2f" }, { 104, 260, 520, 0.0f, 0.0f, 0.0f, 0.0f, "%.2f" }, { 105, 320, 520, 0.0f, 0.0f, 0.0f, 0.0f, "%.2f" }, { 106, 380, 520, 0.0f, 0.0f, 0.0f, 0.0f, "%.2f" } }; cell Translate22[3] = { //glTranslatef(0.0, 0.0, 2.5); { 107, 200, 550, 0.0f, 0.0f, 0.0f, 0.0f, "%.2f" }, { 108, 280, 550, 0.0f, 0.0f, 0.0f, 0.0f, "%.2f" }, { 109, 360, 550, 0.0f, 0.0f, 0.0f, 0.0f, "%.2f" } }; cell Rotate42[4] = { //glRotatef(xRot, 1.0f, 0.0f, 0.0f); { 110, 180, 580, 0.0f, 0.0f, 0.0f, 0.0f, "%.2f" }, { 111, 260, 580, 0.0f, 0.0f, 0.0f, 0.0f, "%.2f" }, { 112, 320, 580, 0.0f, 0.0f, 0.0f, 0.0f, "%.2f" }, { 113, 380, 580, 0.0f, 0.0f, 0.0f, 0.0f, "%.2f" } }; cell Translate32[3] = { //glTranslatef(0.0, 0.0, 2.5); { 114, 200, 640, 0.0f, 0.0f, 0.0f, 0.0f, "%.2f" }, { 115, 280, 640, 0.0f, 0.0f, 0.0f, 0.0f, "%.2f" }, { 116, 360, 640, 0.0f, 0.0f, 0.0f, 0.0f, "%.2f" } }; int tank1 = GL_TRUE; int part = 3; void redisplay_all(void); void screen_menu(int); GLuint window, balAblak, jobbAblak; GLuint sub_width = 512, sub_height = 256; GLint selection = 0; GLvoid *font_style = GLUT_BITMAP_TIMES_ROMAN_10; static float r1Init[] = {45.0, 0.5, 1.0, 0.5 }; static float colorInit[] = {0.5, 0.5, 0.5}; static float s1Init[] = {1.2, 0.7, 2.0}; static float t1Init[] = {0.0, 17.5, 0.0}; static float r2Init[] = {10.0, 0.0, 1.0, 0.0}; static float s2Init[] = {1.0, 0.7, 1.7}; static float t2Init[] = {0.0, -1.5, 17.0}; static float r3Init[] = {10.0, 1.0, 0.0, 0.0}; static float s3Init[] = {1.0, 1.0, 7.0}; static float t3Init[] = {0.0, 0.0, 2.5}; static float r12Init[] = {0.0, 0.0, 0.0, 0.0}; static float r22Init[] = {0.0, 0.0, 0.0, 0.0}; static float r32Init[] = {0.0, 0.0, 0.0, 0.0}; static float t12Init[] = {0.0, 0.0, 0.0}; static float t22Init[] = {0.0, 0.0, 0.0}; static float t32Init[] = {0.0, 0.0, 0.0}; static float R1Init[] = {45.0, 0.5, 1.0, 0.5 }; static float ColorInit[] = {0.5, 0.5, 0.5}; static float S1Init[] = {1.2, 0.7, 2.0}; static float T1Init[] = {0.0, 17.5, 0.0}; static float R2Init[] = {10.0, 0.0, 1.0, 0.0}; static float S2Init[] = {1.0, 0.7, 1.7}; static float R3Init[] = {10.0, 1.0, 0.0, 0.0}; static float T2Init[] = {0.0, 16.0, 17.0}; static float R4Init[] = {10.0, 0.0, 1.0, 0.0}; static float S3Init[] = {1.0, 1.0, 7.0}; static float T3Init[] = {0.0, 0.0, 2.5}; static float R12Init[] = {0.0, 0.0, 0.0, 0.0 }; static float T12Init[] = {0.0, 0.0, 0.0}; static float R22Init[] = {0.0, 0.0, 0.0, 0.0}; static float R32Init[] = {0.0, 0.0, 0.0, 0.0}; static float T22Init[] = {0.0, 0.0, 0.0}; static float R42Init[] = {0.0, 0.0, 0.0, 0.0}; static float T32Init[] = {0.0, 0.0, 0.0}; //--------------------------------------------------SZOVEG KIRATAS fuggvenyei----------------------------------------------- void setfont(char* name, int size) { font_style = GLUT_BITMAP_HELVETICA_10; if (strcmp(name, "helvetica") == 0) { if (size == 12) font_style = GLUT_BITMAP_HELVETICA_12; else if (size == 18) font_style = GLUT_BITMAP_HELVETICA_18; } else if (strcmp(name, "times roman") == 0) { font_style = GLUT_BITMAP_TIMES_ROMAN_10; if (size == 24) font_style = GLUT_BITMAP_TIMES_ROMAN_24; } else if (strcmp(name, "8x13") == 0) { font_style = GLUT_BITMAP_8_BY_13; } else if (strcmp(name, "9x15") == 0) { font_style = GLUT_BITMAP_9_BY_15; } } void drawstr(GLuint x, GLuint y, char* format, ...) { va_list args; char buffer[255], *s; va_start(args, format); vsprintf(buffer, format, args); va_end(args); glRasterPos2i(x, y); for (s = buffer; *s; s++) glutBitmapCharacter(font_style, *s); } //------------------------------------------------- CELLA fuggvenyei----------------------------------------------- void cell_draw(cell* cell) { glColor3ub(0, 255, 128); if (selection == cell->id) { //cell.id glColor3ub(255, 255, 0); } drawstr(cell->x, cell->y, cell->format, cell->value); } void cell_draw_inaktiv(cell* cell) { //glColor3ub(128, 128, 128); glColor3ub(50, 50, 50); if (selection == cell->id) { //cell.id //glColor3ub(128, 128, 128); glColor3ub(50, 50, 50); } drawstr(cell->x, cell->y, cell->format, cell->value); } int cell_hit(cell* cell, int x, int y) { if (x > cell->x && x < cell->x + 60 && y > cell->y-20 && y < cell->y+10) return cell->id; return 0; } void cell_update(cell* cell, int update) { if (selection != cell->id) return; cell->value += update * cell->step; if (cell->value < cell->min) cell->value = cell->min; else if (cell->value > cell->max) cell->value = cell->max; } void cell_vector(float* dst, cell* cell, int num) { while (--num >= 0) dst[num] = cell[num].value; } void drawmodel(void) { GLfloat vals[70]; if (tank1) { cell_vector (vals, Rotate1, sizeof(R1Init)/sizeof(float)); cell_vector (vals, Color, sizeof(ColorInit)/sizeof(float)); cell_vector (vals, Scale1, sizeof(S1Init)/sizeof(float)); cell_vector (vals, Translate1, sizeof(T1Init)/sizeof(float)); cell_vector (vals, Rotate2, sizeof(R2Init)/sizeof(float)); cell_vector (vals, Scale2, sizeof(S2Init)/sizeof(float)); cell_vector (vals, Rotate3, sizeof(R3Init)/sizeof(float)); cell_vector (vals, Translate2, sizeof(T2Init)/sizeof(float)); cell_vector (vals, Rotate4, sizeof(R4Init)/sizeof(float)); cell_vector (vals, Scale3, sizeof(S3Init)/sizeof(float)); cell_vector (vals, Translate3, sizeof(T3Init)/sizeof(float)); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); glShadeModel(GL_FLAT); glEnable(GL_DEPTH_TEST); glPushMatrix(); glRotatef(Rotate1[0].value, Rotate1[1].value, Rotate1[2].value, Rotate1[3].value); glColor3f(Color[0].value, Color[1].value, Color[2].value); glPushMatrix(); glScalef(Scale1[0].value, Scale1[1].value, Scale1[2].value); glutSolidCube(30); glPopMatrix(); if(part > 1) { glPushMatrix(); glTranslatef(Translate1[0].value, Translate1[1].value, Translate1[2].value); glRotatef(Rotate2[0].value, Rotate2[1].value, Rotate2[2].value, Rotate2[3].value); glScalef(Scale2[0].value, Scale2[1].value, Scale2[2].value); glutSolidCube(20); glPopMatrix(); } if(part > 2) { glPushMatrix(); glRotatef(Rotate3[0].value, Rotate3[1].value, Rotate3[2].value, Rotate3[3].value); glTranslatef(Translate2[0].value, Translate2[1].value, Translate2[2].value); glRotatef(Rotate4[0].value, Rotate4[1].value, Rotate4[2].value, Rotate4[3].value); glScalef(Scale3[0].value, Scale3[1].value, Scale3[2].value); glTranslatef(Translate3[0].value, Translate3[1].value, Translate3[2].value); glutSolidCube(5); glPopMatrix(); } glPopMatrix(); } else { cell_vector (vals, rotate1, sizeof(r1Init)/sizeof(float)); cell_vector (vals, color, sizeof(colorInit)/sizeof(float)); cell_vector (vals, scale1, sizeof(s1Init)/sizeof(float)); cell_vector (vals, translate1, sizeof(t1Init)/sizeof(float)); cell_vector (vals, rotate2, sizeof(r2Init)/sizeof(float)); cell_vector (vals, scale2, sizeof(s2Init)/sizeof(float)); cell_vector (vals, translate2, sizeof(t2Init)/sizeof(float)); cell_vector (vals, rotate3, sizeof(r3Init)/sizeof(float)); cell_vector (vals, scale3, sizeof(s3Init)/sizeof(float)); cell_vector (vals, translate3, sizeof(t3Init)/sizeof(float)); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); glShadeModel(GL_FLAT); glEnable(GL_DEPTH_TEST); glPushMatrix(); glRotatef(rotate1[0].value, rotate1[1].value, rotate1[2].value, rotate1[3].value); glColor3f(color[0].value, color[1].value, color[2].value); glPushMatrix(); glScalef(scale1[0].value, scale1[1].value, scale1[2].value); glutSolidCube(30); glPopMatrix(); if(part > 1) { glTranslatef(translate1[0].value, translate1[1].value, translate1[2].value); glRotatef(rotate2[0].value, rotate2[1].value, rotate2[2].value, rotate2[3].value); glPushMatrix(); glScalef(scale2[0].value, scale2[1].value, scale2[2].value); glutSolidCube(20); glPopMatrix(); } if(part > 2) { glPushMatrix(); glTranslatef(translate2[0].value, translate2[1].value, translate2[2].value); glRotatef(rotate3[0].value, rotate3[1].value, rotate3[2].value, rotate3[3].value); glScalef(scale3[0].value, scale3[1].value, scale3[2].value); glTranslatef(translate3[0].value, translate3[1].value, translate3[2].value); glutSolidCube(5); glPopMatrix(); } glPopMatrix(); } glutSwapBuffers(); } //------------------------------------------ OpenGL ablakok ------------------------------------------------------------- void foAblak_reshape(int width, int height) { glViewport(0, 0, width, height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluOrtho2D(0, width, height, 0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); #define RES 15 sub_width = (width-RES*3)/2.0; sub_height = (height-RES*2); glutSetWindow(balAblak); glutPositionWindow(RES, RES); glutReshapeWindow(sub_width, sub_height); glutSetWindow(jobbAblak); glutPositionWindow(RES+sub_width+RES, RES); glutReshapeWindow(sub_width, sub_height); } void foAblak_display(void) { glClearColor(0.8f, 0.8f, 0.8f, 0.0); // hatterszin beallitas glClear(GL_COLOR_BUFFER_BIT); //magat a szinballitasi muveletet vegzi glColor3ub(0, 0, 0); // szoveg szin beallitas setfont("helvetica", 12); //szoveg betutipusanak es szoveg meretenek beallitasa drawstr(RES, RES-5, "bal ablak"); // maganak a szovegnek a kiiratasa az aktualis poziciora drawstr(RES+sub_width+RES, RES-5, "jobb ablak"); glutSwapBuffers(); } //-------------------------------------------BAL oldali ablak------------------------------------------------------- void balAblak_reshape(int width, int height) { GLfloat nRange = 80.0f; if(height == 0) height = 1; glViewport(0, 0, width, height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); if (width <= height) glOrtho (-nRange, nRange, -nRange*height/width, nRange*height/width, -nRange, nRange); else glOrtho (-nRange*width/height, nRange*width/height, -nRange, nRange, -nRange, nRange); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); } void balAblak_display(void) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); //glPushMatrix(); drawmodel(); //glPopMatrix(); glutSwapBuffers(); } //-------------------------------------------JOBB oldali ablak-------------------------------------------------------- void jobbAblak_reshape(int width, int height) { glViewport(0, 0, width, height); //kepmezo megadasa glMatrixMode(GL_PROJECTION); //megadjuk mely muveletek, mely transzformaciora vonatkoznak glLoadIdentity(); //a kurrens matrixot az egysegmatrixszal felulirja gluOrtho2D(0, width, height, 0); //meroleges vetites glMatrixMode(GL_MODELVIEW); //mely muveletek, mely transzformaciora vonatkoznak glLoadIdentity(); //a kurrens matrixot az egysegmatrixszal felulirja glClearColor(0.0, 0.0, 0.0, 0.0); //hatterszin beallitasa } void command_draw_translate(GLuint ypos) { drawstr(60, ypos, "glTranslatef ("); drawstr(250, ypos, ","); drawstr(330, ypos, ","); drawstr(420, ypos, ");"); } void command_draw_translate2(GLuint ypos) { drawstr(80, ypos, "glTranslatef ("); drawstr(270, ypos, ","); drawstr(350, ypos, ","); drawstr(440, ypos, ");"); } void command_draw_rotate(GLuint ypos) { drawstr(60, ypos, "glRotatef ("); drawstr(230, ypos, ","); drawstr(290, ypos, ","); drawstr(350, ypos, ","); drawstr(410, ypos, ");"); } void command_draw_rotate2(GLuint ypos) { drawstr(80, ypos, "glRotatef ("); drawstr(250, ypos, ","); drawstr(310, ypos, ","); drawstr(370, ypos, ","); drawstr(430, ypos, ");"); } void command_draw_scale(GLuint ypos) { drawstr(40, ypos, "glScalef ("); drawstr(190, ypos, ","); drawstr(250, ypos, ","); drawstr(310, ypos, ");"); } void command_draw_scale2(GLuint ypos) { drawstr(80, ypos, "glScalef ("); drawstr(230, ypos, ","); drawstr(290, ypos, ","); drawstr(350, ypos, ");"); } void command_draw_color(GLuint ypos) { drawstr(60, ypos, "glColor3f ("); drawstr(230, ypos, ","); drawstr(290, ypos, ","); drawstr(350, ypos, ");"); } void jobbAblak_display(void) { int i; glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); setfont("helvetica", 18); if (tank1) { glColor3ub(255, 0, 0); drawstr(300, 30, "Tank1"); glColor3ub(255, 255, 255); if(part > 1) { drawstr(10, 30, "1."); drawstr(40, 30, "glPushMatrix ();"); } drawstr(10, 60, "2."); command_draw_rotate(Rotate1[0].y); drawstr(10, 90, "3."); if(part > 1) drawstr(10, 140, "4."); command_draw_color(Color[0].y); drawstr(60, 140, "glPushMatrix ();"); drawstr(10, 170, "5."); command_draw_scale2(Scale1[0].y); drawstr(10, 200, "6."); drawstr(80, 200, "glutSolidCube(30); // vehicle"); if(part > 1) { drawstr(10, 230, "7."); glColor3ub(255, 255, 255); drawstr(60, 230, "glPopMatrix();"); drawstr(10, 290, "8."); drawstr(60, 290, "glPushMatrix ();"); drawstr(10, 320, "9."); command_draw_translate2(Translate1[0].y); drawstr(10, 350, "10."); command_draw_rotate2(Rotate2[0].y); drawstr(10, 380, "11."); command_draw_scale2(Scale2[0].y); drawstr(10, 410, "12."); drawstr(80, 410, "glutSolidCube(20); // tower"); drawstr(10, 440, "13."); drawstr(60, 440, "glPopMatrix();"); } if(part > 2) { drawstr(10, 490, "14."); drawstr(60, 490, "glPushMatrix();"); drawstr(10, 520, "15."); command_draw_rotate2(Rotate3[0].y); drawstr(10, 550, "16."); command_draw_translate2(Translate2[0].y); drawstr(10, 580, "17."); command_draw_rotate2(Rotate4[0].y); drawstr(10, 610, "18."); command_draw_scale2(Scale3[0].y); drawstr(10, 640, "19."); command_draw_translate2(Translate3[0].y); drawstr(10, 670, "20."); drawstr(80, 670, "glutSolidCube(5); // gun"); drawstr(10, 700, "21."); drawstr(60, 700, "glPopMatrix();"); } if(part > 1) { drawstr(10, 730, "22."); drawstr(40, 730, "glPopMatrix();"); } for (i = 0; i < 4; i++) { cell_draw(&Rotate1[i]);} for (i = 0; i < 3; i++) { cell_draw(&Color[i]);} for (i = 0; i < 3; i++) { cell_draw(&Scale1[i]);} if(part > 1) { for (i = 0; i < 3; i++) { cell_draw(&Translate1[i]);} for (i = 0; i < 4; i++) { cell_draw(&Rotate2[i]);} for (i = 0; i < 3; i++) { cell_draw(&Scale2[i]);} } if(part > 2) { for (i = 0; i < 4; i++) { cell_draw(&Rotate3[i]);} for (i = 0; i < 3; i++) { cell_draw(&Translate2[i]);} for (i = 0; i < 4; i++) { cell_draw(&Rotate4[i]);} for (i = 0; i < 3; i++) { cell_draw(&Scale3[i]);} for (i = 0; i < 3; i++) { cell_draw(&Translate3[i]);} } } else if ( !tank1 ) { glColor3ub(255, 0, 0); drawstr(300, 30, "Tank2"); glColor3ub(255, 255, 255); if(part > 1) { drawstr(10, 30, "1."); drawstr(40, 30, "glPushMatrix ();"); } drawstr(10, 60, "2."); command_draw_rotate(rotate1[0].y); drawstr(10, 90, "3."); command_draw_color(color[0].y); if(part > 1) { drawstr(10, 140, "4."); drawstr(60, 140, "glPushMatrix ();"); } drawstr(10, 170, "5."); command_draw_scale2(scale1[0].y); drawstr(10, 200, "6."); drawstr(80, 200, "glutSolidCube(30);"); if(part > 1) { drawstr(10, 230, "7."); drawstr(60, 230, "glPopMatrix();"); drawstr(10, 280, "8."); command_draw_translate(translate1[0].y); drawstr(10, 310, "9."); command_draw_rotate(rotate2[0].y); drawstr(10, 360, "10."); drawstr(60, 360, "glPushMatrix ();"); drawstr(10, 390, "11."); command_draw_scale2(scale2[0].y); drawstr(10, 420, "12."); drawstr(80, 420, "glutSolidCube(20);"); drawstr(10, 450, "13."); drawstr(60, 450, "glPopMatrix();"); } if(part > 2) { drawstr(10, 500, "14."); drawstr(60, 500, "glPushMatrix();"); drawstr(10, 530, "15."); command_draw_translate2(translate2[0].y); drawstr(10, 560, "16."); command_draw_rotate2(rotate3[0].y); drawstr(10, 590, "17."); command_draw_scale2(scale3[0].y); drawstr(10, 620, "18."); command_draw_translate2(translate3[0].y); drawstr(10, 650, "19."); drawstr(80, 650, "glutSolidCube(5);"); drawstr(10, 680, "20."); drawstr(60, 680, "glPopMatrix();"); } if(part > 1) { drawstr(10, 710, "21."); drawstr(40, 710, "glPopMatrix();"); } for (i = 0; i < 4; i++) { cell_draw(&rotate1[i]);} for (i = 0; i < 3; i++) { cell_draw(&color[i]);} for (i = 0; i < 3; i++) { cell_draw(&scale1[i]);} if(part > 1) { for (i = 0; i < 3; i++) { cell_draw(&translate1[i]);} for (i = 0; i < 4; i++) { cell_draw(&rotate2[i]);} for (i = 0; i < 3; i++) { cell_draw(&scale2[i]);} } if(part > 2) { for (i = 0; i < 3; i++) { cell_draw(&translate2[i]);} for (i = 0; i < 4; i++) { cell_draw(&rotate3[i]);} for (i = 0; i < 3; i++) { cell_draw(&scale3[i]);} for (i = 0; i < 3; i++) { cell_draw(&translate3[i]);} } } glutSwapBuffers(); } int old_y; //-------------------------------------------------EGER mozgatas------------------------------------------------------ void command_mouse(int button, int state, int x, int y) { int i; selection = 0; if (state == GLUT_DOWN) { if (tank1) { for (i = 0; i < 4; i++) selection += cell_hit(&Rotate1[i], x, y); for (i = 0; i < 3; i++) selection += cell_hit(&Color[i], x, y); for (i = 0; i < 3; i++) selection += cell_hit(&Scale1[i], x, y); for (i = 0; i < 3; i++) selection += cell_hit(&Translate1[i], x, y); for (i = 0; i < 4; i++) selection += cell_hit(&Rotate2[i], x, y); for (i = 0; i < 3; i++) selection += cell_hit(&Scale2[i], x, y); for (i = 0; i < 4; i++) selection += cell_hit(&Rotate3[i], x, y); for (i = 0; i < 3; i++) selection += cell_hit(&Translate2[i], x, y); for (i = 0; i < 4; i++) selection += cell_hit(&Rotate4[i], x, y); for (i = 0; i < 3; i++) selection += cell_hit(&Scale3[i], x, y); for (i = 0; i < 3; i++) selection += cell_hit(&Translate3[i], x, y); } else { for (i = 0; i < 4; i++) selection += cell_hit(&rotate1[i], x, y); for (i = 0; i < 3; i++) selection += cell_hit(&color[i], x, y); for (i = 0; i < 3; i++) selection += cell_hit(&scale1[i], x, y); for (i = 0; i < 3; i++) selection += cell_hit(&translate1[i], x, y); for (i = 0; i < 4; i++) selection += cell_hit(&rotate2[i], x, y); for (i = 0; i < 3; i++) selection += cell_hit(&scale2[i], x, y); for (i = 0; i < 3; i++) selection += cell_hit(&translate2[i], x, y); for (i = 0; i < 4; i++) selection += cell_hit(&rotate3[i], x, y); for (i = 0; i < 3; i++) selection += cell_hit(&scale3[i], x, y); for (i = 0; i < 3; i++) selection += cell_hit(&translate3[i], x, y); } } old_y = y; redisplay_all(); } void command_motion(int x, int y) { int i; if (tank1) { for (i = 0; i < 4; i++) cell_update(&Rotate1[i], old_y-y); for (i = 0; i < 3; i++) cell_update(&Color[i], old_y-y); for (i = 0; i < 3; i++) cell_update(&Scale1[i], old_y-y); for (i = 0; i < 3; i++) cell_update(&Translate1[i], old_y-y); for (i = 0; i < 4; i++) cell_update(&Rotate2[i], old_y-y); for (i = 0; i < 3; i++) cell_update(&Scale2[i], old_y-y); for (i = 0; i < 4; i++) cell_update(&Rotate3[i], old_y-y); for (i = 0; i < 3; i++) cell_update(&Translate2[i], old_y-y); for (i = 0; i < 4; i++) cell_update(&Rotate4[i], old_y-y); for (i = 0; i < 3; i++) cell_update(&Scale3[i], old_y-y); for (i = 0; i < 3; i++) cell_update(&Translate3[i], old_y-y); } else { for (i = 0; i < 4; i++) cell_update(&rotate1[i], old_y-y); for (i = 0; i < 3; i++) cell_update(&color[i], old_y-y); for (i = 0; i < 3; i++) cell_update(&scale1[i], old_y-y); for (i = 0; i < 3; i++) cell_update(&translate1[i], old_y-y); for (i = 0; i < 4; i++) cell_update(&rotate2[i], old_y-y); for (i = 0; i < 3; i++) cell_update(&scale2[i], old_y-y); for (i = 0; i < 3; i++) cell_update(&translate2[i], old_y-y); for (i = 0; i < 4; i++) cell_update(&rotate3[i], old_y-y); for (i = 0; i < 3; i++) cell_update(&scale3[i], old_y-y); for (i = 0; i < 3; i++) cell_update(&translate3[i], old_y-y); } old_y = y; redisplay_all(); } void main_keyboard(unsigned char key, int x, int y) { switch (key) { case 'r': if(tank1) { Rotate1[0].value = 45.0; Rotate1[1].value = 0.5; Rotate1[2].value = 1.0; Rotate1[3].value = 0.5; Color[0].value = 0.5; Color[1].value = 0.5; Color[2].value = 0.5; Scale1[0].value = 1.2; Scale1[1].value = 0.7; Scale1[2].value = 2.0; Translate1[0].value = 0.0; Translate1[1].value = 17.5; Translate1[2].value = 0.0; Rotate2[0].value = 10.0; Rotate2[1].value = 0.0; Rotate2[2].value = 1.0; Rotate2[3].value = 0.0; Scale2[0].value = 1.0; Scale2[1].value = 0.7; Scale2[2].value = 1.7; Rotate3[0].value = 10.0; Rotate3[1].value = 0.0; Rotate3[2].value = 1.0; Rotate3[3].value = 0.0; Translate2[0].value = 0.0; Translate2[1].value = 16.0; Translate2[2].value = 17.0; Rotate4[0].value = 10.0; Rotate4[1].value = 1.0; Rotate4[2].value = 0.0; Rotate4[3].value = 0.0; Scale3[0].value = 1.0; Scale3[1].value = 1.0; Scale3[2].value = 7.0; Translate3[0].value = 0.0; Translate3[1].value = 0.0; Translate3[2].value = 2.5; break; } else { rotate1[0].value = 45.0; rotate1[1].value = 0.5; rotate1[2].value = 1.0; rotate1[3].value = 0.5; color[0].value = 0.5; color[1].value = 0.5; color[2].value = 0.5; scale1[0].value = 1.2; scale1[1].value = 0.7; scale1[2].value = 2.0; translate1[0].value = 0.0; translate1[1].value = 17.5; translate1[2].value = 0.0; rotate2[0].value = 10.0; rotate2[1].value = 0.0; rotate2[2].value = 1.0; rotate2[3].value = 0.0; scale2[0].value = 1.0; scale2[1].value = 0.7; scale2[2].value = 1.7; translate2[0].value = 0.0; translate2[1].value = -1.5; translate2[2].value = 17.0; rotate3[0].value = 10.0; rotate3[1].value = 1.0; rotate3[2].value = 0.0; rotate3[3].value = 0.0; scale3[0].value = 1.0; scale3[1].value = 1.0; scale3[2].value = 7.0; translate3[0].value = 0.0; translate3[1].value = 0.0; translate3[2].value = 2.5; break; } case 'z': if(tank1) { Rotate1[0].value = 0.0; Rotate1[1].value = 0.5; Rotate1[2].value = 1.0; Rotate1[3].value = 0.5; Color[0].value = 0.5; Color[1].value = 0.5; Color[2].value = 0.5; Scale1[0].value = 1.0; Scale1[1].value = 1.0; Scale1[2].value = 1.0; Translate1[0].value = 0.0; Translate1[1].value = 0.0; Translate1[2].value = 0.0; Rotate2[0].value = 0.0; Rotate2[1].value = 0.0; Rotate2[2].value = 1.0; Rotate2[3].value = 0.0; Scale2[0].value = 1.0; Scale2[1].value = 1.0; Scale2[2].value = 1.0; Rotate3[0].value = 0.0; Rotate3[1].value = 0.0; Rotate3[2].value = 1.0; Rotate3[3].value = 0.0; Translate2[0].value = 0.0; Translate2[1].value = 0.0; Translate2[2].value = 0.0; Rotate4[0].value = 0.0; Rotate4[1].value = 1.0; Rotate4[2].value = 0.0; Rotate4[3].value = 0.0; Scale3[0].value = 1.0; Scale3[1].value = 1.0; Scale3[2].value = 1.0; Translate3[0].value = 0.0; Translate3[1].value = 0.0; Translate3[2].value = 0.0; break; } else { rotate1[0].value = 0.0; rotate1[1].value = 0.5; rotate1[2].value = 1.0; rotate1[3].value = 0.5; color[0].value = 0.5; color[1].value = 0.5; color[2].value = 0.5; scale1[0].value = 1.0; scale1[1].value = 1.0; scale1[2].value = 1.0; translate1[0].value = 0.0; translate1[1].value = 0.0; translate1[2].value = 0.0; rotate2[0].value = 0.0; rotate2[1].value = 0.0; rotate2[2].value = 1.0; rotate2[3].value = 0.0; scale2[0].value = 1.0; scale2[1].value = 1.0; scale2[2].value = 1.0; translate2[0].value = 0.0; translate2[1].value = 0.0; translate2[2].value = 0.0; rotate3[0].value = 0.0; rotate3[1].value = 1.0; rotate3[2].value = 0.0; rotate3[3].value = 0.0; scale3[0].value = 1.0; scale3[1].value = 1.0; scale3[2].value = 1.0; translate3[0].value = 0.0; translate3[1].value = 0.0; translate3[2].value = 0.0; break; } case 't': tank1 = !tank1; break; case 'a': part = 1; break; case 'b': part = 2; break; case 'c': part = 3; break; case 27: exit(0); } redisplay_all(); } void command_menu(int value) { main_keyboard((unsigned char)value, 0, 0); } void redisplay_all(void) { glutSetWindow(jobbAblak); glutPostRedisplay(); glutSetWindow(balAblak); balAblak_reshape(sub_width, sub_height); glutPostRedisplay(); } //------------------------------------------------------MAIN() fuggveny------------------------------------------------- int main(int argc, char** argv) { glutInitDisplayMode(GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE); //glutInitWindowSize(640+RES*3, 512+RES*2); glutInitWindowSize(900+RES*3, 700+RES*2); glutInitWindowPosition(50, 50); glutInit(&argc, argv); window = glutCreateWindow("Tank"); glutReshapeFunc(foAblak_reshape); glutDisplayFunc(foAblak_display); balAblak = glutCreateSubWindow(window, RES, RES, 256, 256); glutReshapeFunc(balAblak_reshape); glutDisplayFunc(balAblak_display); jobbAblak = glutCreateSubWindow(window, RES+256+RES, RES, 256, 256); // (306, 25)bol merete 256*256 glutReshapeFunc(jobbAblak_reshape); glutDisplayFunc(jobbAblak_display); glutMotionFunc(command_motion); glutMouseFunc(command_mouse); glutCreateMenu(command_menu); glutAddMenuEntry("", 0); glutAddMenuEntry("tank1/tank2", 't'); glutAddMenuEntry("", 0); // glutAddMenuEntry("Tank 1", 0); glutAddMenuEntry(" vehicle", 'a'); glutAddMenuEntry(" vehicle + tower", 'b'); glutAddMenuEntry(" vehicle + tower + gun", 'c'); glutAddMenuEntry(" Paraméterek visszaállítása", 'r'); glutAddMenuEntry(" Paraméterek inicializálása", 'z'); // glutAddMenuEntry("", 0); // glutAddMenuEntry("Tank 2", 0); // glutAddMenuEntry(" vehicle", 'a'); // glutAddMenuEntry(" vehicle + tower", 'b'); // glutAddMenuEntry(" vehicle + tower + gun", 'c'); // glutAddMenuEntry(" Paraméterek visszaállítása", 'r'); // glutAddMenuEntry(" Paraméterek inicializálása", 'z'); glutAddMenuEntry("", 0); glutAddMenuEntry("Kilépés", 27); glutAttachMenu(GLUT_RIGHT_BUTTON); redisplay_all(); glutMainLoop(); return 0; }