PDA

View Full Version : سوال: یک مشکل اساسی در تغییر مکان دوربین



orache
جمعه 24 خرداد 1392, 06:15 صبح
سلام به همه
اقا من خیلی کد هارو عوض کردم خیلی سعی کردم که اینو درست کنم ولی نشد میخام یک دوربین درست کنم مثل maya یا 3dmax ولی علاوه بر اینکه دوربینش خوب نیست بلکه گریتش هم 2 بعدی به نظر میرسه و از این گذشته قسمتی از صفحه حذف میشه
نمیدونم چرا انگار دوربین یک کادری رو نشون میده و بقیه رو از صفحه حذف میکنه مثلا فاصله ی دور رو حذف میکنه از ارتو هم استفاده کردم ولی نشد
حرکت دوربین هم خیلی افتضاحه زوم نمیشه خوب نمیچرخه وسطاش یهو وایمیسه 360 درجه هم نمیچرخه وقتی خواستم یک دستور ریست برای ارقام هاش درست کنم 360 درجش 30 درجه هم نمیشد
راستی چرا maya و... 3 بعدیه ولی من 3 بعدی درست میکنم انگار که 2 بعدیه ؟؟
خوب کد زیر رو تو اپن جی ال کپی کنین ببینین مشکل چیه خیلی احتیاج دارم ممنون
دکمه ها رو هم از متغیر هایی که کم و زیاد میشه میتونین بفهمین مثلا با q , w مقدار eyex رو کم و زیاد میکنه با a , s مقدار eyey و....

#include <freeglut.h>
#include <windows.h>
#include <stdio.h>
//////////////////////////////////////////variable
float _EYEX = 0.0f ;
float _EYEY = 0.0f ;
float _EYEZ = 0.0f ;
//////
float _CENTERX = 0.0f ;
float _CENTERY = 0.0f ;
float _CENTERZ = -100.0f ;
//////
float _UPX = 0.0f ;
float _UPY = 1.0f;
float _UPZ = 0.0f ;
//////
float _ZOOM_WIDTH = 800 ;
float _ZOOM_HEIGHT = 600 ;
void keyboard(unsigned char key , int x , int y )
{
switch (key)
{
case 'q' :
_EYEX += 0.01 ;
break ;
case 'w' :
_EYEX -= 0.01 ;
break ;
case 'a' :
_EYEY += 0.01 ;
break ;
case 's' :
_EYEY -= 0.01 ;
break ;
case 'z' :
_EYEZ += 0.01 ;
break ;
case 'x' :
_EYEZ -= 0.01 ;
break ;
case 'e' :
_CENTERX += 10 ;
break ;
case 'r' :
_CENTERX -= 10 ;
break ;
case 'd' :
_CENTERY += 10 ;
break ;
case 'f' :
_CENTERY -= 10 ;
break ;
case 'c' :
_CENTERZ += 10 ;
break ;
case 'v' :
_CENTERZ -= 10 ;
break ;
case 't' :
_UPX += 0.1 ;
break ;
case 'y' :
_UPX -= 0.1 ;
break ;
case 'g' :
_UPY += 0.1 ;
break ;
case 'h' :
_UPY -= 0.1 ;
break ;
case 'b' :
_UPZ += 0.1 ;
break ;
case 'n' :
_UPZ -= 0.1 ;
break ;
case 'o' :
_ZOOM_WIDTH += 10 ;
_ZOOM_HEIGHT += 10 ;
break ;
case 'p' :
_ZOOM_WIDTH -= 10 ;
_ZOOM_HEIGHT -= 10 ;
break ;
}
}
///////////////////////////////
void display ()
{
glClear(GL_COLOR_BUFFER_BIT );
glClearColor(0.5,0.5,0.5,0.5);
glColor3f(0,0,0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glViewport(0,0,_ZOOM_WIDTH ,_ZOOM_HEIGHT);
gluLookAt(_EYEX, _EYEY, _EYEZ, _CENTERX, _CENTERY, _CENTERZ, _UPX, _UPY, _UPZ);
////
glLineWidth(2);
for ( float _LINEX = -2 ; _LINEX <= 2.1 ; _LINEX += 0.3 )
{
glBegin(GL_LINES);
glVertex2f(_LINEX,2.1);
glVertex2f(_LINEX,-2.1);
glEnd();
}
for ( float _LINEY = -2; _LINEY <= 2.1 ; _LINEY += 0.3 )
{
glBegin(GL_LINES);
glVertex2f(2.1,_LINEY);
glVertex2f(-2.1,_LINEY);
glEnd();
}
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
glRotatef(90,1,0,0);
glRotatef(180,0,0,1);
glutWireTeapot(0.3);
glColor3f(0,1,0);
glBegin(GL_LINES);
glVertex2f(0,0);
glVertex2f(0,0.3);
glEnd();
glColor3f(1,0,0);
glBegin(GL_LINES);
glVertex2f(0,0);
glVertex2f(0.3,0);
glEnd();
glColor3f(0,0,1);
glBegin(GL_LINES);
glVertex3f(0,0,0);
glVertex3f(0,0,0.3);
glEnd();
glPopMatrix();
glutPostRedisplay();
glutSwapBuffers();
}
///////////
int main ( int argc, char * argv[] )
{
glutInit(&argc,argv);
glutInitWindowSize(800,600);
glutInitDisplayMode(GLUT_DOUBLE);
glutCreateWindow("_orache_");
glutDisplayFunc(display);
glutKeyboardFunc(keyboard);
glutMainLoop();
}

orache
جمعه 24 خرداد 1392, 12:52 عصر
اقا هرکی بلده بگه خیلی نیاز دارم

UfnCod3r
جمعه 24 خرداد 1392, 12:57 عصر
ماتریس Projection رو نساختی :لبخندساده:

orache
جمعه 24 خرداد 1392, 13:07 عصر
منظورت glMatrixMode(GL_PROJECTION); هست ؟؟ اینو که ساختم میشهدقیقا بگی چیکار کنم ! یعنی اگه بذارم تمامی این مشکلات حل میشه ؟؟ الان دارم دنبال اون تاپیک تو میگردم یادمه یه همچین مشکلی داشتی میخام دانلودش کنم ببینم چه طور شده

1485159
جمعه 24 خرداد 1392, 13:19 عصر
سلام


gluPerspective(45, (GLfloat)_ZOOM_WIDTH/(GLfloat)_ZOOM_HEIGHT, 0.1f, 100.0f);

رو بعد از


glViewport(0,0,_ZOOM_WIDTH ,_ZOOM_HEIGHT);

اضافه کن.
البته شاید مشکل دیگه ای هم باشه.(این به چشمم خورد).

orache
جمعه 24 خرداد 1392, 13:36 عصر
اره تا جاییش درست شد ببین یک دقیقه میتونی لطف کنی بیای یاهو
amir1375_6@yahoo.com