الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

وأخيرا تحركت الكميرا ,,,,

مغلق
بدأه Abdullah.Alshammeri في 7 فبراير 2006 · 0 رد · 3,409 مشاهدة · في OpenGL
مشاركة: واتساب X فيسبوك تيليجرام
#1

السلام عليكم :

ملاحظة :

هذه الطريقة ناقصة وتحتاج لتعديلات معيّنة .

بعد ان خصصت اسبوعا كامل لابحاث الكميرا ... طلعت هالتخصيصات فالصو ..

المسألة سهلة ..

قايلكم .. والله قايلكم .. هالاجانب دايما ما يعقدون الكود .. و يحولون الصعب سهل .

بلا Vector بلا وجع راس ..:P

فقط باللعب بالدالة :

gluLookAt( eyex, eyey, eyez, centx, centy, centz, upx, upy, upz );

ستحرك الكميرا . .

سبق أن سألت الاخوان عن حساب المتجه في البارمتر الاخير .. ووضحوا لي ذلك .

جئت البارحة .. اريد التطبيق لكن قلت خلونا .. نجرب بدون UP V ..

وطلعت النتيجة التي اريد ,,,

البارمتر الاول .. والثاني والثالث احداثيات الكاميرا نفسها .

البارمتر الرابع والخامس والسادس احداثيات الجسم الذي ننظر اليه .

الثلاث بارمترات الأخيرة تمثل متجه يسمّى Up Vector في الغالب قيمته هي : 0,1,0

وهذا تطبيق صغير :

#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();
}

التحكم :

الاسهم .

F2 -----F7

END - HOME

طيب كيف نجعل الكميرا تدور B) ,,, . اذكر رأيت كود مشابه اذا لقيته .. وضعته هنا :.

camera.zip

تم تعديل هذه المشاركة بواسطة الشمري في 20 يونيو 2009 في 23:02 — السبب: تصحيح بعض الأخطاء

logo1.png تطبيق طمأنينة ، نسخة بيتا على أندرويد

عبدالله الشمّري - Al-Shammari

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

هذا الموضوع مغلق.

مواضيع مشابهة