السلام عليكم : ملاحظة : هذه الطريقة ناقصة وتحتاج لتعديلات معيّنة . بعد ان خصصت اسبوعا كامل لابحاث الكميرا ... طلعت هالتخصيصات فالصو .. المسألة سهلة .. قايلكم .. والله قايلكم .. هالاجانب دايما ما يعقدون الكود .. و يحولون الصعب سهل . بلا Vector بلا وجع راس .. فقط باللعب بالدالة :
gluLookAt( eyex, eyey, eyez, centx, centy, centz, upx, upy, upz );
#include<glut.h> /* exclusive :) alshammari - aboshammar@gmail.com */ int i=0,j=0; float eyex=0, eyey=1,eyez=0;float centx=0 ,centy=0,centz=-100;float upx=0 ,upy=1,upz=0;void pressKey(int key, int x, int y) {glutPostRedisplay(); switch (key) { case GLUT_KEY_LEFT : eyex-=0.3; ;break; case GLUT_KEY_RIGHT : eyex+=0.3; ;break; case GLUT_KEY_UP : eyey+=0.3; break; case GLUT_KEY_DOWN : eyey-=0.3; break; case GLUT_KEY_HOME : eyez-=0.3; break; case GLUT_KEY_END : eyez+=0.3; break; case GLUT_KEY_F2 : centx+=0.3; break; case GLUT_KEY_F3 : centx-=0.3; break; case GLUT_KEY_F4 : centy+=0.3; break; case GLUT_KEY_F5 : centy-=0.3; break; case GLUT_KEY_F6 : centz+=0.3; break; case GLUT_KEY_F7 : centz-=0.3; break; }}void reshape(int w, int h){ glViewport(0, 0, w, h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(45.0, (float)w/(float)h, 1.0, 800.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity();} void Init(){ glClearColor(0.0, 0.0, 0.0, 0.0); glEnable(GL_DEPTH_TEST); glEnable(GL_LIGHT0); glEnable(GL_LIGHTING);} void render(void) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity(); gluLookAt( eyex, eyey, eyez, centx, centy, centz, upx, upy, upz ); glPushMatrix(); glColor3f(1.0, 0.0, 0.0); glTranslatef(1.5,3.0,-22.0); glutSolidTeapot(2); glPopMatrix(); /*----------------FLOOR--------------*/ glEnable(GL_BLEND); glDisable(GL_DEPTH_TEST); glBlendFunc(GL_SRC_ALPHA,GL_SRC_ALPHA); glColor4f( 0.0 , 0.8 , 0.6 , 0.2); glPushMatrix(); glTranslatef(0,0,-11.0); glRotatef(90,1,0,0); glScalef(4,4,4); glBegin(GL_QUADS); glVertex2f(-4 ,4 ); glVertex2f(4 ,4 ); glVertex2f( 4 ,-4 ); glVertex2f(-4,-4 ); glEnd(); glPopMatrix(); glDisable(GL_BLEND); glEnable(GL_DEPTH_TEST);/*----------------FLOOR--------------*/ glutSwapBuffers(); }void main(int argc, char **argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA); glutInitWindowPosition(100,100); glutInitWindowSize(320,320); glutCreateWindow("arab team - glut "); Init(); glutDisplayFunc(render);/***********************/ glutIdleFunc(render); // glutIgnoreKeyRepeat(1); glutSpecialFunc(pressKey); /***********************/ glutReshapeFunc(reshape); glutMainLoop();}