PDA

View Full Version : حرکت یک نقطه در openGl



s++ 68-87
دوشنبه 09 فروردین 1389, 12:43 عصر
با سلام
می خواستم با 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
دوشنبه 09 فروردین 1389, 15:51 عصر
احتیاجی به f نیست




glRotatef(0.1,0,0,0.1);

s++ 68-87
پنج شنبه 12 فروردین 1389, 20:41 عصر
می خوام نقطه رو یه دایره بچرخه
دایره و نقطه رو با کد زیر رسم کردم
ولی برای گذاشتن نقطه روی دایره باید وردی 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
جمعه 13 فروردین 1389, 11:17 صبح
من نمی دونم مشکلت کجاست اما فکر کنم منظورت همین باشه


#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
جمعه 13 فروردین 1389, 13:23 عصر
خیلی ممنونم
دقیقا منظورم همین بود
اعداد vertexرو با ازمون و خطا دادین؟

amin1softco
شنبه 14 فروردین 1389, 14:36 عصر
بله حدودی گفتم این جا می شه و اعداد رو وارد کردم.....

amin1softco
چهارشنبه 18 اسفند 1389, 10:27 صبح
#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;
}


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