الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

مساعده في Opengl الموضوع بسيط

بدأه xavy في 8 مايو 2009 · 1 رد · 692 مشاهدة · في OpenGL
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله

كيف الحال ياجماعه

الموضوع سهل ان شاء الله على اللي فاهم

إذا اريد ارسم رسمة مثلا مربع او مثلث بالطريقه البسيطه

أي عباره عن ثلاث خطوط متلاصقه او اربعه

السؤال هنا

كيف إذا رسمت المثلث على يسار الشاشه اجعله يتحرك إلى يمين الشاشه؟

اتمنى تفيدوني ^_^

#2

فيه اشي بالاوبن جي ال

اسمه الترانسفورميشن

ويقسم الى

scaling

rotation

translation

نحنا الاخير هو اللي بهمنا

وهذا برنامج متكامل حول الترانسفورميشن

#include<iostream.h>

#include"GL/glut.h"

float tx=0,ty=0;

float sx=1,sy=1;

float xp=0,yp=0;

float angle=0;

int type=1;

void polygon()

{

glColor3f(1,0,1);

glRectf(-15,-15,15,15);

glPointSize(5);

glColor3f(1,1,1);

glBegin(GL_POINTS);

glVertex2f(xp,yp);

glEnd();

}

void transformation()

{

glTranslatef(tx,ty,0);//translation on x and y

glTranslatef(xp,yp,0);

glScalef(sx,sy,0);//scaling on x and y

glTranslatef(-xp,-yp,0);

glTranslatef(xp,yp,0);

glRotatef(angle,0,0,1);//rotation on z

glTranslatef(-xp,-yp,0);

}

void draw()

{

transformation();

polygon();

}

void display()

{

glClearColor(0.0,0.0,0.0,0.0);

glClear(GL_COLOR_BUFFER_BIT);

glMatrixMode(GL_PROJECTION);

glLoadIdentity();

gluOrtho2D(-100,100,-100,100);

draw();

glutReshapeWindow(400,400);

glutSwapBuffers();

}

void Keyboard(unsigned char key,int x,int y)

{

if(key=='R'||key=='r')

type=3;

else

if(key=='S'||key=='s')

type=2;

else

if(key=='T'||key=='t')

type=1;

}

void Translate(int key)

{

if (key==GLUT_KEY_UP)

ty=ty+1.7;

else

if (key==GLUT_KEY_DOWN)

ty=ty-1.7;

else

if (key==GLUT_KEY_LEFT)

tx=tx-1.7;

else

if (key==GLUT_KEY_RIGHT)

tx=tx+1.7;

}

void Scale(int key)

{

if (key==GLUT_KEY_UP)

sy=sy+0.1;

else

if (key==GLUT_KEY_DOWN)

sy=sy-0.1;

else

if (key==GLUT_KEY_LEFT)

sx=sx-0.1;

else

if (key==GLUT_KEY_RIGHT)

sx=sx+0.1;

}

void Rotate(int key)

{

if (key==GLUT_KEY_LEFT)

angle=angle+5;

else

if (key==GLUT_KEY_RIGHT)

angle=angle-5;

}

/*void animation()

{

if (angle>360)

{

angle=0;

sx=0;

sy=0;

}

angle=angle+0.5;

sx=sx+0.001;

sy=sy+0.001;

glutPostRedisplay();

}*/

void Special(int key,int x,int y)

{

if(type==1)

Translate(key);

else

if(type==2)

Scale(key);

else

if(type==3)

Rotate(key);

if(key==GLUT_KEY_F1)

glPolygonMode(GL_FRONT_AND_BACK,GL_FILL);

else

if(key==GLUT_KEY_F2)

glPolygonMode(GL_FRONT_AND_BACK,GL_LINE);

// if (key=GLUT_KEY_F1)

// glutIdleFunc(animation);

// else

// if (key=GLUT_KEY_F2)

// {

// glutIdleFunc(0);

// sx=sy=1;

// angle=0;

// }

glutPostRedisplay();

}

void main(int argc,char *argv[])

{

glutInit(&argc,argv);

glutInitDisplayMode(GLUT_RGB|GLUT_DOUBLE);

glutInitWindowSize(300,300);

glutCreateWindow("Test");

glutDisplayFunc(display);

glutKeyboardFunc(Keyboard);

glutSpecialFunc(Special);

glutMainLoop();

}

لكن هذا البرنامج بيحرك الشكل من لوحة المفاتيح

سبحانك لا علم لنا إلا ما علمتنا إنك أنت العزيز الحكيم

مواضيع مشابهة