Задача нацелить камеру так чтобы смотреть на объект сбоку (см. рис. в приложении). Как это сделать? Вот мой код для вида сверху. Код (Text): #include <glaux.h> #include <GL/glut.h> #include <gl.h> #include <glu.h> #include <math.h> #include <windows.h> #include <ctime> #include <stdlib.h> #pragma comment (lib, "glaux.lib") #pragma comment (lib, "opengl32.lib") #pragma comment (lib, "glu32.lib") #pragma comment (lib, "glut32.lib") #define radius 0.5 double x, y; void DrawBall() { glPushMatrix(); glTranslated(x,y,0); glColor3d(1,0,0); glutSolidSphere(radius, 100, 100); glPopMatrix(); } void display(void) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); DrawBall(); glutSwapBuffers(); glFlush(); } void resize(int width,int height) { glViewport(0,0,width,height); glMatrixMode( GL_PROJECTION ); glLoadIdentity(); glOrtho(-5,5, -5,5, 2,12); gluLookAt( 0,0,5, 0,0,0, 0,1,0 ); glMatrixMode( GL_MODELVIEW ); } int main(int argc, char* argv[]) { glutInitWindowPosition(50, 10); glutInitWindowSize(400, 400); glutInitDisplayMode(GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE); glutCreateWindow("Testbed"); glutDisplayFunc(display); glutReshapeFunc(resize); glEnable(GL_ALPHA_TEST); glEnable(GL_DEPTH_TEST); glEnable(GL_COLOR_MATERIAL); glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glutMainLoop(); return 0; }
прочитайте про gluLookAt три группы параметров. если я не ошибаюсь Код (Text): gluLookAt(pos.x, pos.y, pos.z, aim.x, aim.y, aim.z, top.x, top.y, top.z) где pos=позиция камеры в пространстве aim=направление обзора камеры (в вашем случае можно указать координаты сферы и если я не ошибаюсь, то она располагается по 0.0, 0.0, 0.0) top=направление вектора указывающего на верх сцены (в вашем случае можно просто пользоваться статическим вектором и направить ось y вверх или рассчитать векторное произведение вектора aim исходящего из позиции pos и какого-нибудь еще. например вектора движения объекта на который указывает aim) Да и в интернете полно всего на эту тему UPD:и кстати у вас получился вид сзади т.к. в OpenGL ось z смотрит вглубь экрана, хотя при правильной манипуляции камерой и правильной корректировкой этой особенности можно на нее внимания не обращать соответственно gluLookAt( 5.0,0.0,0.0, 0.0,0.0,0.0, 0.0,1.0,0.0); //вид справа gluLookAt( 0.0,5.0,0.0, 0.0,0.0,0.0, 0.0,1.0,0.0); //вид сверху gluLookAt( 0.0,0.0,5.0, 0.0,0.0,0.0, 0.0,1.0,0.0); //вид сзади gluLookAt( -5.0,0.0,0.0, 0.0,0.0,0.0, 0.0,1.0,0.0); //вид слева gluLookAt( 0.0,-5.0,0.0, 0.0,0.0,0.0, 0.0,1.0,0.0); //вид снизу gluLookAt( 0.0,0.0,-5.0, 0.0,0.0,0.0, 0.0,1.0,0.0); //вид спереди и на всех видах сфера должна получиться шариком, хотя это зависит от настройки пространства OpenGL