Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > разработка игр, графический дизайн и моделирование > Gamedev - cоздание игр: Unity, OpenGL, DirectX
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.09.2020, 22:45   #1
SADxRobot
 
Регистрация: 13.09.2020
Сообщений: 4
По умолчанию Не могу понять почему мышка не работает

Доброго времени суток. Хочу сделать чтоб объект вращался вокруг другого объекта. Это я сделал. Сейчас хочу сделать чтоб была возможность пользовать мышкой и клавиатурой ( вращать там, с разных ракурсов смотреть). Вроде написано, а работать не хочет. Может кто подскажет.

Цитата:
#include <iostream>
#include<glut.h>
#include <windows.h>
#include <stdio.h>
#pragma warning(disable : 4996)


using namespace std;
float angle;
const double G = 6.67 * pow(10, -11);
const double M = 5.97 * pow(10, 24), R = 6.37 * pow(10, 6);
const double pi = 3.1415926535;
double hzp;
float omega, T1, v;
GLuint list = 0;

GLfloat rx = 0; // Угол поворта сцены вокруг оси X
GLfloat ry = 0; // Угол поворта сцены вокруг оси Y
int mx, my; // Координаты мыши
bool ldown = false; // Нажата левая клавиша мыши?
bool rdown = false; // Нажата правая клавиша мыши?





void display()
{
glClear(GL_COLOR_BUFFER_BIT);//Очищаем буфер

glColor3f(0.0, 0.0, 1.0);//задаём цвет первой сферы

glLoadIdentity();//Установка в единичные значения(сброс)

glutSolidSphere(0.75, 30, 30);//Рисуем первую сферу

glPushMatrix();//Сохраняем координаты первой сферы

glColor3f(0.3, 0.5, 0.9);//задаём цвет второй сферы

glTranslated(0.7, 0.0, 0.0);//Сдвиг по оси x
glTranslated(-0.7, 0.0, 0.0);//Перевод камеры в исходное положение
glRotatef(angle, 0.0, 0.0, 1.0);//Поворот вокруг начала координат
glTranslated(0.7, 0.0, 0.0);//перевод камеры назад

glutSolidSphere(0.05, 50, 50);//Рисуем вторую сферу
glPopMatrix();//Возвращаемся к исходной системе координат
glFlush();//Ускоряет работу программы , освобождая буферы и рисует сразу ,не дожидаясь окончания всех команд

}

void Init()
{
glEnable(GL_LIGHTING); // Включаем расчёт освещения
glEnable(GL_LIGHT0); // Включаем первый источник света

float light_ambient[4] = { 0.5, 0.5, 0, 0 };
float light_diffuse[4] = { 1.0,1.0,1.0,1.0 };
float light_specular[4] = { 0.0,1.0,0.0,1.0 };
float light_position[4] = { 1.0,1.0,1.0,0.2 };

glLightfv(GL_LIGHT0, GL_AMBIENT, light_ambient);
glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse);
glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular);
glLightfv(GL_LIGHT0, GL_POSITION, light_position);

// glEnable(GL_NORMALIZE); //делаем нормали одинаковой величины во избежание артефактов
//glEnable(GL_DEPTH_TEST);
// glEnable(GL_COLOR_MATERIAL);

list = glGenLists(1);

glCallList(list);





glClearColor(1.0, 1.0, 1.0, 1.0);
glColor3f(1.0, 0.0, 0.0);
glMatrixMode(GL_PROJECTION);//Матрица проекций
glLoadIdentity();//Делаем матрицу единичной(сброс)
glOrtho(-1.0, 1.0, -1.0, 1.0, -1.0, 1.0);//орографмческая проекция glOrtho(left,right,bottom,top,near, far)
glMatrixMode(GL_MODELVIEW);//Модельно-видовая матрица
}
void timer(int value)
{
glutTimerFunc(70, timer, 0);
display();
angle++;
glRotatef(0.0, 0.0, 0.0, 1.0);
glutPostRedisplay();
}

void Keyboard(unsigned char key, int x, int y)
{
switch (key)
{
case VK_ESCAPE:
{
if (list)
glDeleteLists(list, 1); // Удаляем дисплейный список
exit(0);
break;
}
}
}

void Mouse(int button, int state, int x, int y) //Обработка щелчков мыши
{
if (button == GLUT_LEFT_BUTTON) //Левая кнопка
{
switch (state)
{
case GLUT_DOWN: //Если нажата
ldown = true; //установить флаг
mx = x; //Запомнить координаты
my = y;
break;
case GLUT_UP:
ldown = false;
break;
}
}
}

void MouseMotion(int x, int y) //Перемешение мыши
{
if (ldown) // Левая кнопка
{
rx += 0.5 * (y - my); //Изменение угола поворота
ry += 0.5 * (x - mx);
mx = x;
my = y;
glutPostRedisplay(); //Перерисовать экран
}
}

void MousePassiveMotion(int x, int y)
{
char buf[80];
sprintf(buf, "Mouse coords is: x=%d; y=%d", x, y);
glutSetWindowTitle(buf);
}



int main(int argc, char** argv)
{
//Инициализация библиотеки GLUT
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH);
glutInitWindowSize(1000, 1300);
glutCreateWindow("Sphere1");
glutDisplayFunc(display);

glutKeyboardFunc(Keyboard); // Обработчик нажатий клавиш на клавиатуре
glutPassiveMotionFunc(MousePassiveM otion); // Обработчик перемещений грызуна при отжатой кнопке мыши
glutMotionFunc(MouseMotion); // Обработчик перемещений грызуна при зажатой кнопке мыши
glutMouseFunc(Mouse);

glutDisplayFunc(display);//Рисование и перерисовка содержимого экрана (вызов функции display)
glutTimerFunc(70, timer, 0);
Init();//Вызов функции Init
glutMainLoop();//Вход в основной цикл GLUT
return 0;

}
SADxRobot вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не могу понять почему не работает программа на С. NO ONE Общие вопросы C/C++ 2 13.12.2017 17:23
Не могу понять почему не работает Valeriy_136 Помощь студентам 2 15.10.2017 08:10
Не могу понять почему не работает функция SeRhy JavaScript, Ajax 0 09.02.2012 17:41
Почему не работает...хм....понять не могу! Артур Иваныч Microsoft Office Excel 9 01.12.2009 17:58