# Native Code > برنامه نویسی با C > برنامه نویسی با زبان C و ++C >  حرکت یک نقطه در openGl

## s++ 68-87

با سلام
می خواستم با openGl برنامه ای بنویسم بطوری که
یه نقطه به صورت دایره وار حرکت کنه
ولی انگار سرعتش خیلی زیاده!
چطور می تونم سرعتشو اروم تر کنم؟
تابعی هستش که بتونه وسطش وقفه بندازه؟


#include <windows.h>
#include <GL/glut.h>
#include <dos.h>
float f=0;
void winInit(void){
  glClearColor(1.0,1.0,1.0,0.0);
};
void Display()
 {
  glClear(GL_COLOR_BUFFER_BIT);
   glRotatef(f++,0,0,1);
  glPointSize(10.0);
  glColor3f(1.0, 0.0, 0.0);
  glBegin(GL_POINTS);
    glVertex2f(0.25, 0.75);
  glEnd();
  glutSwapBuffers();
 }

int main(int argc, char **argv)
{
  /* GLUT Initializations */
  glutInit(&argc, argv);
  glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA);
  glutInitWindowPosition(500,500);
  glutInitWindowSize(300,300);
  glutCreateWindow("DOT!!");
  winInit();
  glutDisplayFunc(Display);
  glutIdleFunc(Display);
  glutMainLoop();
  return 0;
}

----------


## amin1softco

احتیاجی به f نیست



glRotatef(0.1,0,0,0.1);

----------


## s++ 68-87

می خوام نقطه رو یه دایره بچرخه
دایره و نقطه رو با کد زیر رسم کردم
ولی برای گذاشتن نقطه روی دایره باید وردی vertex2f رو 0.7 بدم!!
چرا اینجوری شده؟ 


#include <windows.h>
#include <GL/glut.h>
#include <dos.h>
#include <math.h>
#define PI 3.1415926535898
GLint i, circle_points = 100;
GLfloat angle;
void winInit(void){
  glClearColor(1.0,1.0,1.0,0.0);
};
void Display()
 {
 glClear(GL_COLOR_BUFFER_BIT);
 glColor3f(0.0, 1.0, 0.0);
 glBegin(GL_LINE_LOOP);
    for (i = 0; i < circle_points; i++)
   {
  angle = 2*PI*i/circle_points;
  glVertex2f(cos(angle), sin(angle));
  }
 glEnd();
 glRotatef(-0.01,0,0,0.1);
 glPointSize(10.0);
 glColor3f(1.0, 0.0, 0.0);
 glBegin(GL_POINTS);
  glVertex2f(0.7, 0.7);
 glEnd();
 glutSwapBuffers();
 }
int main(int argc, char **argv)
{
  /* GLUT Initializations */
  glutInit(&argc, argv);
  glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA);
  glutInitWindowPosition(500,500);
  glutInitWindowSize(300,300);
  glutCreateWindow("DOT!!");
  winInit();
  //glMatrixMode(GL_PROJECTION);
  //glLoadIdentity();
  //glOrtho(0.0, 0.0, 0.0, 0.0, 0.0, 1.0);
  glutDisplayFunc(Display);
  glutIdleFunc(Display);
  glutMainLoop();
  return 0;
}

----------


## amin1softco

من نمی دونم مشکلت کجاست اما فکر کنم منظورت همین باشه 

#include <windows.h>
#include <GL/glut.h>
#include <dos.h>
#include <math.h>
#define PI 3.1415926535898
GLint i, circle_points = 100;
GLfloat angle;
void winInit(void){
  glClearColor(1.0,1.0,1.0,0.0);
};
void Display()
 {
 glClear(GL_COLOR_BUFFER_BIT);
 glColor3f(0.0, 1.0, 0.0);
 glBegin(GL_LINE_LOOP);
    for (i = 0; i < circle_points; i++)
   {
  angle = 2*PI*i/circle_points;
  glVertex2f(0.6*cos(angle), 0.6*sin(angle));
  }
 glEnd();
 glRotatef(-0.01,0,0,0.1);
 glPointSize(10.0);
 glEnable (GL_POINT_SMOOTH); 
 glColor3f(1.0, 0.0, 0.0);
 glBegin(GL_POINTS);
  glVertex2f(0.42, 0.42);
 glEnd();
 glutSwapBuffers();
 }
int main(int argc, char **argv)
{
  /* GLUT Initializations */
  glutInit(&argc, argv);
  glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
  glutInitWindowPosition(500,500);
  glutInitWindowSize(300,300);
  glutCreateWindow("DOT!!");
  winInit();
  //glMatrixMode(GL_PROJECTION);
  //glLoadIdentity();
  //glOrtho(0.0, 0.0, 0.0, 0.0, 0.0, 1.0);
  glutDisplayFunc(Display);
  glutIdleFunc(Display);
  glutMainLoop();
  return 0;
}


حالا چرا همه گیر دادن که این نقطه رو روی دایره بچرخونن من نمی دونم.

----------


## s++ 68-87

خیلی ممنونم
دقیقا منظورم همین بود
اعداد vertexرو با ازمون و خطا دادین؟

----------


## amin1softco

بله حدودی گفتم این جا می شه و اعداد رو وارد کردم.....

----------


## amin1softco

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


void line_draw(int x1, int y1, int x2, int y2)
{
  glColor3f((rand()%100)/0.10, 0.100,(rand()%100)/0.10); //line colour set to blue
glBegin(GL_LINES);
glVertex2i(x1,y1); glVertex2i(x2,y2); //line seg1
glEnd();
}
void init(void) //???? ????? ??????? 
{
glClearColor(1.0,1.0,1.0,0.0); //display window set to white ????? ?? ????? ?? ??? ????
glMatrixMode(GL_PROJECTION); //projection parameters ????? ????? ????
gluOrtho2D(0.0,200.0,0.0,150.0); //sets up WC extent ?? ???? ?? ?????? ?????? 
}
void lineSegments(void) // ???? ????? ?? ??
{
glClear(GL_COLOR_BUFFER_BIT); //clears display window ??? ???? ???? ?????
int x1,y1,x2,y2,color;

  for(int i=0;i<10;i++)                 
  {
    x1=rand()%100;
    y1=rand()%50;
    x2=rand()%100;
    y2=rand()%50;
    line_draw(x1+10,y1+10,x2+50,y2+50);
  }


glFlush(); //process all OGL functions immediately ???? ?? ???? ????
}
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("bress - lines"); //now create display win
init(); //run initilization procs
glutDisplayFunc(lineSegments); //call drawing func
glutMainLoop(); //display all and wait
return 0;
}


فقط زود برش دار که حالا سر وکله سالار پیدا میشه  :لبخند گشاده!:

----------

