Новичок
Профиль
Группа: Участник
Сообщений: 16
Регистрация: 26.4.2015
Репутация: нет Всего: нет
|
Привет всем, помогите пожалуйста! Нужно реализовать движение камеры в 3Д с помощью клавиатуры по сцене (можете кинуть примеры работ, либо ссылки, либо литературу по этому вопросу, либо "поругать" по коду т.к. новичок в это деле ) Код |
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(); }
|
вот такое движение реализовала у себя по примеру кода, взятого на просторах инета, подставила....но не работает, просто выполняет поворот самой сцены...а хотелось бы движение -влево/вправо, если вперед/назад , то соответственно и уменьшение/приближение к сцене
|