Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
include.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
60.31 Кб
Скачать

#include <windows.h>

#include <GL\glut.h>

#include <GL\glui.h>

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <math.h>

 

// ----- GLOBAL VARIABLES -----

const float SPINNER_SPEED = 0.2;

// ----- USER INTERFACE VARIABLES -----

int Win[2];

int windowID;

GLUI *glui;

// ----- CAMERA VARIABLES -----

GLdouble camXPos = 0.0;

GLdouble camYPos = 0.0;

GLdouble camZPos = -30;

const GLdouble CAMERA_FOVY = 100.0;

const GLdouble NEAR_CLIP = 0.1;

const GLdouble FAR_CLIP = 500.0;

const float CAMERA_MIN = -180.0;

const float CAMERA_MAX = 180.0;

// ----- ANIMATION VARIABLES -----

const float ROOT_TRANSLATE_X_MIN = -10.0;

const float ROOT_TRANSLATE_X_MAX =  10.0;

const float ROOT_TRANSLATE_Y_MIN = -10.0;

const float ROOT_TRANSLATE_Y_MAX =  10.0;

const float ROOT_TRANSLATE_Z_MIN = -10.0;

const float ROOT_TRANSLATE_Z_MAX =  10.0;

const float ROOT_ROTATE_X_MIN    = -180.0;

const float ROOT_ROTATE_X_MAX    =  180.0;

const float ROOT_ROTATE_Y_MIN    = -180.0;

const float ROOT_ROTATE_Y_MAX    =  180.0;

const float ROOT_ROTATE_Z_MIN    = -180.0;

const float ROOT_ROTATE_Z_MAX    =  180.0;

const float HEAD_MIN             = -10.0;

const float HEAD_MAX             =  10.0;

const float HEAD_PITCH_MIN       = -45.0;

const float HEAD_PITCH_MAX       =  45.0;

const float HAND_X_MIN   = -180.0;

const float HAND_X_MAX   =  180.0;

const float HAND_Y_MIN     = -45.0;

const float HAND_Y_MAX     =  45.0;

const float HAND_Z_MIN    = -45.0;

const float HAND_Z_MAX    =  45.0;

 

float joint_trans_x_root = 0.0f;

float joint_trans_y_root = 0.0f;

float joint_trans_z_root = 0.0f;

float joint_rot_x_root = 0.0f;

float joint_rot_y_root = 0.0f;

float joint_rot_z_root = 0.0f;

float joint_rot_head = 0.0f;

float joint_pitch_head = 0.0f;

float joint_rot_x_hand_r = 0.0f;

float joint_rot_y_hand_r = 0.0f;

float joint_rot_z_hand_r = 0.0f;

float joint_rot_x_hand_l = 0.0f;

float joint_rot_y_hand_l = 0.0f;

float joint_rot_z_hand_l = 0.0f;

// ----- FUNCTION DECLARATIONS -----

void display(void);

void myReshape(int w, int h);

void drawSquare(int i);

void initGlui();

void initGlut(char *winName);

void animate();

// main() function

// Initializes the user interface (and any user variables)

// then hands over control to the event handler, which calls

// display() whenever the GL window needs to be redrawn.

int main(int argc, char** argv) {

// Process program arguments

if(argc != 3) {

printf("Usage: demo [width] [height]\n");

printf("Using 400x400 window by default...\n");

Win[0] = 500;

Win[1] = 500;

} else {

Win[0] = atoi(argv[1]);

Win[1] = atoi(argv[2]);

}

glutInit(&argc, argv);

initGlut(argv[0]);

initGlui();

glClearColor(0.7f, 0.7f, 0.9f, 1.0f);

glEnable(GL_DEPTH_TEST);

 

// Standard GLUT main event loop

glutMainLoop();

return 0;

}

Void initGlut(char *winName)

{

glutInitDisplayMode(GLUT_RGB | GLUT_DEPTH);

// Create window

glutInitWindowPosition(10, 10);

glutInitWindowSize(Win[0], Win[1]);

windowID = glutCreateWindow(winName);

// Callback functions for event handling

glutReshapeFunc(myReshape);

glutDisplayFunc(display);

}

// Initialize GLUI and the user interface

