Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.135.231.36] |
|
Сообщ.
#1
,
|
|
|
Здравствуйте. Пытаюсь написать простейшую игру, но не хватает мозгов всё правильно реализовать.
Столкнулся с проблемой перевода координат мыши в оконные координаты. Неужели всё так сложно? Простое перетаскивание 2d объекта. Сильно не ругайте, пытался реализовать перетаскивание квадрата. Конвертирование координат в функции void MouseMotion. Сильно не ругайте. Скрытый текст #include <GL/glut.h> void display(); void mouse(int button, int state, int x, int y); void MouseMotion(int x , int y); double X=0.5, Y=0.5; int dx, dy; int ButtonStatus = 0; void GLUT_CALL_FUNC() { glutDisplayFunc(display); glutMouseFunc(mouse); glutMotionFunc(MouseMotion); } void MY_INIT() { glClearColor(1.0, 1.0, 1.0, 1.0); } void display() { glClearColor(0.0,0.0,0.0,0.0); glClear(GL_COLOR_BUFFER_BIT); glColor3f(1.0,1.0,1.0); glBegin(GL_POLYGON); glVertex3f(X,Y,0.0); glVertex3f(X+0.25,Y,0.0); glVertex3f(X+0.25,Y+0.25,0.0); glVertex3f(X,Y+0.25,0.0); glEnd(); glFlush(); } void mouse(int button, int state, int x, int y) { if(button==GLUT_LEFT_BUTTON && state == GLUT_DOWN) { ButtonStatus = 1; dx=x, dy=y; } else if(button == GLUT_LEFT_BUTTON && state == GLUT_UP) { ButtonStatus = 0; } } void MouseMotion(int x , int y) { if(ButtonStatus == 1) { X+= (static_cast <double> (x-dx)/600.0)/10; Y+= (static_cast <double> (dy-y)/600.0)/10; glutPostRedisplay(); { } int main(int argc,char *argv[]) { glutInit(&argc, argv); glutInitWindowSize(600,600); glutInitWindowPosition(0,0); glutCreateWindow("Test"); GLUT_CALL_FUNC(); MY_INIT(); glutMainLoop(); return 0; } Может кто-то поможет исправить? Или посоветует годную литературу? Мне пока нужно только 2d и только для самых примитивных действий. Спасибо. |
Сообщ.
#2
,
|
|
|
Возможно, что так:
void MouseMotion(int x , int y) { if( ButtonStatus == 1 ) { X += (static_cast <double> (x-dx)/600.0)/10; Y += (static_cast <double> (dy-y)/600.0)/10; dx = x, dy = y; // теперь положение стало таким glutPostRedisplay(); } } |
Сообщ.
#3
,
|
|
|
Цитата Prosto_Toxa @ Мне пока нужно только 2d use gluOrtho2D, glVertex2f... |