PDA

View Full Version : مشکل در رسم بیضی با OpenGL



Shadow Dancer
چهارشنبه 16 تیر 1389, 04:20 صبح
سلام و وقت بخیر خدمت همگی
من این کد رو برای ترسیم بیضی با استفاده از OpenGL نوشتم. هیچ خطای زمان کامپایلی هم دریافت نکردم اما موقع اجرا گویی که برنامه وارد یک حلقه نامتناهی میشه و صفحه ترسیم هنگ میکنه. هر چی هم خط به خط دیباگ کردم و مقدار متغیرها رو چک کردم نفهمیدم مشکل از کجاست.
لطفا اشکال این کد رو بفرمایید :

#include "stdafx.h"
#include <math.h>
#include "glut.h"

const float DEG2RAD = 3.14159/180;
void init (void)
{
glClearColor(1.0,1.0,1.0,0.0);
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1,1,1);
glMatrixMode(GL_PROJECTION);
gluOrtho2D(0.0,200.0,0.0,150.0);
}
void DrawEllipse()
{

float x,y,z;
float t;
glBegin(GL_POINTS);
t= 0;
while(t<360)
{
x = 5*sin(t);
y = 4*cos(t);
z = 0;
glVertex2f(x,y);
t++;
}
glEnd();
glFlush();
}


int _tmain(int argc, char** argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_RGB);
glutInitWindowPosition(50,100);
glutCreateWindow("Drawing Line Using OpenGL");
init();
glutDisplayFunc(DrawEllipse);
glutMainLoop();
return 0;
}

int _tmain(int argc, char** argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_RGB);
glutInitWindowPosition(50,100);
glutCreateWindow("Drawing Line Using OpenGL");
init();
glutDisplayFunc(DrawEllipse);
glutMainLoop();
return 0;
}


}

karim_medusa
چهارشنبه 16 تیر 1389, 08:49 صبح
1- رنگ پس زمینه و رنگ ترسیم هر دو سفید هستند
2- مبدا در گوشه پایین سمت چپ تنظیم کردی باید قبل از ترسیم بیضی انتقال انجام دهی.
3-از ثابت DEG2RAD استفاده نکردی برای تبدیل رادیان به درجه.
4- شعاع 5 و 4 در مقایسه با 200 و 150 کم هستند.

کد زیر اصلاح شده


const float DEG2RAD = 3.14159/180;
void init (void)
{
glClearColor(1.0,1.0,1.0,0.0);
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(0,0,0); // black color
glMatrixMode(GL_PROJECTION);
gluOrtho2D(0.0,200.0,0.0,150.0);
}
void DrawEllipse()
{
float x,y,z;
float t;
glTranslatef(100,75,0); //translate
glBegin(GL_POINTS);
t= 0;
while(t<360)
{
x = 50*sin(t*DEG2RAD); // degree , radius
y = 40*cos(t*DEG2RAD);
z = 0;
glVertex2f(x,y);
t++;
}
glEnd();
glFlush();
}


int main(int argc, char** argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_RGB);
glutInitWindowPosition(50,100);
glutCreateWindow("Drawing Line Using OpenGL");
init();
glutDisplayFunc(DrawEllipse);
glutMainLoop();
return 0;
}

Shadow Dancer
چهارشنبه 16 تیر 1389, 22:23 عصر
بسیار متشکرم از راهنمایی مفیدتون