Void initGlui() {

GLUI_Panel* glui_panel;

GLUI_Spinner* glui_spinner;

GLUI_Master.set_glutIdleFunc(NULL);

// Create GLUI window (joint controls) ***************

//

glui = GLUI_Master.create_glui("Joint Control", 0, Win[0]+12, 0);

// Create controls to specify root position and orientation

glui_panel = glui->add_panel("Root");

glui_spinner = glui->add_spinner_to_panel(glui_panel, "translate x:", GLUI_SPINNER_FLOAT, &joint_trans_x_root);

glui_spinner->set_float_limits(ROOT_TRANSLATE_X_MIN, ROOT_TRANSLATE_X_MAX, GLUI_LIMIT_CLAMP);

glui_spinner->set_speed(SPINNER_SPEED);

glui_spinner = glui->add_spinner_to_panel(glui_panel, "translate y:", GLUI_SPINNER_FLOAT, &joint_trans_y_root);

glui_spinner->set_float_limits(ROOT_TRANSLATE_Y_MIN, ROOT_TRANSLATE_Y_MAX, GLUI_LIMIT_CLAMP);

glui_spinner->set_speed(SPINNER_SPEED);

glui_spinner = glui->add_spinner_to_panel(glui_panel, "translate z:", GLUI_SPINNER_FLOAT, &joint_trans_z_root);

glui_spinner->set_float_limits(ROOT_TRANSLATE_Z_MIN, ROOT_TRANSLATE_Z_MAX, GLUI_LIMIT_CLAMP);

glui_spinner->set_speed(SPINNER_SPEED);

glui_spinner = glui->add_spinner_to_panel(glui_panel, "rotate x:", GLUI_SPINNER_FLOAT, &joint_rot_x_root);

glui_spinner->set_float_limits(ROOT_ROTATE_X_MIN, ROOT_ROTATE_X_MAX, GLUI_LIMIT_WRAP);

glui_spinner->set_speed(SPINNER_SPEED);

glui_spinner = glui->add_spinner_to_panel(glui_panel, "rotate y:", GLUI_SPINNER_FLOAT, &joint_rot_y_root);

glui_spinner->set_float_limits(ROOT_ROTATE_Y_MIN, ROOT_ROTATE_Y_MAX, GLUI_LIMIT_WRAP);

glui_spinner->set_speed(SPINNER_SPEED);

glui_spinner = glui->add_spinner_to_panel(glui_panel, "rotate z:", GLUI_SPINNER_FLOAT, &joint_rot_z_root);

glui_spinner->set_float_limits(ROOT_ROTATE_Z_MIN, ROOT_ROTATE_Z_MAX, GLUI_LIMIT_WRAP);

glui_spinner->set_speed(SPINNER_SPEED);

// Create controls to specify head rotation

glui_panel = glui->add_panel("Head");

glui_spinner = glui->add_spinner_to_panel(glui_panel, "roll:", GLUI_SPINNER_FLOAT, &joint_rot_head);

glui_spinner->set_float_limits(HEAD_MIN, HEAD_MAX, GLUI_LIMIT_CLAMP);

glui_spinner->set_speed(SPINNER_SPEED);

glui_spinner = glui->add_spinner_to_panel(glui_panel, "nod:", GLUI_SPINNER_FLOAT, &joint_pitch_head);

glui_spinner->set_float_limits(HEAD_PITCH_MIN, HEAD_PITCH_MAX, GLUI_LIMIT_CLAMP);

glui_spinner->set_speed(SPINNER_SPEED);

glui->add_column(false);

// Create controls to specify right arm

glui_panel = glui->add_panel("Right arm");

glui_spinner = glui->add_spinner_to_panel(glui_panel, "hand x:", GLUI_SPINNER_FLOAT, &joint_rot_x_hand_r);

glui_spinner->set_float_limits(HAND_X_MIN, HAND_X_MAX, GLUI_LIMIT_CLAMP);

glui_spinner->set_speed(SPINNER_SPEED);

glui_spinner = glui->add_spinner_to_panel(glui_panel, "hand y:", GLUI_SPINNER_FLOAT, &joint_rot_y_hand_r);

glui_spinner->set_float_limits(HAND_Y_MIN, HAND_Y_MAX, GLUI_LIMIT_CLAMP);

glui_spinner->set_speed(SPINNER_SPEED);

glui_spinner = glui->add_spinner_to_panel(glui_panel, "hand z:", GLUI_SPINNER_FLOAT, &joint_rot_z_hand_r);

glui_spinner->set_float_limits(HAND_Z_MIN, HAND_Z_MAX, GLUI_LIMIT_CLAMP);

glui_spinner->set_speed(SPINNER_SPEED);

// Create controls to specify left arm

glui_panel = glui->add_panel("Left arm");

glui_spinner = glui->add_spinner_to_panel(glui_panel, "hand x:", GLUI_SPINNER_FLOAT, &joint_rot_x_hand_l);

glui_spinner->set_float_limits(HAND_X_MIN, HAND_X_MAX, GLUI_LIMIT_CLAMP);

glui_spinner->set_speed(SPINNER_SPEED);

glui_spinner = glui->add_spinner_to_panel(glui_panel, "hand y:", GLUI_SPINNER_FLOAT, &joint_rot_y_hand_l);

glui_spinner->set_float_limits(HAND_Y_MIN, HAND_Y_MAX, GLUI_LIMIT_CLAMP);

glui_spinner->set_speed(SPINNER_SPEED);

glui_spinner = glui->add_spinner_to_panel(glui_panel, "hand z:", GLUI_SPINNER_FLOAT, &joint_rot_z_hand_l);

glui_spinner->set_float_limits(HAND_Z_MIN, HAND_Z_MAX, GLUI_LIMIT_CLAMP);

glui_spinner->set_speed(SPINNER_SPEED);

// Set the main window to be the "active" window

glui->set_main_gfx_window(windowID);

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]