Модераторы: Rickert, Alexeis, BorisVorontsov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Событийное вращение детали 
:(
    Опции темы
russians
Дата 3.12.2006, 02:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 297
Регистрация: 6.11.2006

Репутация: нет
Всего: нет



Подкиньте пожалуйста универсальный алгоритм вращения детали (любой) в трёхмере вокруг оси координат с использованием glutMouseFunc и GlutMotionFunc, чтобы можно было вставить в любой код с трёхмерной деталькой. Заранее спасибо.
PS Прошу извинить за идиотский вопрос, я пересмотрел некоторые исходники с применением этих функций, но там среди ненужных менюшных наворотов трудно разглядеть нужный алгоритм...
PM MAIL   Вверх
FIaR
Дата 3.12.2006, 14:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 102
Регистрация: 7.11.2006

Репутация: 2
Всего: 2



Думаю ты хотел увидеть это:

Код


#include <windows.h>
#include <GL/glut.h>

GLUquadricObj *qobj;
int angleX = 0, angleY = 0;
int mouseChangeX, mouseChangeY;

void displayFunc(void)
{
  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);


  glMatrixMode(GL_MODELVIEW);
  glLoadIdentity();
  glTranslatef(0.0, 0.0, -10.0);
  glRotatef(angleY, 0, 1, 0);
  glRotatef(angleX,-1, 0, 0);

  /* вот здесь твой любой объект */ gluSphere(qobj, 1, 12, 12);


  glutSwapBuffers();
  glutPostRedisplay();
}

void mouseFunc(char key, int x, int y)
{
         // Нажатие правой кнопки мыши
    if(key==2) angleX = angleY = 0;
}

void motionFunc(int x, int y)
{
    angleX -= (mouseChangeY-y);
    mouseChangeY = y;
    angleY -= (mouseChangeX-x);
    mouseChangeX = x;
}

int main(int argc, char **argv)
{
  glutInit(&argc, argv);
  glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGB);
  glutCreateWindow("");

  glutDisplayFunc(displayFunc);
  glutMouseFunc(mouseFunc);
  glutMotionFunc(motionFunc);

  glMatrixMode(GL_PROJECTION);
  glLoadIdentity();
  gluPerspective(45.0, 1.0, 1.0, 100.0);

  glEnable(GL_LIGHTING);
  glEnable(GL_LIGHT0);
  glEnable(GL_DEPTH_TEST);

  qobj = gluNewQuadric();

  glutMainLoop();
  return 0; 
}


--------------------
Шуруп забитый молотком, держится лучше, чем гвоздь закрученый отверткой.  
PM MAIL   Вверх
Rickert
Дата 4.12.2006, 08:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: 2
Всего: 52



russians, а зачем тебе glutMouseFunc и GlutMotionFunc? Выбираешь ось, например X, и перед выводом детали делаешь так:
Код

...
glPushMatrix();
glTranslatef(0, sin(angle*PI/180), cos(angle*PI/180));
...//вывод детали на экран
if (angle < 360)
    angle++;
else
    angle = 0;
glPopMatrix();
...



--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
russians
Дата 4.12.2006, 17:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 297
Регистрация: 6.11.2006

Репутация: нет
Всего: нет



Мммм, нет, тут нужно именно событийное вращение, а не постоянное... Но всё равно спасибо, помог smile
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Вы можете найти полезным что...
Alexeis
Rickert
  • Английская документация по DirectX лежит где-то здесь.
  • Английская документация по OpenGL лежит где-то там.
  • Гейм-дев у нас обсуждают где-то тут

Ждём вас! С уважением, Alexeis, Rickert.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Мультимедия, OpenGL/DirectX | Следующая тема »


 




[ Время генерации скрипта: 0.0486 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.