PDA

View Full Version : delay+openGL



rsheytoonak
شنبه 24 اردیبهشت 1390, 01:41 صبح
سلام دوتا سوال داشتم یکی اینکه توی openGL تابع delay وجود داره که یه کد رو تو یه مدت مشخص اجرا کنه
2 من یه مثلث دارم میخوام با حرکت موس اون مثلث هم به سمت موس حرکت کنه باید چکار کنم؟

kochol
شنبه 24 اردیبهشت 1390, 12:46 عصر
سلام دوتا سوال داشتم یکی اینکه توی openGL تابع delay وجود داره که یه کد رو تو یه مدت مشخص اجرا کنه
2 من یه مثلث دارم میخوام با حرکت موس اون مثلث هم به سمت موس حرکت کنه باید چکار کنم؟

1- نه وجود نداره خودت باید با استفاده از timing ها این کار رو انجام بدی
2- مثلثت 2 بعدیه یا 3 بعدی اگه 2 بعدیه که کاری نداره فقط جابه جاش کن اگه سه بعدیه هم که باید picking یاد بگیری

rsheytoonak
شنبه 24 اردیبهشت 1390, 15:22 عصر
میشه یکم در مورد timing توضیح بدید

2
من یه همچین کدی نوشتم ولی جواب نمیده میشه راهنمایم کنید
#include<windows.h>
#include<gl/glut.h>
#include<stdio.h>
int mode = 0;
int a,b;
void disp()
{
glClear(GL_COLOR_BUFFER_BIT);

glColor3f(0,1,1);

glLoadIdentity();

glTranslatef(a/400,b/400,0);

if(mode == 1)
{
// glRotatef(90,0,0,1);
glTranslatef(a/400,b/400,0);
}

glColor3f(1,0,0);

glLineWidth(10);

glBegin(GL_TRIANGLES);
glColor3f(1,0,0);
glVertex2f(-0.2,0);
glColor3f(0,1,0);
glVertex2f(0,0.5);
glColor3f(0,0,1);
glVertex2f(0.2,0);
glEnd();

glFinish();
}

void mouse(int button, int state, int x, int y)
{
switch (button) {
case GLUT_LEFT_BUTTON:
if (state == GLUT_DOWN) {
// a=x;
mode = 1;
printf("%d%d",x,y);
a=x;
b=y;
//else
// mode = 0;
disp();

}
break;
default:
break;

}
}


void main(int argc, char ** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize(400,400);
glutInitWindowPosition(100,100);
glutCreateWindow("arm");

glClearColor(1,1,1,0);
glShadeModel(GL_FLAT);

glutDisplayFunc(disp);
// glutKeyboardFunc(keyb);
glutMouseFunc(mouse);
glutMainLoop();
}

kochol
شنبه 24 اردیبهشت 1390, 23:59 عصر
سلام
می تونی یه عکس از برنامه ای که گذاشتی بزاری اینجا خروجی برنامت رو ببینم.
مطمین نیستم ولی فکر کنم اگه به جای glVertex2f از glVertex2i استفاده کنی و glTranslatef(a,b,0);
فکر کنم درست بشه

pswin.pooya
یک شنبه 25 اردیبهشت 1390, 12:47 عصر
سلام
تابع display رو يكسري ديگه با glutIdleFunc ثبت كن. به احتمال زياد اين مشكلتون رو حل كنه.

rsheytoonak
یک شنبه 25 اردیبهشت 1390, 16:14 عصر
خروجی یه مثلث هست که وقتی جایی از صفحه کلیک می کنم اتفاقی نمیفته
اگه از glvertex2i استفاده کنم دیگه کلا مثلث رو هم نشون نمیده69944

rsheytoonak
یک شنبه 25 اردیبهشت 1390, 16:16 عصر
سلام
تابع display رو يكسري ديگه با glutIdleFunc ثبت كن. به احتمال زياد اين مشكلتون رو حل كنه.
glutIdleFunc رو هم اضافه کردم اتفاقی نیفتاد

pswin.pooya
یک شنبه 25 اردیبهشت 1390, 22:49 عصر
سلام
منم گيج شدم :D دو تا كار مونده كه فكر كنم اونها رو انجام بدي درست ميشه:

1. استفاده از glFlush به جاي glFinish (من تا حالا با يه بافر كار نكردم)

2. تغيير دستور glTranslatef به صورت زير (به احتمال زياد مشكل از اين باشه):


glTranslatef(a/400.0f,b/400.0f,0);

rsheytoonak
دوشنبه 26 اردیبهشت 1390, 17:44 عصر
سلام
منم گيج شدم :D دو تا كار مونده كه فكر كنم اونها رو انجام بدي درست ميشه:

1. استفاده از glFlush به جاي glFinish (من تا حالا با يه بافر كار نكردم)

2. تغيير دستور glTranslatef به صورت زير (به احتمال زياد مشكل از اين باشه):


glTranslatef(a/400.0f,b/400.0f,0);

آقا تشکر ماله همین glTranslate بود