PDA

View Full Version : glutReshapeFunc



mg_mahyar
چهارشنبه 10 تیر 1388, 17:59 عصر
سلام من یک برنامه ساختم با opengl
این برنامه یه سری ورودی میگیره بعدش یک پنجره میسازه بعد میاد با کلیک راست موس منو برات باز میکنه بعد که منو باز شد میای یک گزینه انتخاب میکنی و بعد هم رسم میکنه ولی وقتی دوباره کلیک راست میکنی و منو باز میشه و مثلا قبلا line روز زدی الان circle رو میزنی هیچ کاری نمیکنه کلا برنامه یک بار مقدار دهی و اجرا میشه و دیگه به هیچ صراطی مستقیم نیست حتی از توابع scale و چرخش و ... هم نمیتونم استفاده کنم
reshape رو بکار نبردم ایراد از اونه؟

pswin.pooya
چهارشنبه 10 تیر 1388, 18:19 عصر
از glut برای ساخت پنجره استفاده کردی؟

mg_mahyar
چهارشنبه 10 تیر 1388, 20:51 عصر
از glut برای ساخت پنجره استفاده کردی؟


بله برنامه منو دارید که همونه


int main(int argc, char** argv)




{

msg();

glutInit(&argc,argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowPosition(0,0);
glutInitWindowSize(400,400);
glutCreateWindow("MAHDI_GORDAN _GRAPHIC1");
menumpuse();
glutDisplayFunc(display);
init();
glutMainLoop();
return 0;


}

pswin.pooya
چهارشنبه 10 تیر 1388, 22:13 عصر
خوب واضحه، تابعی که باید منوها رو پشتیبانی کنه ریجیستر نکردی:

اگه اشتباه نکنم:


glutMenuStatusFunc

mg_mahyar
پنج شنبه 11 تیر 1388, 12:03 عصر
خوب واضحه، تابعی که باید منوها رو پشتیبانی کنه ریجیستر نکردی:

اگه اشتباه نکنم:


glutMenuStatusFunc

منو ها بار اول کار میکنه من همه توابع ربوط به منو رو ریختم توی یک تابع و اونو صدا زدم و اون تابع هم


void menu(int op)
{
switch(op)
{
case 1:m_draw=1;break;//Quads
case 2:m_draw=2;break;//Circle
case 3:m_draw=3;break;//Line
case 4:m_draw=4;break;//Ellipse
case 5:m_draw=5;break;//6Ede
case 'Q':
case 'q':
exit(0);
}
}


void menumpuse()
{
int subMenu = glutCreateMenu(menu);
glutAddMenuEntry("Line", 3);
glutAddMenuEntry("Quads", 1);
glutAddMenuEntry("Random 6Edg!", 5);
glutAddMenuEntry("Circle", 2);
glutAddMenuEntry("Ellipse", 4);
//.................................................. .................................................. ............
int subMenu2 = glutCreateMenu(menu);
glutAddMenuEntry("TX", 6);
glutAddMenuEntry("TY", 7);
glutAddMenuEntry("RX", 8);
glutAddMenuEntry("RY", 9);
//.................................................. .................................................. ..............
int subMenu3 = glutCreateMenu(menu);
glutAddMenuEntry("PT1", 21);
glutAddMenuEntry("PT2", 22);
glutAddMenuEntry("PT3", 23);
glutAddMenuEntry("PT4", 24);
glutAddMenuEntry("PT5", 25);
glutAddMenuEntry("PT5", 26);
glutAddMenuEntry("PT5", 27);
//.................................................. .................................................. ................
glutCreateMenu(menu);
glutAddSubMenu("SHAPES", subMenu);
glutAddSubMenu("MOVE", subMenu2);
glutAddSubMenu("Point Size", subMenu3);
glutAddMenuEntry("Esc", 'q');
glutAttachMenu(GLUT_RIGHT_BUTTON);
}

pswin.pooya
جمعه 12 تیر 1388, 15:17 عصر
ببین احتمالا توی ماتریسها و یا توابع رسم اشتباه داری. مثلا مد ماتریس رو عوض کردی و یادت رفته که برگردونیش. به غیر از این محال میدونم مشکل از توابع OpenGL باشه

mg_mahyar
جمعه 12 تیر 1388, 15:31 عصر
ما که کل برنامه رو گزاشتیم مونده دوتا تابع

glutDisplayFunc(display);

init();
اینا رو هم میزارم تا ببینید ایرادی نداره

void init(void)
{
glClearColor(1,0.1,0.4,0);
glPointSize(PTSIZE);glLineWidth(PTSIZE);
glMatrixMode(GL_PROJECTION);
gluOrtho2D(-400,400,-400,400);
}

mg_mahyar
جمعه 12 تیر 1388, 15:32 عصر
خوب کل کد رو میزار

pswin.pooya
جمعه 12 تیر 1388, 20:42 عصر
دو تا مشکل داری:

1. تو تابع init بعد از تغییر ماتریس دوباره اون رو به نما مدل بر گردون
2. تعداد push و popهات توی تابع dispaly برابر نیستن.