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();
}
اقا من خیلی کد هارو عوض کردم خیلی سعی کردم که اینو درست کنم ولی نشد میخام یک دوربین درست کنم مثل 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();
}