PDA

View Full Version : سوال: یک مشکل در رسم چند ضلعی به وسیله open gl



precious.girl33
پنج شنبه 06 بهمن 1390, 12:43 عصر
من وقتی با glBegin چند ضلعی میکشم اگر توی خود برنامه به glVertex ها عدد بدم(چه مستقیم بگم 0.2 و 0.3 چه یه متغییر تعریف کنم و بهش مقدار اولیه بدم) درست کار میکنه ولی اگه بخوام از کاربر بگیرم موقع run هنگ میکنه و error میده.هر چی هم تو منابع نگاه میکنم ندیدم که از کابر مختصات رئوس رو بگیرن...
مشکل کجاست؟؟؟:ناراحت:

amin1softco
شنبه 08 بهمن 1390, 18:29 عصر
سرگرم شدم یک برنامه نوشتم البته زیاد دقق نیست ولی مختصات رو می گیره از کاربر و در فرم بعدی خط را ترسیم می کنه....

81621


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

void output(int x, int y, char *string)
{
int len, i;
glRasterPos2i(x, y);
len = (int) strlen(string);
for (i = 0; i < len; i++)
{
glutBitmapCharacter(GLUT_BITMAP_HELVETICA_18, string[i]);
}
}
void line_draw(int x, int y, int xs, int ys)
{
glColor3f((rand()%100)/0.10, 0.100,(rand()%100)/0.10); //line colour set to blue
glBegin(GL_LINES);
glVertex2i(x,y); glVertex2i(xs,ys); //line seg1
glEnd();
}
void init(void)
{
glClearColor(1.0,1.0,1.0,0.0);
glMatrixMode(GL_PROJECTION);
gluOrtho2D(0.0,200.0,0.0,150.0);
}
int nux=0;
int xx=10;
int yy=100;
char a[100],aa[15];

void lineSegments(void)
{
glClear(GL_COLOR_BUFFER_BIT); //clears display window ??? ???? ???? ?????

line_draw(10,10, 10, 100);
output(xx,yy,"for get line plz press enter :");


glFlush(); //process all OGL functions immediately ???? ?? ???? ????
}
int k=0;
int x1=0,y3=0,x2=0,y2=0;
void keyboard(unsigned char key, int x, int y)
{
if( key == 13 )
{
if ( nux<=4 ){
switch (nux)
{
case 1: x1=k;k=0;
break;
case 2: y3=k;k=0;
break;
case 3: x2=k;k=0;
break;
case 4: y2=k;k=0;nux++;
break;
default: ;
}
if (nux < 4){

yy=yy-8;
xx=10;
a[0]='\0';
if ( (nux % 2) == 0) strcat(a,"x") ; else strcat(a,"y") ;
itoa(nux++,aa,10);strcat(a,aa);strcat(a,":");
output(xx,yy,(char *)a);
xx=18;
}}

if (nux>4) {

glClear(GL_COLOR_BUFFER_BIT);
output(1,1,"ok");
line_draw( x1, y3, x2, y2);
glFlush();
}
}else{
k*=10;
k+=(int)key-48;
}
glRasterPos2i(xx, yy);
glutBitmapCharacter(GLUT_BITMAP_HELVETICA_18, key);
xx=xx+6;

if( key == 27)
exit(0);
}
int main(int argc, char** argv)
{
glutInit(&argc, argv); //initialise GLUT
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowPosition(50, 100); //top left display window pos
glutInitWindowSize(400, 300); //display win width and height in pixel coords
glutCreateWindow("line"); //now create display win
init(); //run initilization procs
glutDisplayFunc(lineSegments); //call drawing func
glutKeyboardFunc(keyboard);
glutMainLoop(); //display all and wait
return 0;
}