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

طلب مساعدة في glutMotionFunc

بدأه computeach في 30 أكتوبر 2014 · 0 رد · 1,005 مشاهدة · في OpenGL
مشاركة: واتساب X فيسبوك تيليجرام
#1

أنا حابة أعمل برنامج مثل برنامج الرسام بواسطة  GLUT

 

يتم قراءة قيمة x و y  بواسطة  glutMotionFunc

 

ثم يتم الرسم بواسطة  GL_LINE_STRIP

 

المشكلة هي  glutMotionFunc   يتم قراءة قيم x , y   بناء على احداثيات شاشة window

 

وعند الرسم بواسطة  glVertex2f   لازم تكون قيمة x y  بناء على احداثيات  viewpoint

 

كيف يتم تحويل قيم x , y  بعد قرائتها بواسطة  glutMotionFunc     ليتم الرسم  بواسطة  glVertex2f   ؟

 

 

 الكود موجود بالأسفل الرجاء التوضيح ما هو الخطأ فيه:

#include <windows.h>  
#include <GL/glut.h>  

bool writeFlag=false;
float posX,posY;


void initGL() 
{
   glClearColor(1.0f, 1.0f, 1.0f, 1.0f); 
 }

 
void idle()  
{
   glutPostRedisplay();   
}

 
void display() 
{
   glClear(GL_COLOR_BUFFER_BIT);   
  glColor3f(0.0f, 0.0f, 1.0f); 
	

	   glBegin(GL_LINE_STRIP);
	   while(writeFlag)
	  {  glVertex2f(posX, posY);  	}
	  glEnd();
      
  glutSwapBuffers();   
}


void reshape(GLsizei width, GLsizei height) 
{  
	
   if (height == 0) height = 1;                // To prevent divide by 0
   GLfloat aspect = (GLfloat)width / (GLfloat)height;
 
   
   glViewport(0, 0, width, height);
 
   
   glMatrixMode(GL_PROJECTION);  
   glLoadIdentity();             
   if (width >= height) 
   {
     
      gluOrtho2D(-1.0 * aspect, 1.0 * aspect, -1.0, 1.0);
   } 
   else 
   {
     
     gluOrtho2D(-1.0, 1.0, -1.0 / aspect, 1.0 / aspect);
   }
}

void keyboard(unsigned char key, int x, int y)
{
   switch (key) 
   {
      case '1':     
         writeFlag=true;
         break;
	  case '2':
		  writeFlag=false;
		  break;
	  case 27:
		  exit(0);
		  break;
   }
}
void Motion(int x, int y) 
{

	posX=x;
	posY=y;
}

 
int main(int argc, char** argv) 
{
   glutInit(&argc, argv);         
   glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH);  
   glutCreateWindow("Simple Paint program by GLUT");  
   glutInitWindowSize(640, 480);   
   glutInitWindowPosition(50, 50); 
   glutDisplayFunc(display);       
   glutReshapeFunc(reshape);       
  glutKeyboardFunc(keyboard);
  glutMotionFunc(Motion);  // mouse click and move
   glutIdleFunc(idle);             
   initGL();                       
   glutMainLoop();                 
   return 0;
}

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