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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> движение камеры в 3D OpenGL 
V
    Опции темы
Shade2015
Дата 27.5.2015, 13:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Привет всем, помогите пожалуйста! Нужно реализовать движение камеры в 3Д  с помощью клавиатуры по сцене (можете кинуть примеры работ, либо ссылки, либо литературу по этому вопросу, либо "поругать" по коду smile т.к. новичок в это деле )

Код


void   Display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glColor3f(1.0, 1.0, 1.0);
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
glTranslated(User.Coord.x,User.Coord.y, User.Coord.z);
glRotatef(User.Rotation.x,1,0,0);
glRotatef(User.Rotation.y,0,1,0);
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, photo_tex);
glBegin(GL_QUADS);
glDepthMask(GL_FALSE);
    glTexCoord2f(0.0f, 0.0f);    glVertex3f(-10, -10, 10);
    glTexCoord2f(1.0f, 0.0f);    glVertex3f(10, -10, 10);
    glTexCoord2f(1.0f, 1.0f);    glVertex3f(10, 10, 10);
    glTexCoord2f(0.0f, 1.0f);    glVertex3f(-10, 10, 10);
    // new face
    glTexCoord2f(0.0f, 0.0f);    glVertex3f(10, 10, 10);
    glTexCoord2f(1.0f, 0.0f);    glVertex3f(10, 10, -10);
    glTexCoord2f(1.0f, 1.0f);    glVertex3f(10, -10, -10);
    glTexCoord2f(0.0f, 1.0f);    glVertex3f(10, -10, 10);
    // new face
    glTexCoord2f(0.0f, 0.0f);    glVertex3f(10, 10, -10);
    glTexCoord2f(1.0f, 0.0f);    glVertex3f(-10, 10, -10);
    glTexCoord2f(1.0f, 1.0f);    glVertex3f(-10, -10, -10);
    glTexCoord2f(0.0f, 1.0f);    glVertex3f(10, -10, -10);
    // new face
    glTexCoord2f(0.0f, 0.0f);    glVertex3f(-10, -10, -10);
    glTexCoord2f(1.0f, 0.0f);    glVertex3f(-10, -10, 10);
    glTexCoord2f(1.0f, 1.0f);    glVertex3f(-10, 10, 10);
    glTexCoord2f(0.0f, 1.0f);    glVertex3f(-10, 10, -10);
    // new face
    glTexCoord2f(0.0f, 0.0f);    glVertex3f(-10, 10, -10);
    glTexCoord2f(1.0f, 0.0f);    glVertex3f(10, 10, -10);
    glTexCoord2f(1.0f, 1.0f);    glVertex3f(10, 10, 10);
    glTexCoord2f(0.0f, 1.0f);    glVertex3f(-10, 10, 10);
    // new face
    glTexCoord2f(0.0f, 0.0f);    glVertex3f(-10, -10, -10);
    glTexCoord2f(1.0f, 0.0f);    glVertex3f(10, -10, -10);
    glTexCoord2f(1.0f, 1.0f);    glVertex3f(10, -10, 10);
    glTexCoord2f(0.0f, 1.0f);    glVertex3f(-10, -10, 10);
    
glDepthMask(GL_TRUE);
glEnd();
glEnable(GL_LIGHTING);
core->render(t * t_factor);
glPopMatrix();
glFlush();
}

 void Reshape(GLint width, GLint height)
{   ::width = width; 
    ::height = height; 
    glViewport(0, 0, width, height); 
    glMatrixMode(GL_PROJECTION); 
    glLoadIdentity(); 
    glOrtho(-width / 2 * x_factor, width / 2 * x_factor, -height / 2 * x_factor, height / 2 * x_factor, -100, 100); 
    glMatrixMode( GL_MODELVIEW ); 
    glLoadIdentity(); 
    gluLookAt(vx,vy,vz,User.Rotation.x-sin(angleX/180*PI),User.Rotation.y+height1+(tan(angleY/180*PI)),User.Rotation.z-cos(angleX/180*PI), 0, 1, 0);
    glutPostRedisplay(); 
}

//РЕАЛИЗАЦИЯ ПОВРОТА:
void MouseMotion(int x, int y){
    User.Rotation.x+=(y-MouseOld_y)/4;
    User.Rotation.y-=(x-MouseOld_x)/4;
    MouseOld_x=x;
    MouseOld_y=y;
    }
void Keyboard(unsigned char key, int x, int y) 
{    
    if (key=='w') //w 
{
User.Rotation.x -= (float)sin(angleX/180*PI) * speed;
User.Rotation.z -= (float)cos(angleX/180*PI) * speed;
}
if (key=='s')//s  
{
User.Rotation.x += (float)sin(angleX/180*PI) * speed;
User.Rotation.z += (float)cos(angleX/180*PI) * speed;
}
if (key=='d') //right  
{
User.Rotation.x += (float)sin(( angleX + 90)/180*PI) * speed; 
User.Rotation.z += (float)cos(( angleX + 90)/180*PI) * speed;
}
if (key=='a')//left  
{
User.Rotation.x += (float)sin(( angleX - 90)/180*PI) * speed; 
User.Rotation.z += (float)cos(( angleX - 90)/180*PI) * speed;
}
GetCursorPos(&mousexy);
angleX +=(320-mousexy.x)/2; //2 — чувствительность 
angleY +=(240-mousexy.y)/2;
vx = User.Rotation.x - (float)sin(angleX / 180 * PI);
vy = User.Rotation.y + (float)tan(angleY / 180 * PI);
vz = User.Rotation.z - (float)cos(angleX / 180 * PI);
SetCursorPos(320,240); // Дефолтное положение мыши

if (angleY<-89.0){angleY=-89.0;}
if (angleY>89.0){angleY=89.0;}
   glutPostRedisplay(); 



вот такое движение реализовала у себя по примеру кода, взятого на просторах инета, подставила....но не работает, просто выполняет поворот самой сцены...а хотелось бы движение -влево/вправо, если вперед/назад , то соответственно  и уменьшение/приближение к сцене
PM MAIL   Вверх
BorisVorontsov
Дата 28.5.2015, 18:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Thinker
**


Профиль
Группа: Комодератор
Сообщений: 714
Регистрация: 3.11.2005
Где: Молдавия, г. Киши нёв

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



Традиционно, примеры от NeHe: http://nehe.gamedev.net/tutorial/loading_a...3d_world/22003/



--------------------
[code=cpp]
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;
[/code]
PM MAIL ICQ GTalk   Вверх
Shade2015
Дата 29.5.2015, 12:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



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

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

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


 




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


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

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