PDA

View Full Version : آموزش: آموزش OpenGL



صفحه : 1 [2]

ehsanware
دوشنبه 20 آذر 1391, 11:59 صبح
شما بایدglut32.dll را در syswow64 کپی کنید. و x86 درسته...
همه رو وارد کردم الان چک کردم دیدم کلا اصلا هیچ هدری رو نمیشناسه هیچ برنامه ای رو نمیتونه اجرا کنه ولی تو فایل lib همه ی هدرها هست نمیدونم چیکار کنم:گریه:

amin1softco
دوشنبه 20 آذر 1391, 12:04 عصر
هیچی اول 1 متر با مانیتور فاصله بگیر بعد محکم سرتو بکوب به مانیتور خلاص والا..........

کلا اصلا هیچ هدری رو نمیشناسه هیچ برنامه ای رو نمیتونه اجرا کنه ولی تو فایل lib همه ی هدرها هست نمیدونم چیکار کنم
خوب ببین این می تونه مشکل از ویژوالت یک برنامه ساده داس می تونی اجرا کنی ؟

reza-sj
چهارشنبه 22 آذر 1391, 11:58 صبح
سلام به همه دوستان
من دارم یه پروژه paint ساده می نویسم به رسم خط و مربع و دایره و ... مشکل خاصی ندارم مشکل اصلی من وقتی هستش که میخوام مختصاتی که باید اون شکل رسم بشه رو از موس بگیرم به مشکل بر میخورم من از دستور :
glutMouseFunc( mouse);



استفاده میکنم مشکل اینجاست که میخوام 2 تا مختصات از موس بخونه اما این مختصات هایی که میخونه با مختصات صفحه هماهنگی نداره اینم کده من هستش ممنون میشم که کمکم کنید :



#include<gl/glut.h>
#include<math.h>
int xx1=2,xx2=70,yy1=2,yy2=2;
int i=0;
double round(double x)
{
return floor(x + 0.5);
}
void DDALine( GLint X1, GLint Y1, GLint X2, GLint Y2)
{
GLint iX, iY, Temp;
float m, X, Y;
if( (X2-X1) > (Y2-Y1))
{
if( X1 > X2)
{
Temp=X1; X1=X2; X2=Temp;
Temp=Y1; Y1=Y2; Y2=Temp;
}
Y=Y1;
m = (GLfloat) (Y2-Y1)/(X2-X1);
for( iX = X1; iX <= X2; iX ++)
{
glBegin(GL_POINTS);
glColor3f(1.0,0.2,0.0);
glVertex2i(iX,round(Y));
glEnd();
Y += m;
}
}
else
{
if( Y1 > Y2)
{
Temp=X1; X1=X2; X2=Temp;
Temp=Y1; Y1=Y2; Y2=Temp;
}
X = X1;
m = (float) (X2-X1)/(Y2-Y1);
for( iY = Y1; iY <= Y2; iY ++)
{
glBegin(GL_POINTS);
glColor3f(1.0,0.2,0.0);
glVertex2i(round(X),iY);
glEnd();
X += m;
}
}
}
void init()
{
glClearColor(0,0,0,0);
glMatrixMode(GL_PROJECTION);
gluOrtho2D(0,100,0,200);
}
void display()
{

glClear(GL_COLOR_BUFFER_BIT);
glEnable(GL_POINT_SMOOTH);
glPointSize(10);
if (i==2)
{
DDALine(xx1,yy1,xx2,yy2);
}
glFlush();
i=0;
}
void mouse(int button, int state, int x, int y)
{
i++;
if (state == GLUT_DOWN)
{

if (i==1)
{
xx1=x;
yy1=y;

}
if (i==2)
{
xx2=x;
yy2=y;

}

}
 
 
}
int main(int argc,char **argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);
glutInitWindowSize(500,500);
glutInitWindowPosition(200,200);
glutCreateWindow("Line With Slope");
init();
glutDisplayFunc(display);
glutMouseFunc( mouse);
glutMainLoop();
return 0;
}

amin1softco
پنج شنبه 23 آذر 1391, 09:10 صبح
مختصات ماوس معکوس است یعنی یکبار باید از ارتفاع را ازش کم کنیم تا مختصات ما بدست بیاد .
مثلاً اگر از
gluOrtho2D(0.0,650.0,0.0,300.0);
.
.
void myMouseFunc( int button, int state, int x, int y ) {
if ( button==GLUT_LEFT_BUTTON && state==GLUT_DOWN ) {

xx=x;
yy=300-(y);

اگر دستگاه 1 باشه بجای 300 از یک کمش می کنیم.
این پست (http://barnamenevis.org/showthread.php?353277-%D8%A8%D8%A7%D8%B2%DB%8C/page2) را ببین.

H_G_G_I
دوشنبه 04 دی 1391, 10:52 صبح
سلام ببخشید سوالمو اینجا می پرسم اخه سولای مختلفه !:خجالت:
اول از همه یکم

glLightfv(GL_LIGHT0, GL_POSITION, position);

رو توضیح بدین یعنی الان منظورم اینه که این نور ما نقه ایه جهتیه اسپاته !:متفکر:
چطور تعیین کنم چه مدلی باشه !:متفکر:

بعد این یعنی چی ؟ چی رو فعال می کنه ؟:متفکر:
glEnable(GL_CULL_FACE);

بافر Stencil واس چیه ؟:متفکر:

بعد الان من مثلا با اپن جی ال برنامه نوشتم با ورژن جندش نوشتم ؟ الان از کجا بدونم تو چه ورژنی کار می کنه !:متفکر:
شیدر هم استفاده نکردم ! تو همه کار می کنه ؟:متفکر:
:متفکر:
:متفکر:
:متفکر:
:متفکر:

ab_ir_007
سه شنبه 05 دی 1391, 11:19 صبح
دوستان سلام
کسی کد رسم هواپیمای 2 بعدی در opengl رو داره برام بزاره؟
فوری یه!!!!

amin1softco
سه شنبه 05 دی 1391, 15:22 عصر
سلام ببخشید سوالمو اینجا می پرسم اخه سولای مختلفه !:خجالت:
اول از همه یکم

glLightfv(GL_LIGHT0, GL_POSITION, position);

رو توضیح بدین یعنی الان منظورم اینه که این نور ما نقه ایه جهتیه اسپاته !:متفکر:
چطور تعیین کنم چه مدلی باشه !:متفکر:

بعد این یعنی چی ؟ چی رو فعال می کنه ؟:متفکر:
glEnable(GL_CULL_FACE);

بافر Stencil واس چیه ؟:متفکر:

بعد الان من مثلا با اپن جی ال برنامه نوشتم با ورژن جندش نوشتم ؟ الان از کجا بدونم تو چه ورژنی کار می کنه !:متفکر:
شیدر هم استفاده نکردم ! تو همه کار می کنه ؟:متفکر:
:متفکر:
:متفکر:
:متفکر:
:متفکر:

glLightfv ( light , pname , params ) → None
پارامتر ها
light
یک نور را مشخص می کند . تعداد نور ها بر حسب پیاده سازی مشخص می شود ولی حداقل 8 نور پشتیبانی می شود اینها بوسیله نام سمبلیک مشخص می شوند از GL_LIGHT i زمانی که 0 ≤ i < GL_MAX_LIGHTS

pname
نوع منبع نور را مشخص می کند برای light
مقادیرقابل قبول
GL_AMBIENT, GL_DIFFUSE, GL_SPECULAR, GL_POSITION, GL_SPOT_CUTOFF, GL_SPOT_DIRECTION, GL_SPOT_EXPONENT, GL_CONSTANT_ATTENUATION, GL_LINEAR_ATTENUATION, and GL_QUADRATIC_ATTENUATION are accepted.

params
یک اشاره گر به مقادیر که به pnameو نوع نور تخصیص داده می شود.

تشریح :
glLight تعیین می کند مقادیر منحصر به فرد منبع نور را مشخص می کند. light نام نور و یک نام سمبلیک از GL_LIGHT i, زمانی که 0 ≤ i < GL_MAX_LIGHTS و pname مشخص می کند یکی از 10 مشخصه منبع نور را دوباره بوسیله نام سمبلیک
params می تونه یک مقدارباشه یا یک اشاره گر به آرایه ایی از مقادیر جدید.

برای فعال و غیر فعال کردن محاسبات نور می توانید بوسیله فراخوانی glEnable و glDisable با آرگومان GL_LIGHTING اقدام کنید. نور پردازی بطور پیش فرض غیر فعال است. زمانی که فعال می شود منابع نور فعال در محاسبات نور پردازی شرکت می کنند . منبع نور i بوسیله دستور glEnable و glDisable با آرگومان GL_LIGHT i فعال و غیر فعال می شوند.

10 پارامتر منبع نور به ترتیب زیر است :
GL_AMBIENT
نور محیط یا Ambient Light:
params شامل 4 عدد صحیح یا ممیز شناور که مشخص می کنند رنگ نور محیطی RGBA و شدت نور را. مقادیر صحیح به صورت خطی به دستگاه واحد نگاشت می شوند بیشترین مقدار به 1 و منفی ترین مقدار به -1 نگاشت می شود. مقادیر ممیز شناور بطور مستقیم نگاشت می شوند. شدت اولیه نور (0, 0, 0, 1) است.

GL_DIFFUSE
نور پخشی :
params شامل 4 عدد صحیح یا ممیز شناور که مشخص می کنند رنگ نور محیطی RGBA و شدت نور را. مقادیر صحیح به صورت خطی به دستگاه واحد نگاشت می شوند بیشترین مقدار به 1 و مقادیر ممیز شناور بطور مستقیم نگاشت می شوند. مقدار اولیه برای GL_LIGHT0 بابر (1, 1, 1, 1) است. برای نور های دیگر مقادیر دیگر مقادیر دیگر (0, 0, 0, 0) است.

GL_SPECULAR
نور متمرکز :
params شامل 4 عدد صحیح یا ممیز شناور که مشخص می کنند رنگ نور محیطی RGBA و شدت نور را. مقادیر صحیح به صورت خطی به دستگاه واحد نگاشت می شوند بیشترین مقدار به 1 و مقادیر ممیز شناور بطور مستقیم نگاشت می شوند. مقدار اولیه برای GL_LIGHT0 برابر (1, 1, 1, 1) و برای نور ها دیگر برابر (0, 0, 0, 0) است.

GL_POSITION
نور موضعی, نقطه ایی :

params شامل 4 عدد صحیح یا ممیز شناور که مشخص می کنند رنگ نور محیطی RGBA و شدت نور را. مقادیر صحیح به صورت خطی به دستگاه واحد نگاشت می شوند بیشترین مقدار به 1 و مقادیر ممیز شناور بطور مستقیم نگاشت می شوند.

موضع تبدیل بوسیله ماتریس modelview است زمانی که glLight فراخوانی می شود زمانی که فقط یک نقطه است و آن در مختصات چشم ذخیره می شود اگر کامپوننت w از موقعیت صفر باشد نور رفتار می کند شبیه منبع نور مستقیم . محاسبات نور پخشی و موضعی نیاز به جهت دارند . ولی نه موقعیت واقعی موقعیت شروع برابر (0, 0, 1, 0) است پس منبع اولیه نور مستقیم است . به موازات جهت مختصات محور -z.

بقیشم من حسش نبود ترجمه کنم ولی اینا رو برو در قسم برنامه های و مثال های openGL یک برنامه هست مقادیرشونو کم و زیاد کن بدست میاد.

GL_SPOT_DIRECTION
params contains three integer or floating-point values that specify the direction of the light in homogeneous object coordinates. Both integer and floating-point values are mapped directly. Neither integer nor floating-point values are clamped.

The spot direction is transformed by the inverse of the modelview matrix when glLight is called (just as if it were a normal), and it is stored in eye coordinates. It is significant only when GL_SPOT_CUTOFF is not 180, which it is initially. The initial direction is (0, 0, -1).

GL_SPOT_EXPONENT
params is a single integer or floating-point value that specifies the intensity distribution of the light. Integer and floating-point values are mapped directly. Only values in the range [0,128] are accepted.

Effective light intensity is attenuated by the cosine of the angle between the direction of the light and the direction from the light to the vertex being lighted, raised to the power of the spot exponent. Thus, higher spot exponents result in a more focused light source, regardless of the spot cutoff angle (see GL_SPOT_CUTOFF, next paragraph). The initial spot exponent is 0, resulting in uniform light distribution.

GL_SPOT_CUTOFF
params is a single integer or floating-point value that specifies the maximum spread angle of a light source. Integer and floating-point values are mapped directly. Only values in the range [0,90] and the special value 180 are accepted. If the angle between the direction of the light and the direction from the light to the vertex being lighted is greater than the spot cutoff angle, the light is completely masked. Otherwise, its intensity is controlled by the spot exponent and the attenuation factors. The initial spot cutoff is 180, resulting in uniform light distribution.
GL_LINEAR_ATTENUATION , GL_QUADRATIC_ATTENUATION , GL_CONSTANT_ATTENUATION
params is a single integer or floating-point value that specifies one of the three light attenuation factors. Integer and floating-point values are mapped directly. Only nonnegative values are accepted. If the light is positional, rather than directional, its intensity is attenuated by the reciprocal of the sum of the constant factor, the linear factor times the distance between the light and the vertex being lighted, and the quadratic factor times the square of the same distance. The initial attenuation factors are (1, 0, 0), resulting in no attenuation.
Notes
It is always the case that GL_LIGHT i = GL_LIGHT0 + i.




بعد این یعنی چی ؟ چی رو فعال می کنه ؟:متفکر:
glEnable(GL_CULL_FACE);

ببین در ابتدا این مشخصه غیر فعال است ولی اگر فعال بشه با این دستور ما خودمون بوسیله دستور glFrontFace مشخص می کنیم پشت یا رو اجسام برای رندر انتخاب یا گلچین بشود !!
GL_FRONTو GL_BACK, و GL_FRONT_AND_BACK قابل قبول است .

بافر استنسیل به طور خیلی ساده برای مشخص کردن یک محدوده برای رندر کردن استفاده می شود و یک بافر اضافه محسوب می شود. ولی می شه بوسیله اون افکت های خیلی زیادی را خلق کرد یا همین سایه زدن و اینا.



بعد الان من مثلا با اپن جی ال برنامه نوشتم با ورژن جندش نوشتم ؟ الان از کجا بدونم تو چه ورژنی کار می کنه !
ببنید ورژن openGL بستگی به کارت گرافیک شما داره وقتی درایور ها نصب می شوند openGL هم آپدیت می شود ولی بطور پیش فرض روی ویندوز 1.1 است که سرعت و ایناش کمتر از ورژن های بعدی است و یکسری قابلیت ها را نداره شما وقتی از یک قابلیت جدید استفاده کنید می تونید برید وارد سایت nvidia و ببنید ورژن فلان آیا ساپورتش میک نه یا خیر ولی اکثراً مشکلی نداره حتی من می تونم بهتون قطعه کد بدم که برنامه رو روی آندروید یا گوشی آیفون اپل تست کنید .

لینک های مفید :
http://www.opengl.org/wiki/Getting_Started
http://en.wikipedia.org/wiki/Stencil_buffer
http://developer.apple.com/library/ios/#documentation/3DDrawing/Conceptual/OpenGLES_ProgrammingGuide/Introduction/Introduction.html
http://developer.android.com/training/graphics/opengl/index.html

اینا شاید غلط و اشتباه زیاد داشته باشه خوشحال می شم دوستان اصلاح کنند.

nok_tala
سه شنبه 05 دی 1391, 20:42 عصر
سلام میشه توابع
glDrawArrays
glDrawArraysIndirect
glDrawArraysInstanced
glDrawArraysInstancedBaseInstance
glDrawBuffers
glDrawElementsBaseVertex رو توضیح بدید ؟

amin1softco
سه شنبه 05 دی 1391, 22:04 عصر
glDrawArrays ( mode , first , count ) → رندر کردن اشکال پایه بوسیله داده های ماتریسی

پارا متر ها :
mode
نوع شکل پایه را مشخص می کند و می تواند مقادیر ثابت زیر باشد :
GL_POINTS, GL_LINE_STRIP, GL_LINE_LOOP, GL_LINES, GL_TRIANGLE_STRIP, GL_TRIANGLE_FAN, GL_TRIANGLES, GL_QUAD_STRIP, GL_QUADS, و GL_POLYGON قابل قبول هستند.

first
مشخص کننده راس شروع.

count
مشخص کننده تعداد که باید رندر شود.

Description
glDrawArrays specifies multiple geometric primitives with very few subroutine calls. Instead of calling a GL procedure to pass each individual vertex, normal, texture coordinate, edge flag, or color, you can prespecify separate arrays of vertexes, normals, and colors and use them to construct a sequence of primitives with a single call to glDrawArrays.

When glDrawArrays is called, it uses count sequential elements from each enabled array to construct a sequence of geometric primitives, beginning with element first. mode specifies what kind of primitives are constructed, and how the array elements construct those primitives. If GL_VERTEX_ARRAY is not enabled, no geometric primitives are generated.

Vertex attributes that are modified by glDrawArrays have an unspecified value after glDrawArrays returns. For example, if GL_COLOR_ARRAY is enabled, the value of the current color is undefined after glDrawArrays executes. Attributes that aren't modified remain well defined.

Notes
glDrawArrays is available only if the GL version is 1.1 or greater.


برای بقیه هم به این رفرنس opengl 4 مراجعه کنید
http://www.opengl.org/sdk/docs/man/

sanazy
جمعه 13 بهمن 1391, 15:38 عصر
سلام میشه بگید چطور میشه ابر بیضی سه بعدی رسم کرد؟
و اینکه واسه انداختن عکس روی بزیه چیکار کنیم؟

UfnCod3r
جمعه 13 بهمن 1391, 16:00 عصر
سلام میشه بگید چطور میشه ابر بیضی سه بعدی رسم کرد؟
و اینکه واسه انداختن عکس روی بزیه چیکار کنیم؟

برای ابر اول باید تابع رسم کمان رو بنویسی !
بعد ابر درست کردن کاری نداره دیگه ساده میشه !
برای عکس انداختن هم اول باید عکس رو با یه کتاب خون ای لود کنید بعد وارد پان جی ال کنید !
سرچ کنید مثال هست ! اگه تو کد مشکلی داشتین بگین !:لبخندساده:

sanazy
شنبه 14 بهمن 1391, 00:48 صبح
مرسی از کمکتون اما من اینارو میدونم !!!!!!
تو ابربیضی وقتی x,y,z بدست آوردیم باید چیکار کنیم؟ تابعی هست واسه کشیدن ابربیضی؟
عکسم هرجا سرچ کردم جواب درست حسابی پیدا نکردم هیچ جا درست توضیح نداده :(:ناراحت:

kazemiam
شنبه 24 فروردین 1392, 14:48 عصر
با سلام
میخواستم بدونم برای انتخاب یک شکل دو بعدی چطوری باید مختصات اون شکل رو برای موس بدست بیارم؟

یه برنامه کوچیک دارم مینویسم که با کلیک بر روی یک مربع 1x1 به حالت انتخاب بره(مثلا دور اون خط کشیده بشه) و بعد از اون، با کلید های صفحه کلید قابل جابجایی باشه و در صورتی که جای دیگری از صفحه(غیر از مربع) کلیک شد دیگه از حالت انتخاب خارج بشه.

بنده به صورت زیر محدوده شکل رو مشخص کردم اما انتخاب نمیشه!! :ناراحت:
میدونم کاملا اشتباه هستش، اما جور دیگه ای هم نتونستم حساب کنم!!!:اشتباه:
با کلیک بر روی صفحه، تابع زیر فراخوانی میشه:

void Positions(int x,int y)
{
if((x>(px-0.5) && x<(px+0.5)))
if((y<(py+0.5) && y>(py-0.5)))
{
select=true;
draw_Quad();
glColor3f(1.0, 1.0, 1.0);
glLineWidth(2.0);
draw_Quad_Line();
}
else
{
select=false;
glClearColor(0.5, 1.0, 0.5, 0.0);
glClear(GL_COLOR_BUFFER_BIT);
draw_Quad();
}
glFlush();
}

ممنون میشم که راهنماییم کنید.
:لبخندساده:
اگه جایی از سوال مجهول هستش، یا نیازی به ارسال کل کد هست بفرمایید تا زودتر به جواب برسیم.
با تشکر.

amin1softco
یک شنبه 25 فروردین 1392, 17:52 عصر
اول از همه این را در نظر بگیرید شما در یک حلقه هستید که هر ثانیه 30 بار تکرار می شه بعدش کد بزنید . اول شما باید بوسیله glut مختصات ماوس را بدست بیارید و یک شرط چک کنید اگر مختصات ماوس در محدوده شکل بود select را 1 یا true کندو در غیر اینصورت 0 یا false برای اینکه مختصات بهتر تنظیم بشه شما باید پرجکشن را روی 500 * 500 یا هر مقدار دلخواه دیگر تنظیم کنید . اصولاً برای ترسیم بهتر از یک لیست پیوندی یا درخت یا هر چیزی که راحت تر هستید استفاده کنید .
یک کد برای اینکه ازش الهام بگیرید گذاشتم که وقتی مأوس میره روش رنگش سبز می شه ..

#include <math.h>
#include <GL/glut.h>
bool flag=0;
void special( int key, int x, int y)
{
switch(key){
case GLUT_KEY_UP:
//your code
break;
case GLUT_KEY_DOWN:
//your code
break;
}
}

void init(void){
glClearColor(1.0,1.0,1.0,0.0);
glMatrixMode(GL_PROJECTION); //projection parameters
gluOrtho2D(0.0,300.0,0.0,300.0); //sets up WC extent
}

void Display()
{
glClear(GL_COLOR_BUFFER_BIT);


if (flag) glColor3f(0.0, 0.0, 1.0);
else glColor3f(0.0, 1.0, 0.0);
glPushMatrix();
glTranslatef(150.0,150.0,0.0);
GLUquadricObj *circle = gluNewQuadric ();
gluQuadricDrawStyle (circle, GLU_FILL);
gluDisk (circle,0,100,5000,1);
gluDeleteQuadric(circle);

glPopMatrix();


glutSwapBuffers();
}
void myMotionFunc( int x, int y ) {
y=300-(y);
if(sqrt(double(pow(float(abs(150-x)),2)+pow(float(abs(150-y)),2)))>100) flag=1;
else flag=0;
}
int main(int argc, char **argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
glutInitWindowPosition(500,500);
glutInitWindowSize(300,300);

glutCreateWindow("Circle key");
init();
glutDisplayFunc(Display);
glutIdleFunc(Display);
glutPassiveMotionFunc (myMotionFunc);
glutSpecialFunc(special);
glutMainLoop();
return 0;
}

kazemiam
دوشنبه 26 فروردین 1392, 10:26 صبح
با تشکر بخاطر کد برنامه،
البته چون تازه وارد هستم راستش از کدای بالا زیاد سر در نیاوردم و حتما از اون کدا هم سوال میپرسم.:لبخندساده:
اگه لطف کنید کد بنده رو یه بررسی کنید، یه فرمولی برای محاسبه مکان شیئ از خودم درست کردم که حتی اگه اندازه ی پنجره رو توی کدها تغییر بدیم بازم عمل کنه. :چشمک:
فقط یه مشکل کوچیکی وجود داره که به راهنمایی دوستان نیاز دارم. :لبخند:
زمانی که میخوایم شیئ رو انتخاب میکنیم هیچ مشکلی وجود نداره، ولی زمانی که برای از انتخاب در آوردن شیئ به کنار شیئ کلیک میکنیم مشکل خودش رو نشون میده. :متفکر:
اگر بالا یا پایین شیئ کلیک کنیم از انتخاب درمیاد، ولی اگر به چب یا راستش کلیک کنیم، انگار که اصلا فرمان کلیکی وجود نداره یا اینکه انگار روی خود شیئ کلیک میکنیم!!!!!!!!!!!!!!!!!!!!!!!! :عصبانی:
من یکم داغ کردم اگه زودتر کمک کنید ممنون میشم.
اینم کد برنامه:

// Select_Move_shape.cpp : Defines the entry point for the console application.

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

GLsizei wh = 500, ww = 500;

GLfloat px = 0.0;
GLfloat py = 0.0;
GLfloat Munit = 0.05;

GLfloat wx = ww/2;
GLfloat wy = wh/2;
GLfloat wxMunit = wx * Munit;
GLfloat wyMunit = wy * Munit;

bool select=false;
GLfloat size = 0.5;
GLfloat PXsize = wx* size;
GLfloat PYsize = wy* size;


void draw_Quad()
{
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_QUADS);
glVertex2f(px-size, py+size);
glVertex2f(px+size, py+size);
glVertex2f(px+size, py-size);
glVertex2f(px-size, py-size);
glEnd();
glFlush();
}

void Positions(int x,int y)
{
//x = ww - x;
y = wh - y;

if((x>(wx-PXsize) && x<(wx+PXsize))) //(float)
if((y<(wy+PYsize) && y>(wy-PYsize)))
{
select=true;

glClearColor(0.5, 0.5, 1.0, 0.0);
glClear(GL_COLOR_BUFFER_BIT);
draw_Quad();
}
else
{
select=false;
glClearColor(0.5, 1.0, 0.5, 0.0);
glClear(GL_COLOR_BUFFER_BIT);
draw_Quad();
}
glFlush();
}

void my_key_events (unsigned char key, int x, int y )
{
int k=key;
printf("Key Value Is: %d\n",k);
switch ( key ) {
case 'a': case 'A': //case GLUT_KEY_LEFT:
if(select==true)
{
px-=Munit; //Left
wx-=wxMunit;
draw_Quad();
}
break;
case 'd': case 'D': //case GLUT_KEY_RIGHT:
if(select==true)
{
px+=Munit; //0.05--2.5//Right
wx+=wxMunit;
draw_Quad();
}
break;
case 'w': case 'W': //case GLUT_KEY_UP:
if(select==true)
{
py+=Munit; //Up
wy+=wxMunit;
draw_Quad();
}
break;
case 's': case 'S': //case GLUT_KEY_DOWN:
if(select==true)
{
py-=Munit; //Down
wy-=wxMunit;
draw_Quad();
}
break;

case 'r' : case 'R' :
glColor3f(1.0, 0.0, 0.0); //Red
draw_Quad();
break;
case 'g' : case 'G' :
glColor3f(0.5, 1.0, 0.5); //Green
draw_Quad();
break;
case 'b' : case 'B' :
glColor3f(0.0, 0.0, 1.0); //Blue
draw_Quad();
break;
case 'q' : case 'Q' :
exit ( EXIT_SUCCESS);
break;
}
}

void mouse_action(int btn, int state, int x, int y)
{
if(btn==GLUT_RIGHT_BUTTON)
{
glClearColor(1.0, 1.0, 1.0, 0.0);
glClear(GL_COLOR_BUFFER_BIT);
draw_Quad();
}
if(btn==GLUT_LEFT_BUTTON && state==GLUT_DOWN)
{
Positions(x,y);
printf("Xs: %d\nYs: %d\n\n",x,y);
if((x>0 && y>0) && (x<=10 && y<=10))
printf("OKsss\n");
}
}

void mydisplay(void)
{
glClearColor(0.8, 1.0, 0.8, 0.0);
glClear(GL_COLOR_BUFFER_BIT);

glColor3f(0.0, 0.0, 0.0); //Black

draw_Quad();
glFlush();
}

int main(int argc, char** argv)
//int _tmain(int argc, _TCHAR* argv[])
{
glutInit(&argc,argv);
glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize(500,500);
glutInitWindowPosition(500,150);
glutCreateWindow("Move_Game => Author: Kazemian");

//init(); //!!!!!

glutDisplayFunc(mydisplay);
glutMouseFunc (mouse_action);

glutKeyboardFunc( my_key_events );
//glViewport(0,0,2,2);

glutMainLoop();
return 0;
}

amin1softco
دوشنبه 26 فروردین 1392, 16:01 عصر
یکمی اصلاحات برات انجام دادم ولی انگار کلاً ما در و دیوار حرف می زنیم !!!

// glut.cpp : Defines the entry point for the console application.
//

// Select_Move_shape.cpp : Defines the entry point for the console application.

#include "stdafx.h"
#include <stdlib.h>
#include <GL/glut.h>

GLsizei wh = 500, ww = 500,color=1;

GLfloat px = 0.0;
GLfloat py = 0.0;
GLfloat Munit = 1;

GLfloat wx = ww/2;
GLfloat wy = wh/2;
GLfloat wxMunit = wx * Munit;
GLfloat wyMunit = wy * Munit;

bool select=false;
GLfloat size = 200;
GLfloat PXsize = wx* size;
GLfloat PYsize = wy* size;


void draw_Quad()
{
glBegin(GL_QUADS);
glVertex2f(px, py);
glVertex2f(px, py+size);
glVertex2f(px+size, py+size);
glVertex2f(px+size, py);
glEnd();

}
void draw_OQuad()
{
glColor3f(1.0, 0.0, 0.0);
glBegin(GL_LINE_LOOP);
glVertex2f(px, py);
glVertex2f(px, py+size);
glVertex2f(px+size, py+size);
glVertex2f(px+size, py);
glEnd();
}

void Positions(int x,int y)
{
//x = ww - x;
y = wh - y;

if((x>(wx-PXsize) && x<(wx+PXsize))) //(float)
if((y<(wy+PYsize) && y>(wy-PYsize)))
{
select=true;

glClearColor(0.5, 0.5, 1.0, 0.0);
glClear(GL_COLOR_BUFFER_BIT);
draw_Quad();
}
else
{
select=false;
glClearColor(0.5, 1.0, 0.5, 0.0);
glClear(GL_COLOR_BUFFER_BIT);
draw_Quad();
}
glFlush();
}

void my_key_events (unsigned char key, int x, int y )
{
int k=key;
printf("Key Value Is: %d\n",k);
switch ( key ) {
case 'a': case 'A': //case GLUT_KEY_LEFT:
if(select==true)
{
px-=Munit; //Left
wx-=wxMunit;

}
break;
case 'd': case 'D': //case GLUT_KEY_RIGHT:
if(select==true)
{
px+=Munit; //0.05--2.5//Right
wx+=wxMunit;

}
break;
case 'w': case 'W': //case GLUT_KEY_UP:
if(select==true)
{
py+=Munit; //Up
wy+=wxMunit;

}
break;
case 's': case 'S': //case GLUT_KEY_DOWN:
if(select==true)
{
py-=Munit; //Down
wy-=wxMunit;

}
break;


case 'q' : case 'Q' :
exit ( EXIT_SUCCESS);
break;
}
}

void mouse_action(int btn, int state, int x, int y)
{
y=wh-y;
if(btn==GLUT_RIGHT_BUTTON)
{
draw_Quad();
}
if(btn==GLUT_LEFT_BUTTON && state==GLUT_DOWN)
{
//Positions(x,y);
printf("Xs: %d\nYs: %d\n\n",x,y);

if (x>=(px-size) && x<=(px+size) && y<= (py+size) &&y>= (py-size))
select=true;
else
select=false;
printf("select: %d\n",select);

}
}

void mydisplay(void)
{
glClearColor(0.8, 1.0, 0.8, 0.0);
glClear(GL_COLOR_BUFFER_BIT);

glColor3f(0.0, 1.0, 0.0); //Black

draw_Quad();
if (select) draw_OQuad();



glutSwapBuffers();
glFlush();
}

int main(int argc, char** argv)
{
glutInit(&argc,argv);
glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB);
glutInitWindowSize( wh,ww);
glutInitWindowPosition(500,150);
glutCreateWindow("Move_Game => Author: Kazemian");

glClearColor(0.8, 1.0, 0.8, 0.0);
glMatrixMode(GL_PROJECTION); //projection parameters
gluOrtho2D(0.0,wh,0.0,ww); //sets up WC extent

glutDisplayFunc(mydisplay);
glutIdleFunc(mydisplay);
glutMouseFunc (mouse_action);

glutKeyboardFunc( my_key_events );
glutIdleFunc(mydisplay);
glutMainLoop();
return 0;
}

kazemiam
دوشنبه 26 فروردین 1392, 19:35 عصر
بخاطر جوابگوییتون از شما ممنونم. :چشمک:
اما اگه دقت کنید همون مشکلی که توی کد من هستش، داخل کد شما هم وجود داره(داخل این کد سمت چپ و پایین اون برای از انتخاب در آوردن شیئ بی تاثیرند)!!!
با این تفاوت که شما از توابع حرفه ای تری استفاده کردید که هنوز سوادم نمیرسه.:خجالت:

یکمی اصلاحات برات انجام دادم ولی انگار کلاً ما در و دیوار حرف می زنیم !!!

glMatrixMode(GL_PROJECTION); //projection parameters
gluOrtho2D(0.0,wh,0.0,ww); //sets up WC extent

glutDisplayFunc(mydisplay);
glutIdleFunc(mydisplay);
glutMouseFunc (mouse_action);

glutIdleFunc(mydisplay);

یعنی درو دیوار برنامه؟
یه چند تا سوال:
به اشتباه از دو تابع Idle استفاده شده؟ یا دلیل خاصی داره؟
تابع Ortho دقیقا چیه و چطوری کار میکنه؟

و اینکه من برای نمایش حالت انتخاب، از خط دور شکل استفاده کردم ولی درست نشون نمیداد!! :ناراحت:
میشه توضیح بدید که از چه ترفندی استفاده کردید؟

amin1softco
دوشنبه 26 فروردین 1392, 20:53 عصر
مشکل از شرط سلکت است دیگه اینجوری درست می شه
if (x>=(px) && x<=(px+size) && y<= (py+size) &&y>= (py))
select=true;
else
select=false;

کد بالا را جایگزین کنید درست می شه در و دیوارش !!
کد من مثل شماست ؟! یا حضرت ....
نه نیاز نیست همون یکی کافیه اشتباه کده :دی
تابع Ortho یک سرچ بزنید پویا چند بار توضیح داده به خوبی و خیلی کامل خلاصش اینه که ماتریس پیش فرض 1 است ما می آییم با اندازه پنجره تنظیمش می کنیم برای راحت کار کردن با مختصات ماوس
از ترفند خاصی استفاده نشده اگر دقت کنید یک تابع دیگه تعریف شده که به جای مستطیل خط می کشه همین !

kazemiam
دوشنبه 26 فروردین 1392, 23:33 عصر
درسته مشکل برطرف شد. :تشویق:
فقط الان دارم سعی میکنم با این حلقه ی تکراری که شما گفتید کنار بیام تا برنامه رو به سبک دیگه ای تغییر بدم(یه جور تمرین).!!!


اما اگه دقت کنید همون مشکلی که توی کد من هستش، داخل کد شما هم وجود داره!!!

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

بنده هم همچین تابعی نوشته بودم، فقط دیدم درست کار نمیکنه پاکش کردم!!
البته اون تابع رو داخل تابع Position استفاده کرده بودم که شما زحمت کشیدید کلا بیخیال تابع Position شدی.:متفکر:



کد من مثل شماست ؟! یا حضرت ....
مشکلمون شبیه به همه، وگرنه کد شما کجا و کد ما... :لبخند:
ما که جسارت نمیکنیم، پوزش مرا پذیرا باشید.:خجالت:
ممنون.

mgshervin
دوشنبه 23 اردیبهشت 1392, 14:35 عصر
سلام دوستان
من با ویژوال استادیو 2012 هر برنامه ای که برای OpenGL مینویسم ارر میده و نمیتونه فایل exe را ایجاد کنه باید چیکار کنم ؟

mgshervin
دوشنبه 23 اردیبهشت 1392, 14:37 عصر
من این کد صفحه 321 کتاب قلی زاده را نوشتم ولی با این که مثل کتابه باز ارر میده کدش را اینجا میزارم از دوستان میخوام که کمک کنن ببینن مشکل چیه
پیشاپیش سپاس گذارم
این کد الگوریتم برش چند ضلعی ساترلند-هاگمن هستش



# include<stdlib.h>
# include <GL/glut.h>
# include <math.h>
# include <iostream.h>
class wcPt2D {
public:
GLfloat x, y;
};
typedef enum {Letf, Right, Bottom, Top } Boundary;
const GLint nClip = 4;
GLint inside (wcPt2D p, Boundary b, wcPt2D wMin, wcPt2D wMax)
{
switch (b) {
case Left: if (p.x < wMin.x) return (false); break;
case Right: if (p.x > wMax.x)return (false); break;
case Bottom: if (p.y < wMIn.y)return (false); break;
case Top: if (p.y > wMax.y) return (false); break;
}
return (true);
}
GLint cross (wcPt2D p1, wcPt2D p2, Boundary winEdge, wcPt2D wMin, wcPt2D wMax)
{
if (inside (p1, winEdge, wMin, wMax) == inside (p2, winEdge, wMin, wMax))
return (false);
else return (true);
}
wcPt2D intersect (wcPt2D p1, wcPt2D p2, Boundary winEdge, wcPt2D wMin, wcPt2D wMax)
{
wcPt2D iPt;
GLfoat m;

if (p1.x!= p2.x) m= (p1.y - p2.y) / (p1.x - p2.x);
switch (winEdge) {
case Left:
iPt.x = wMin.x;
iPt.y = p2.y + (wMin.x - p2.x) * m;
break;
case Right:
iPt.x = wMax.x;
iPt.y = p2.y + (wMax.x - p2.x) * m;
break;
case Bottom:
iPt.y = wMin.y;
if (p1.x!= p2.x) iPt.x = iPt.x = p2.x + (wMin.y - p2.y) / m;
else iPt.x = p2.x;
break;
case Top:
iPt.y = wMax.y;
if (p1.x != p2.x) iPt.x = p2.x + (wMax.y - p2.y) / m;
else iPt.x = p2.x;
break;
}
return (iPt);
}
void clipPoint (wcPt2D p, wcPt2D p2, Boundary winEdge, wcPt2D wMin, wcPt2D wMax
wcPt2D * pOut, int * cnt, wcPt2D first[], wcPt2D * s)
{
wcPt2D iPt;

if (!first[winEdge])
first[winEdge] = &p;
else
if (cross (p, s[winEdge], winEdge, wMin, wMax)){
iPt = intersect (p, s[winEdge], winEdge, wMin, wMax);
if (winEdge < Top)
clipPoint (iPt, b+1, wMin, wMax, pOut, cnt, first, s);
else {
pOut[*cnt] = iPt; (*cnt)++;
}
}
s[winEdge] = p;
if (inside (p, winEdge, wMin, wMax))
if (winEdge < Top)
clipPoint (P, winEdge + 1, wMin, wMax, pOut, cnt, first, s);
else {
pOut[*cnt] = p; (*cnt)++;
}
}
void closeClip (wcPt2D wMin, wcPt2D wMax, wcPt2D * pOut, GLint * cnt, wcPt2D * first[ ], wcPt2D * s)
{
wcPt2D pt;
Boundary winEdge;

for (winEdge = Left ; winEdge <= Top ; winEdge++) {
if (cross (s[winEdge], *first[winEdge], winEdge, wMin, wMax)) {
pt = intersect (s[winEdge], *first[winEdge], winEdge, wMin, wMax);
if (winEdge < Top)
clipPoint (pt, winEdge + 1, wMin, wMax, pOut, cnt, first, s);
else {
pOut[*cnt] = pt; (*cnt)++;
}
}
}
}
GLint polygonClipSuthHodg (wcPt2D wMin, wcPt2D wMax, GLint n, wcPt2D * pIn, wcPt2D * pOut)
{
wcPt2D * first[nClip] = {0, 0, 0, 0 }, s[nClip]:
GLint k, cnt = 0;
for (k = 0; k < n; k++)
clipPoint (pIn[k], Left, wMin, wMax, pOut, &cnt, first, s);
closeClip (wMin, wMax, pOut, &cnt, first, s);
return (cnt);
}

orache
دوشنبه 23 اردیبهشت 1392, 16:16 عصر
نمیدونم چه اروری میده ولی در خط 9 این کد شما نوشتین Letf شما اول نوشتین Letf ولی بعد از Left استفاده کردین :لبخندساده:

mehran788
شنبه 28 اردیبهشت 1392, 13:18 عصر
Error 1 error LNK2019: unresolved external symbol _WinMain@16 referenced in function ___tmainCRTStartup MSVCRTD.lib atefe2


Error 2 fatal error LNK1120: 1 unresolved externals C:\Users\ensi\Documents\Visual Studio 2008\Projects\atefe2\Debug\atefe2.exe atefe2


این 2تا خطا چی میگه ؟ من دیگه واقعا گیچ شدم . کسی نمیاد به این مساله رسیدگی کنه :(

دوستان این خطاها رو به من میده.
نمی دونم مشکل از چیه.خواهش می کنم کمکم کنید :افسرده:

gta0007
جمعه 10 خرداد 1392, 08:47 صبح
با سلام خسته نباشين

بصورت رايگان بازديد کننده وبسايت شمارو افزايش ميديم
سايت اسکاي رنک (سامانه افزايش سريع بازديد و بهبود رتبه السکا) تنها سايت اسکاي رنک چنين فرصتي به شما داده تا رتبه وبسايت خود رو در السکا بالا ببريد پس از همين حالا در سايت عضو بشين و آدرس وبسايت خود رو تو پنل کاربريتون اضافه کنيد و به بازديد اتومات و خريد بازديد بپردازيد موفق باشيد
http://skyrank.ir/
09397951796

http://skyrank.ir/banners/bener.gif (http://www.skyrank.ir/)

kazemiam
دوشنبه 13 خرداد 1392, 15:08 عصر
با سلام و خسته نباشید،

یه چندتایی سوال دارم!!

چطوری میتونم شدت تابش یه منبع نور رو کم و زیاد کنم؟
خودم فکر میکنم باید پارامتر چهارم A0 رو تغییر بدم، اما شاید چون هنوز کامل با OpenGL آشنا نشدم، نتونستم!!! :ناراحت:
GLfloat A0[4]={1,0,0,1};
glLightfv(GL_LIGHT0,GL_DIFFUSE,A0);

یه سوال دیگه اینکه چطور میتونم دوربین رو حرکت بدم و با رسیدن به یک شیئ با کلید های جهتی دور اون شیئ بچرخم؟
وقتی فقط مختصات چشم(دوربین) رو تغییر میدم به شکل خیلی بدی جابجا میشه!!
وقتی مختصات دوربین و مختصات نقطه فوکوس شده رو با هم تغییر میدم به صورت موازی جابجا میشه.
و زمانی که مختصات نقطه فوکوس شده رو تغییر میدم مثل اینه که دوربین روی پایه قرار گرفته و به اطراف میچرخه.البته نمیدونم چرا بیش از 180 درجه نمیچرخه؟!
(البته روش بهتری برای این کار نیاز دارم که با چرخش دوربین، سمت حرکت برای کاربر مثل قبل باشه و تغییری نکنه یعنی با کلید جلو فقط جلو بره و چپ و راست نره!!)
لطفا پارامتر های خود تابع Perspectiv رو هم یه مخصر توضیح بدید. :خجالت:

سوال بعدی هم اینه، چطور میتونم فقط یک شیئ سه بعدی رو به شکل شفاف(شیشه ای) تبدیل کنم؟

با تشکر از زحمات شما. :چشمک:

mehran788
سه شنبه 21 خرداد 1392, 09:34 صبح
سلام دوستان
کسی می تونه کمکم کنه که تو صفحه یک مخروط و حلقه و قوری داشته باشم؟
ممنون میشم اگه کسی کمکم کنه
چند وقته دنبالشم ولی چیزی پیدا نکردم کارم بدجور گیره

davod_
سه شنبه 21 خرداد 1392, 11:20 صبح
درود به دوستان

این سه خط چیکار میکنه؟ممنون میشم راهنماییم کنین
glutAttachMenu(GLUT_RIGHT_BUTTON);
glutAttachMenu(GLUT_MIDDLE_BUTTON);
glutMouseFunc(mouse);

سپاس

mehran788
سه شنبه 21 خرداد 1392, 15:28 عصر
سلام دوستان
کسی می تونه کمکم کنه که تو صفحه یک مخروط و حلقه و قوری داشته باشم؟
ممنون میشم اگه کسی کمکم کنه
چند وقته دنبالشم ولی چیزی پیدا نکردم کارم بدجور گیره

دوستان بالاخره این رو پیدا کردم
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glColor3f(1.0,0.0,0.0);
glPushMatrix();
glTranslatef(-0.6,0,0);
glRotatef(t,t,t,0);
glutSolidTeapot(0.2);
glPopMatrix();

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

orache
سه شنبه 21 خرداد 1392, 17:26 عصر
سلام داداش ببین تو که میگی هنوز اول کاری ! اخه نه اصلا از دوربین استفاده کردی نه از هیچی الان دقیقا هم منظورتو نفهمیدم چیه میخای 3 تا قوری بسازی که رو هم نیافتن ؟؟ یعنی با فاصله از هم ساخته بشن ؟؟ اینکه کاری نداره فکر کنم تو همون کتاب انگیسیه گفته بود
بیا ببین منظورت همینه یا خیر

#include <freeglut.h>
void display () {
glClear(GL_COLOR_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
glPushMatrix();
glTranslatef(0,0,-3);
glutWireTeapot(1);
glTranslatef(0,2,0);
glutSolidTeapot(1);
glPopMatrix();
glTranslatef(0,-2,-1);
glutSolidTeapot(1);
glPopMatrix();
glFlush();
}

void reshape ( int width, int height )
{
glViewport(0,0,width,height);
}

int main ( int argc, char * argv[] )
{
glutInit(&argc,argv);
glutInitWindowSize(500,500);
glutInitWindowPosition(0,0);
glutInitDisplayMode(GLUT_RGB);
glutCreateWindow("mehran!");
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(60,1,1,10);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(0.0,0.0,5.0,0.0,0.0,0.0,0.0,1.0,0.0);
glutMainLoop();
}

mehran788
سه شنبه 21 خرداد 1392, 22:38 عصر
سلام داداش ببین تو که میگی هنوز اول کاری ! اخه نه اصلا از دوربین استفاده کردی نه از هیچی الان دقیقا هم منظورتو نفهمیدم چیه میخای 3 تا قوری بسازی که رو هم نیافتن ؟؟ یعنی با فاصله از هم ساخته بشن ؟؟ اینکه کاری نداره فکر کنم تو همون کتاب انگیسیه گفته بود
بیا ببین منظورت همینه یا خیر

#include <freeglut.h>
void display () {
glClear(GL_COLOR_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
glPushMatrix();
glTranslatef(0,0,-3);
glutWireTeapot(1);
glTranslatef(0,2,0);
glutSolidTeapot(1);
glPopMatrix();
glTranslatef(0,-2,-1);
glutSolidTeapot(1);
glPopMatrix();
glFlush();
}

void reshape ( int width, int height )
{
glViewport(0,0,width,height);
}

int main ( int argc, char * argv[] )
{
glutInit(&argc,argv);
glutInitWindowSize(500,500);
glutInitWindowPosition(0,0);
glutInitDisplayMode(GLUT_RGB);
glutCreateWindow("mehran!");
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(60,1,1,10);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(0.0,0.0,5.0,0.0,0.0,0.0,0.0,1.0,0.0);
glutMainLoop();
}

دمت گرم داداش
چیزی که می خواستم رو از روش پیدا کردم
خیلی آقایی

kazemiam
چهارشنبه 22 خرداد 1392, 00:06 صبح
درود به دوستان

این سه خط چیکار میکنه؟ممنون میشم راهنماییم کنین
glutAttachMenu(GLUT_RIGHT_BUTTON);
glutAttachMenu(GLUT_MIDDLE_BUTTON);
glutMouseFunc(mouse);

سپاس

سلام دوست عزیز،
خط اول برای ارتباط کلید راست به منویی که از قبل نوشته شده هست و همچنین خط دوم نیز برای ارتباط منو با کلید وسط موس هستش.
خط آخر هم تابع کالبکی هستش که باید به برنامه بفهمونیم از کدوم تابع برای عکس العمل نشون دادن به رویدادهای موس استفاده کنه، که در تابع main نوشته میشه و اسمی که در ورودی اون نوشته شده(mouse) همون تابع مورد نظر هستش.

mehran788
چهارشنبه 22 خرداد 1392, 13:38 عصر
سلام
من می خواستم یه برنامه به شیوه rastering بنویسم و نحوه نوشتن به این شیوه رو هم مطالعه کردم ولی آدرس دهی خونه ها رو خوب متوجه نشدم.میشه کمی به من توضیح بدین جریان چیه؟
ممنون از لطفتون

amin1softco
دوشنبه 27 خرداد 1392, 22:14 عصر
یکی از دوستان در مورد بافت ها سئوال پرسیده بود و در خواست یک مثال ساده از لود کردن یک فایل bmp توسط سی++ و قرار دادن بعنوان بافت را داشته بود من این کد را زدم که ضمیمه این پست است <br>
برای اینکار ما ابتدا باید فایل را باز کنیم و هدر های فایل را بخونیم و اندازه طول و عرض فایل بیتمپ را بدست بیاریم و بعد از اون بوسیله توابع یک تکسچر ایجاد و مقید کنیم برای توضیحات مفصل تر از لینک های زیر استفاده کنید :
http://nehe.gamedev.net/tutorial/texture_mapping/12038/
http://www.opengl-tutorial.org/beginners-tutorials/tutorial-5-a-textured-cube/





#include <iostream>
#include <GL/gl.h> //سر فایل که هسته اپن جی ال را به برنامه اضافه می کند

#include <GL/glut.h>//سر فایل برای اضافه کردن توابع مورد نیاز ایجاد پنجره

GLfloat angle = 0.0;// برای چرخش مکعب ااین متغیر استفاده می کنیم ز

GLuint textureID; // ایجاد یک متغیر برای ایجاد شناسه برای بافت
GLuint loadBMP_custom(const char * imagepath){// تابع ساده برای لود کردن تصاویر بیتمپ از نوع 24 بیتی

// خواندن اطلاعات هدر فایل بیتمپ
unsigned char header[54]; // هر فایل بیتمپ با 54 بایت هدر شروع می شود که در این متغیر ذخیره می شود
unsigned int dataPos; // نگهداری موقعیت ما در فایل که تا کجا خوانده شده
unsigned int width, height;// متغیر برای ذخیره کردن طول و عرض بیتمپ
unsigned int imageSize; // = width*height*3 اندازه کلی تصویر برابر است با طول در عرض در 3 که شامل 3 مقدار رنگی است
// داده های واقعی بیتمپ در این متغیر ذخیره می شوند
unsigned char * data;

// باز کردن فایل
FILE * file = fopen(imagepath,"rb");//آدرس از ورودی تابع اصلی گرفته می شود
if (!file) {printf("Image could not be opened\n"); return 0;}

if ( fread(header, 1, 54, file)!=54 ){ // اگر 54 بایت هدر نداریم پس یک مشکل وجود دارد
printf("Not a correct BMP file\n");
return 0;
}
//هر فایل بیتمپ با این دو حرف شروع می شود
if ( header[0]!='B' || header[1]!='M' ){
printf("Not a correct BMP file\n");
return 0;
}

// گرفتن اطلاعات از هدری که قبلاً خوانده شده
dataPos = *(int*)&(header[0x0A]);
imageSize = *(int*)&(header[0x22]);
width = *(int*)&(header[0x12]);
height = *(int*)&(header[0x16]);

// بعضی فایل های بیتمپ درست قالب بندی نشده اسند
if (imageSize==0) imageSize=width*height*3;
if (dataPos==0) dataPos=54; // گذر از هدر فایل بیتمپ

// ساخت یک بافر
data = new unsigned char [imageSize];

// خواندن داده های واقعی از فایل به داخل بافر
fread(data,1,imageSize,file);

//همه چیز در حافظه است الان می تونیم فایل را ببندیم
fclose(file);

//بیتمپ ها با فرمت بی جی آر ذخیره می شوند
//است که باید به آرایش ار جی بی تبدیل شود.
//BGR 2 RGB
for (int i = 0; i < imageSize; i+=3)
{
char c = data[i];
data[i] = data[i+2];
data[i+2] = c;
}


glGenTextures(1, &textureID); // ساخت یک بافت اپن جی ال

glBindTexture(GL_TEXTURE_2D, textureID);// مقید سازی بافت ساخته شده جدید تمام توابع بعدی این بافت را تغییر می دهند

// دادن تصویر به اپن جی ال
glTexImage2D(GL_TEXTURE_2D, 0,GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, data);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTE R,GL_LINEAR); // فیلتر سازی خطی
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTE R,GL_LINEAR);
}
void init (void) {

loadBMP_custom("NeHe.bmp"); // لود کردن تصویر از آدرس داده شده
glEnable(GL_TEXTURE_2D); // فعال کردن نگاشت بافت دو بعدی
glShadeModel(GL_SMOOTH); // فعال کردن نرم کننده
glClearColor(0.0f, 0.0f, 0.0f, 0.5f); // مشخص کردن رنگ بک گراند
glClearDepth(1.0f); // فعال کردن بافر عمق
glEnable(GL_DEPTH_TEST); // فعال کردن تست عمق
glDepthFunc(GL_LEQUAL); // مشخص کردن نوع تست عمق
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); // ساخت پرسپکتیو
glBlendFunc(GL_SRC_ALPHA,GL_ONE); // فعال کردن بلندینگ و مشخص کردن نوع ان
glEnable(GL_BLEND);
}
void display (void) {

glClearColor (0.0,0.0,0.0,1.0);
glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);// پاک کردن بافر
glLoadIdentity(); // لود ماتریس همانی یا 1
gluLookAt (0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);//مشخص کردن موقعیت دوربین
glRotatef(angle, 1.0, 0.0, 0.0);//چرخش با زاویه آنگل
glRotatef(angle, 0.0, 1.0, 0.0);//چرخش با زاویه آنگل
glRotatef(angle, 0.0, 0.0, 1.0);//چرخش با زاویه آنگل

glBegin(GL_QUADS);
/*برای نگاشت صحیح یک بافت روی مکعب , شما باید مطمئن شوید که بالا سمت راست بافت به بالا سمت راست مکعب نگاشت میشود و به همین ترتیب گوشه های دیگر اگر گوشه ها با یکدیگر مچ نشوند ممکن است تصویری نمایش داده نشود یا تصویر بر عکس شود ویا...
اولین glTexCoord2f روی محور ایکس سمت چپ است 0.5f وسط بافت و 1.0f سمت راست بافت است .
بنابراین حالا ما می دانیم که گوشه بالا سمت چپ با 0.0f در محور x و 1.0f برای محور y در بافت و بالا سمت چپ مکعب دارای مختصات -1.0f برای x و 1.0f برای محور y است و به همین ترتیب تا آخر*/
glTexCoord2f(0.0f, 0.0f); //مشخص کردن مختصات بافت
glVertex3f(-1.0f, -1.0f, 1.0f);//مشخص کردن رأس اول مکعب
glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, -1.0f, 1.0f);
glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f, 1.0f, 1.0f);
glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, 1.0f);
// Back Face
glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f, -1.0f);
glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f, 1.0f, -1.0f);
glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f, 1.0f, -1.0f);
glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f, -1.0f);
// Top Face
glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, -1.0f);
glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, 1.0f, 1.0f);
glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, 1.0f, 1.0f);
glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f, 1.0f, -1.0f);
// Bottom Face
glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f, -1.0f, -1.0f);
glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f, -1.0f, -1.0f);
glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f, 1.0f);
glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 1.0f);
// Right face
glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, -1.0f, -1.0f);
glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f, 1.0f, -1.0f);
glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f, 1.0f, 1.0f);
glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f, 1.0f);
// Left Face
glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, -1.0f, -1.0f);
glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 1.0f);
glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f, 1.0f, 1.0f);
glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, -1.0f);
glEnd();



glutSwapBuffers();
angle ++;

}

void reshape (int w, int h) {

glViewport (0, 0, (GLsizei)w, (GLsizei)h);

glMatrixMode (GL_PROJECTION);

glLoadIdentity ();

gluPerspective (60, (GLfloat)w / (GLfloat)h, 1.0, 100.0);

glMatrixMode (GL_MODELVIEW);

}

int main (int argc, char **argv) {

glutInit (&argc, argv);

glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH);

glutInitWindowSize (500, 500);

glutInitWindowPosition (100, 100);

glutCreateWindow ("A basic OpenGL Window");

init ();

glutDisplayFunc (display);

glutIdleFunc (display);

glutReshapeFunc (reshape);

glutMainLoop ();

return 0;

}

orache
سه شنبه 28 خرداد 1392, 09:58 صبح
اقا یک سوال داشتم من چجوری میتونم حرکت موس رو پیدا کنم ؟؟ و چجوری میتونم بگم وقتی موس روی فلان ابجکت رفت فلان اتفاق بی افته
در کل میخام این کار رو انجام بدم -> یک مربع 2 بعدی ترسیم کنم و وقتی موس روی اون مربع قرار گرفت و کلید چپ زده شد و موس به هرطرف رفت اون مربع هم به همون طرف بده
کسی میتونه کمکم کنه ؟؟
ممنون

amin1softco
سه شنبه 28 خرداد 1392, 16:38 عصر
من والا چندتا مثال برای کار با مأوس گذاشتم قبلاً
حالا نمی دونم این درسته یا نه ولی من خودم اگر بودم اول یک لیست پیوندی درست می کردم و اسمش را می گذاشتم لیست نمایش و بعد برای هر فرم می اومدم و یک بار این لیست را پیمایش می کردم و در هر گره مختصات آبجکت یا شکل را ذخیره می کردم مثلاً دو تا متغیر x,y + اینکه یک شرط که در اون فرم مختصات مأوس کجاست و یک فلگ مثلاً تعریف می کردم که با شرط بیاد و چک کنه اگر مختصات مأوس با مختصات این آبجکت بر خورد داره اون فلاگ مقدارش عوض بشه و اینجوری کل صحنه دستم بود
برای همین مثالم این کفایت می کنه ولی چون یک مربع بیشتر نیست می تونید یک کلاس تعریف کنید مختصات این مربع در اون ذخیره بشه.....

orache
سه شنبه 28 خرداد 1392, 17:16 عصر
نه داداش ببین من باید یه جوری این کد رو بنویسم که بتونم تو کتابخونه ی خودم بذارمش و به عنوان مثال یککاربر بتونه با 1 خط کد همه چی رو تعریف کنه من دارم از دستورات جی ال یو تی استفاده میکنم (فعلا ) :لبخند:

mehran788
چهارشنبه 29 خرداد 1392, 20:22 عصر
یکی از دوستان در مورد بافت ها سئوال پرسیده بود و در خواست یک مثال ساده از لود کردن یک فایل bmp توسط سی++ و قرار دادن بعنوان بافت را داشته بود من این کد را زدم که ضمیمه این پست است <br>
برای اینکار ما ابتدا باید فایل را باز کنیم و هدر های فایل را بخونیم و اندازه طول و عرض فایل بیتمپ را بدست بیاریم و بعد از اون بوسیله توابع یک تکسچر ایجاد و مقید کنیم برای توضیحات مفصل تر از لینک های زیر استفاده کنید :
http://nehe.gamedev.net/tutorial/texture_mapping/12038/
http://www.opengl-tutorial.org/beginners-tutorials/tutorial-5-a-textured-cube/





#include <iostream>
#include <GL/gl.h> //سر فایل که هسته اپن جی ال را به برنامه اضافه می کند

#include <GL/glut.h>//سر فایل برای اضافه کردن توابع مورد نیاز ایجاد پنجره

GLfloat angle = 0.0;// برای چرخش مکعب ااین متغیر استفاده می کنیم ز

GLuint textureID; // ایجاد یک متغیر برای ایجاد شناسه برای بافت
GLuint loadBMP_custom(const char * imagepath){// تابع ساده برای لود کردن تصاویر بیتمپ از نوع 24 بیتی

// خواندن اطلاعات هدر فایل بیتمپ
unsigned char header[54]; // هر فایل بیتمپ با 54 بایت هدر شروع می شود که در این متغیر ذخیره می شود
unsigned int dataPos; // نگهداری موقعیت ما در فایل که تا کجا خوانده شده
unsigned int width, height;// متغیر برای ذخیره کردن طول و عرض بیتمپ
unsigned int imageSize; // = width*height*3 اندازه کلی تصویر برابر است با طول در عرض در 3 که شامل 3 مقدار رنگی است
// داده های واقعی بیتمپ در این متغیر ذخیره می شوند
unsigned char * data;

// باز کردن فایل
FILE * file = fopen(imagepath,"rb");//آدرس از ورودی تابع اصلی گرفته می شود
if (!file) {printf("Image could not be opened\n"); return 0;}

if ( fread(header, 1, 54, file)!=54 ){ // اگر 54 بایت هدر نداریم پس یک مشکل وجود دارد
printf("Not a correct BMP file\n");
return 0;
}
//هر فایل بیتمپ با این دو حرف شروع می شود
if ( header[0]!='B' || header[1]!='M' ){
printf("Not a correct BMP file\n");
return 0;
}

// گرفتن اطلاعات از هدری که قبلاً خوانده شده
dataPos = *(int*)&(header[0x0A]);
imageSize = *(int*)&(header[0x22]);
width = *(int*)&(header[0x12]);
height = *(int*)&(header[0x16]);

// بعضی فایل های بیتمپ درست قالب بندی نشده اسند
if (imageSize==0) imageSize=width*height*3;
if (dataPos==0) dataPos=54; // گذر از هدر فایل بیتمپ

// ساخت یک بافر
data = new unsigned char [imageSize];

// خواندن داده های واقعی از فایل به داخل بافر
fread(data,1,imageSize,file);

//همه چیز در حافظه است الان می تونیم فایل را ببندیم
fclose(file);

//بیتمپ ها با فرمت بی جی آر ذخیره می شوند
//است که باید به آرایش ار جی بی تبدیل شود.
//BGR 2 RGB
for (int i = 0; i < imageSize; i+=3)
{
char c = data[i];
data[i] = data[i+2];
data[i+2] = c;
}


glGenTextures(1, &textureID); // ساخت یک بافت اپن جی ال

glBindTexture(GL_TEXTURE_2D, textureID);// مقید سازی بافت ساخته شده جدید تمام توابع بعدی این بافت را تغییر می دهند

// دادن تصویر به اپن جی ال
glTexImage2D(GL_TEXTURE_2D, 0,GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, data);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTE R,GL_LINEAR); // فیلتر سازی خطی
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTE R,GL_LINEAR);
}
void init (void) {

loadBMP_custom("NeHe.bmp"); // لود کردن تصویر از آدرس داده شده
glEnable(GL_TEXTURE_2D); // فعال کردن نگاشت بافت دو بعدی
glShadeModel(GL_SMOOTH); // فعال کردن نرم کننده
glClearColor(0.0f, 0.0f, 0.0f, 0.5f); // مشخص کردن رنگ بک گراند
glClearDepth(1.0f); // فعال کردن بافر عمق
glEnable(GL_DEPTH_TEST); // فعال کردن تست عمق
glDepthFunc(GL_LEQUAL); // مشخص کردن نوع تست عمق
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); // ساخت پرسپکتیو
glBlendFunc(GL_SRC_ALPHA,GL_ONE); // فعال کردن بلندینگ و مشخص کردن نوع ان
glEnable(GL_BLEND);
}
void display (void) {

glClearColor (0.0,0.0,0.0,1.0);
glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);// پاک کردن بافر
glLoadIdentity(); // لود ماتریس همانی یا 1
gluLookAt (0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);//مشخص کردن موقعیت دوربین
glRotatef(angle, 1.0, 0.0, 0.0);//چرخش با زاویه آنگل
glRotatef(angle, 0.0, 1.0, 0.0);//چرخش با زاویه آنگل
glRotatef(angle, 0.0, 0.0, 1.0);//چرخش با زاویه آنگل

glBegin(GL_QUADS);
/*برای نگاشت صحیح یک بافت روی مکعب , شما باید مطمئن شوید که بالا سمت راست بافت به بالا سمت راست مکعب نگاشت میشود و به همین ترتیب گوشه های دیگر اگر گوشه ها با یکدیگر مچ نشوند ممکن است تصویری نمایش داده نشود یا تصویر بر عکس شود ویا...
اولین glTexCoord2f روی محور ایکس سمت چپ است 0.5f وسط بافت و 1.0f سمت راست بافت است .
بنابراین حالا ما می دانیم که گوشه بالا سمت چپ با 0.0f در محور x و 1.0f برای محور y در بافت و بالا سمت چپ مکعب دارای مختصات -1.0f برای x و 1.0f برای محور y است و به همین ترتیب تا آخر*/
glTexCoord2f(0.0f, 0.0f); //مشخص کردن مختصات بافت
glVertex3f(-1.0f, -1.0f, 1.0f);//مشخص کردن رأس اول مکعب
glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, -1.0f, 1.0f);
glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f, 1.0f, 1.0f);
glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, 1.0f);
// Back Face
glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f, -1.0f);
glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f, 1.0f, -1.0f);
glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f, 1.0f, -1.0f);
glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f, -1.0f);
// Top Face
glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, -1.0f);
glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, 1.0f, 1.0f);
glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, 1.0f, 1.0f);
glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f, 1.0f, -1.0f);
// Bottom Face
glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f, -1.0f, -1.0f);
glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f, -1.0f, -1.0f);
glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f, 1.0f);
glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 1.0f);
// Right face
glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, -1.0f, -1.0f);
glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f, 1.0f, -1.0f);
glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f, 1.0f, 1.0f);
glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f, 1.0f);
// Left Face
glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, -1.0f, -1.0f);
glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 1.0f);
glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f, 1.0f, 1.0f);
glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, -1.0f);
glEnd();



glutSwapBuffers();
angle ++;

}

void reshape (int w, int h) {

glViewport (0, 0, (GLsizei)w, (GLsizei)h);

glMatrixMode (GL_PROJECTION);

glLoadIdentity ();

gluPerspective (60, (GLfloat)w / (GLfloat)h, 1.0, 100.0);

glMatrixMode (GL_MODELVIEW);

}

int main (int argc, char **argv) {

glutInit (&argc, argv);

glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH);

glutInitWindowSize (500, 500);

glutInitWindowPosition (100, 100);

glutCreateWindow ("A basic OpenGL Window");

init ();

glutDisplayFunc (display);

glutIdleFunc (display);

glutReshapeFunc (reshape);

glutMainLoop ();

return 0;

}




ممنون داداش خیلی لطف کردی.مخصوصا توضیحات فارسی که عالی بود :قلب:
این عکسی رو که لود می کنیم میشه رو قوری هم انداخت.آخه چطور باید گوشه ها رو قوری تنظیم کنیم.میشه اینکارو کرد؟

mehran788
پنج شنبه 30 خرداد 1392, 10:53 صبح
حل شد :لبخند:
#include "stdafx.h"
#include <gl/freeglut.h>
#include <iostream>
#include <gl/glut.h>

static bool p=true;
GLfloat rot = 0.0;

GLuint textureID;
GLuint loadBMP_custom(const char * imagepath)
{
unsigned char header[54];
unsigned int dataPos;
unsigned int width, height;
unsigned int imageSize;
unsigned char * data;
FILE * file = fopen(imagepath,"rb");
if (!file)
{
printf("Image could not be opened\n"); return 0;
}

if ( fread(header, 1, 54, file)!=54 )
{
printf("Not a correct BMP file\n");
return 0;
}

if ( header[0]!='B' || header[1]!='M' )
{
printf("Not a correct BMP file\n");
return 0;
}


dataPos = *(int*)&(header[0x0A]);
imageSize = *(int*)&(header[0x22]);
width = *(int*)&(header[0x12]);
height = *(int*)&(header[0x16]);


if (imageSize==0) imageSize=width*height*3;
if (dataPos==0) dataPos=54;


data = new unsigned char [imageSize];


fread(data,1,imageSize,file);


fclose(file);

for (int i = 0; i < imageSize; i+=3)
{
char c = data[i];
data[i] = data[i+2];
data[i+2] = c;
}


glGenTextures(1, &textureID);

glBindTexture(GL_TEXTURE_2D, textureID);

// دادن تصویر به اپن جی ال
glTexImage2D(GL_TEXTURE_2D, 0,GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, data);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTE R,GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTE R,GL_LINEAR);
}
void init (void) {
glEnable(GL_TEXTURE_2D);
glShadeModel(GL_SMOOTH);
glClearColor(0.0f, 0.0f, 0.0f, 0.5f);
glClearDepth(1.0f);
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LEQUAL);
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
glBlendFunc(GL_SRC_ALPHA,GL_ONE);
glEnable(GL_BLEND);
}
void display (void) {

glClearColor (0.0,0.0,0.0,1.0);
glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
gluLookAt (0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
if (p==true)
{
glPushMatrix();
loadBMP_custom("nehe.bmp");
glRotatef(rot, 0.0, 1.0, 0.0);
glBegin(GL_QUADS);
glTexCoord2f(0.0f, 0.0f); glVertex3f(1.0f,-1.0f, 1.0f);
glTexCoord2f(1.0f, 0.0f); glVertex3f( 3.0f, -1.0f, 1.0f);
glTexCoord2f(1.0f, 1.0f); glVertex3f(2.0f, 0.0f, 1.0f);
glTexCoord2f(0.0f, 1.0f); glVertex3f( 3.0f, -1.0f, 1.0f);
glEnd();
glPopMatrix();
glPushMatrix();
loadBMP_custom("nehe1.bmp");
glRotatef(rot,1.0,0.0,0.0);
glTranslatef(-2,0,0);
glutSolidTeapot(0.5);
glPopMatrix();
}
else
{
glPushMatrix();
loadBMP_custom("nehe1.bmp");
glRotatef(rot, 0.0, 1.0, 0.0);
glBegin(GL_QUADS);
glTexCoord2f(0.0f, 0.0f); glVertex3f(1.0f, -1.0f, 1.0f);
glTexCoord2f(1.0f, 0.0f); glVertex3f( 3.0f, -1.0f, 1.0f);
glTexCoord2f(1.0f, 1.0f); glVertex3f(2.0f, 0.0f, 1.0f);
glTexCoord2f(0.0f, 1.0f); glVertex3f( 3.0f, -1.0f, 1.0f);
glEnd();
glPopMatrix();
glPushMatrix();
loadBMP_custom("nehe.bmp");
glRotatef(rot,1.0,0.0,0.0);
glTranslatef(-2,0,0);
glutSolidTeapot(0.5);
glPopMatrix();
}
glutSwapBuffers();

}
void idle()
{
rot++;
display();
}


void keyboard (unsigned char key, int x, int y)
{
if (key=='a')
{
if (p==true)
p=false;
else
p=true;
}
}

void reshape (int w, int h) {

glViewport (0, 0, (GLsizei)w, (GLsizei)h);

glMatrixMode (GL_PROJECTION);

glLoadIdentity ();

gluPerspective (60, (GLfloat)w / (GLfloat)h, 1.0, 100.0);

glMatrixMode (GL_MODELVIEW);

}

int main (int argc, char **argv) {

glutInit (&argc, argv);

glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH);

glutInitWindowSize (1000, 600);

glutInitWindowPosition (100, 100);

glutCreateWindow ("Textured");

init ();

glutDisplayFunc (display);

glutIdleFunc (idle);

glutReshapeFunc (reshape);

glutKeyboardFunc(keyboard);

glutMainLoop ();

return 0;

}


بازم ممنون از جناب amin1softco

3pid71
سه شنبه 21 آبان 1392, 16:36 عصر
ببنید من خودم برای کار خودم یک فایلی درست کردم با فرمت chm که تمام توابع رو توضیح داده اینجا گذاشتم ازش استفاده کنید فقط نکته ایی که وجو داره وقتی می خواهین سرچ کنید یک * قبل و بعد عبارتتون اضافه کنید از اینجا (http://up.iranblog.com/Files/de1c345dab80471ba94e.zip)دریافتش کنید. در ضمن به نظر من رد بوک که آقا پویا گفتندم خیلی چیزه خوبیه یا بلو بوک

سلام
چه تاپیک خوب و پرباری.واقعا برای کسی که بخواد کار با این کتابخونه رو شروع کنه عالیه
فقط میشه این لینک رو دوباره آپ کنید.لینکش دیگه غیرفعال شده:چشمک:


در مورد pick up کردن و حرکت دوربین هم دوستان قبلا سوال پرسیدن ولی جواب داده نشده ، کسی هست که توابع مربوط به اینارو توضیح بده.مثلا ما تو یه فضای 3 بعدی 8 تا نقطه داریم(رئوس یک مکعب مستطیل) و حالا میخوایم یکی از رئوس رو انتخاب کنیم و اونو حرکت بدیم + اینکه دوربین رو هم بتونیم حرکت بدیم

pswin.pooya
چهارشنبه 22 آبان 1392, 19:32 عصر
سلام برای انتخاب راه های زیادی وجود داره و بیشتر بسته به اینه که از کدوم ویرایش استفاده می کنید. اگر از ویرایش OpenGL 1.2 استفاده می کنید خود API یک دستورالعمل داره که توضیحاتش در لینک زیر موجوده:

http://www.glprogramming.com/red/chapter13.html

برای ویرایش های بالاتر بهتره یا از شیدرها استفاده بشه و یا اینکه از روش Ray Pickup که توضیحاتش در کتاب DirextX 9 Game Programming هست استفاده بشه.


لطفا سوالها رو در تاپیکهای جدا بپرسید

amin1softco
چهارشنبه 22 آبان 1392, 19:39 عصر
این فایل رفرنس های OpenGL2 است که می تونید با یک سرچ ساده بهش دست پیدا کنید فایل ضمیمه است .

برای پیک کردن به بخش مثال های OpenGL یکسری بزنید فک کنم کارتون راه بندازد.
http://nehe.gamedev.net/tutorial/picking_alpha_blending_alpha_testing_sorting/16005/

Saraji
پنج شنبه 23 آبان 1392, 11:11 صبح
سلام
متاسفانه نمی شد تاپیک جدید ایجاد کنم بنابراین سوالمو همین جا مطرح می کنم:
من بررسی کردم و نحوه ی استفاده از تابع gluCylinder رو برای کاربرد دلخواهم متوجه شدم . حالا می خوام بدونم چطور می تونم محورهای مختصات رو با استفاده از این تابع رسم کنم. در واقع می خوام که هر کدوم از محور ها یک میله باشه و نه خط. البته طول مشخصی هم داشته باشه که خودم تعیین می کنم. همینطوری با توجه به فرمی که داره متاسفانه نه تنها چیزی برام رسم نمی کنه که حتی اشیاء دیگه ای رو هم که رسم کردم محو می کنه. من روی یک گرید می خوام اینو رسم کنم.

ممنون می شم اگر جواب بدید.

Saraji
پنج شنبه 23 آبان 1392, 11:34 صبح
سلام دوستان
کسی می تونه کمکم کنه که تو صفحه یک مخروط و حلقه و قوری داشته باشم؟
ممنون میشم اگه کسی کمکم کنه
چند وقته دنبالشم ولی چیزی پیدا نکردم کارم بدجور گیره

توابع هر سه ی اینها به اسم Teapot Torus & Clone وجود داره که البته clone با استفاده از glucylinder که شعاع دایره ی بالایی رو صفر می دیم رسم می شه. سرچ شما رو به جواب می رسونه.

amin1softco
پنج شنبه 23 آبان 1392, 14:02 عصر
سلام
متاسفانه نمی شد تاپیک جدید ایجاد کنم بنابراین سوالمو همین جا مطرح می کنم:
من بررسی کردم و نحوه ی استفاده از تابع gluCylinder رو برای کاربرد دلخواهم متوجه شدم . حالا می خوام بدونم چطور می تونم محورهای مختصات رو با استفاده از این تابع رسم کنم. در واقع می خوام که هر کدوم از محور ها یک میله باشه و نه خط. البته طول مشخصی هم داشته باشه که خودم تعیین می کنم. همینطوری با توجه به فرمی که داره متاسفانه نه تنها چیزی برام رسم نمی کنه که حتی اشیاء دیگه ای رو هم که رسم کردم محو می کنه. من روی یک گرید می خوام اینو رسم کنم.

ممنون می شم اگر جواب بدید.
خوب یک استوانه یا میله با تابع درست کن مثلاً :

GLUquadricObj *quadratic;
quadratic = gluNewQuadric();
glRotatef(90.0f, 0.0f, 1.0f, 0.0f);
gluCylinder(quadratic,0.1f,0.1f,3.0f,32,32);


و سپس با توابع glPushMatrix glRotatef آن را در محور مورد نظر بچرخان شکل می شه محور مختصات.

3pid71
پنج شنبه 23 آبان 1392, 19:57 عصر
برای پیک کردن به بخش مثال های OpenGL یکسری بزنید فک کنم کارتون راه بندازد.
http://nehe.gamedev.net/tutorial/picking_alpha_blending_alpha_testing_sorting/16005/

این لینکی که دادید باز نمیشه :/

amin1softco
پنج شنبه 23 آبان 1392, 20:17 عصر
ایران تحریم است . 1- فیلتر شکن 2- استفاده از کش گوگل (http://webcache.googleusercontent.com/search?q=cache:4tRlSMhLvW8J:nehe.gamedev.net/tutorial/picking_alpha_blending_alpha_testing_sorting/16005/+&cd=1&hl=en&ct=clnk&gl=us) 3- دانلود نسخه کامل آموزش های nehe
و...

3pid71
پنج شنبه 23 آبان 1392, 20:58 عصر
الان این برنامه ای که نوشتم یه نقطه تو صفحه است که با حرکت موس حرکت می کنه.حالا میخوام این یه نقطه رو مثلا بکنم 2 نقطه یا بیشتر که حالا بیام یکیشو انتخاب کنم و فقط همونو جابه جا کنم
این لینکایی که فرستادید رو نگا کردم ولی نفهمیدم چطوری باید از این تابع gluPickMatrix استفاده کنم :/ کسی هس که راهنماییم کنه؟

#include<gl/glut.h>
float lastX = -1.0f;
float lastY = -1.0f;
float xdiff = 0.0f;
float ydiff = 0.0f;
bool mouseDown = FALSE;
void init()
{
glClearColor(0,0,0,0);
glMatrixMode(GL_PROJECTION);
gluOrtho2D(0,2000,0,1000);
}
void display()
{
glClear(GL_COLOR_BUFFER_BIT);
glEnable(GL_POINT_SMOOTH);
glPointSize(10); glBegin(GL_POINTS);
glColor3f(1.0,0.0,0.4);
glVertex2i(1000,500);
glEnd();
glFlush();
}
void moveDisplay(void)
{
glTranslatef(xdiff,ydiff,0);
glutPostRedisplay();
}
void mouse(int button, int state, int x, int y)
{
if(button == GLUT_LEFT_BUTTON && state == GLUT_DOWN)
mouseDown = TRUE;
else
mouseDown = FALSE;
}
void mouseMotion(int x, int y)
{ if (mouseDown)
{ if(lastX==-1)
lastX=x;
if(lastY==-1)
lastY=y;
xdiff=x-lastX;
ydiff=-y+lastY;
lastX=x;
lastY=y;
moveDisplay();
}
else
{
lastX=x;
lastY=y;
}
}
int main(int argc,char **argv)
{ glutInit(&argc,argv);
glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);
glutInitWindowSize(500,500);
glutInitWindowPosition(200,200);
glutCreateWindow("moving");
init();
glutDisplayFunc(display);
glutMouseFunc(mouse);
glutMotionFunc(mouseMotion);
glutMainLoop();
return 0;
}

amin1softco
پنج شنبه 23 آبان 1392, 21:58 عصر
من قبلاً یک برنامه نوشتم بهتره یک نگاهی بهش بندازید ...
الان با ویژوال 2012 دوباره کامپایلش کردم.

3pid71
پنج شنبه 23 آبان 1392, 22:45 عصر
من قبلاً یک برنامه نوشتم بهتره یک نگاهی بهش بندازید ...
الان با ویژوال 2012 دوباره کامپایلش کردم.

من برنامتونو run کردم ولی راستش نفهمیدم الان ربط این برنامه به سوال من چی بود.الان این توش picking داشت؟ شاید به خاطر اینکه کامپایلر من به#include <stdafx.h>
error گرفت درست run نشد ولی توی برنامتونم نتونستم تابع مربوطه رو پیدا کنم

amin1softco
جمعه 24 آبان 1392, 07:24 صبح
روش کار برنامه از منوی کناری شکل دایره را انتخاب کنید و چند تا دایره روی صفحه قرار بدید و سپس ماوس را از منوی کناری انتخاب کنید و با کلیک بر روی هر دایره می توانید انتخاب و موقعیت آن را بوسیله ماوس تغییر دهید ....
http://upload7.ir/images/05280800229308322708.gif

به روش پیکینگ OpenGL هم لینکی که پویا گذاشته نمونه برنامه داره .

3pid71
جمعه 24 آبان 1392, 12:01 عصر
روش کار برنامه از منوی کناری شکل دایره را انتخاب کنید و چند تا دایره روی صفحه قرار بدید و سپس ماوس را از منوی کناری انتخاب کنید و با کلیک بر روی هر دایره می توانید انتخاب و موقعیت آن را بوسیله ماوس تغییر دهید ....


به روش پیکینگ OpenGL هم لینکی که پویا گذاشته نمونه برنامه داره .

اهان پس برای من درست اجرا نمی کرد.اون 5 تا گزینه ی کنار صفحه میومد ولی چیزی انتخاب نمیشه و صفحه همش پرپر میزنه.
آره منم همون روش پیکینگ مد نظرمه که میگم باهاش مشکل دارم :/
به هرحال ممنون

rs2013
یک شنبه 24 آذر 1392, 16:34 عصر
سلام به دوستان گلم من یک برنامه ای نوشتم ساده که بازی پینگ پنگ سگاست
که به شهر زیر است:
دو تا مستعطیل داره و یک خط وسط
یک توپ به شکل مربع
حال من یک جاش موندم میخوام این توپ طوری راه بره به صورت اتو ماتیک که هر موقع به هر یک از مسطعتیل ها اسابت کرد برگرده و کار دیگرم اینه که بتونم با فلشها کلید این راکت ها رو جاب جا کنم
از دوستانو عزیز میخوام منو در جواب این مسئله کمک کنن در زیر نمونه کد برنامه و حالتی از عکس بازی رو گذاشتم ممنون از دوستان گلم::چشمک:
دوستان اگر میشه کد برنامه شو برام بزارین چرا که تا اینجاشم سخت در گیر بودم با تشکر



#include <GL/glut.h>
float i=0;
void special( int key, int x, int y)
{
switch(key){
case GLUT_KEY_UP:
i+=10;
break;
case GLUT_KEY_DOWN:
i-=10;
break;
case GLUT_KEY_HOME:
exit(i);
break;
}
}
void Display()
{
glClear(GL_COLOR_BUFFER_BIT) ;
glColor3f(1.0, 1.0, 0.0);
glBegin(GL_LINES );
// mostatiel Raghit
glVertex2f(0.85, 0.50);
glVertex2f(0.95, 0.50);
glVertex2f(0.85, -0.50);
glVertex2f(0.95,- 0.50);
glVertex2f(0.85, 0.50);
glVertex2f(0.85,- 0.50);
glVertex2f(0.95, -0.50);
glVertex2f(0.95, 0.50);
//Mostatil left
glVertex2f(-0.85, 0.50);
glVertex2f(-0.95, 0.50);
glVertex2f(-0.85, -0.50);
glVertex2f(-0.95,- 0.50);
glVertex2f(-0.85, 0.50);
glVertex2f(-0.85,- 0.50);
glVertex2f(-0.95, 0.50);
glVertex2f(-0.95,- 0.50);
//Linse Vasat
glVertex2f(0.00, 1);
glVertex2f(0.00, -1.0);
// morabae vasat
glEnd();
glPushMatrix();
glEnable (GL_POLYGON);
glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glRotatef(i,0,0,0.0);
//glPointSize(20.0);
glColor3f(1.0, 0.0,.0);
glBegin(GL_POLYGON);
glColor3f(0,1,0.50);
glVertex2f(-0.80, 0.30);
glVertex2f(-0.85, 0.30);
glVertex2f(-0.85, 0.20);
glVertex2f(-0.80, 0.20);

glEnd();
glPopMatrix();
glutSwapBuffers();
}
#define WIDTH 1500
#define HEIGHT 1500
int main(int argc, char **argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
glutInitWindowPosition(50,00);
glutInitWindowSize(WIDTH, HEIGHT) ;
glutCreateWindow("Circle key");
glClearColor(0.0,0.0,0.0,0.0);
glutDisplayFunc(Display);
glutIdleFunc(Display);
glutSpecialFunc(special);
glutMainLoop();
return 0;
}



عکس از محیط بازی
113987

xkapitanx
پنج شنبه 28 آذر 1392, 22:07 عصر
با سلام.
من میخواستم کدی بنویسم که توش بشه یک میز کاری رو طراحی کرد که کشاب داشته باشه و بشه تو محیط با کلید ها حرکت کرد.
کسی چنین مثالی داره؟
مثالی که بشه مدلشو با میز عوض کرد و بجاش یک مدل تو مثلا 3ds max یا maya ساخت بعد با اون مدل عوضش کرد؟(اصلا میشه مدل ساخته شده به برنامه منتقل کرد؟)
بنده وارد نیستم زیاد.
خواهشا راهنمایی کنید که چطور میتونم این کار رو بکنم؟؟
خواهشا اگر کسی اسکریپتی با این base داره بهم بده من فقط مدلشو عوض کنم؟
ممنون میشم اگر توضیح بدید

ahmaduse
دوشنبه 09 دی 1392, 11:55 صبح
چرا من نمیتونم از opngl تو سی شارپ استفاده کنم؟ میشه یکی با شکل مراحل استفاده رو بگه؟
یا یک برنامه خیلی ساده بزارید با سی شارپ که من اینجا بازش کنم ببیم اسکلتش چطوره؟

pswin.pooya
دوشنبه 09 دی 1392, 19:53 عصر
لفطا سوالها رو توی تاپیک های جدا مطرح کنید

ahmaduse
سه شنبه 10 دی 1392, 01:10 صبح
دوستان من وقتی از Tao استفاده میکنم برای سی شارپ Tao گزینه Tao.Platform رو نداره باید چیکار کنم؟
چون بدون این ارور میده برنامه.
وقتی از tk استفاده میکنم اونوقت از کنترل simpleOpenGlControl1 نمیشه استفاده کرد.
دلیلش چیه؟؟

amin1softco
سه شنبه 10 دی 1392, 06:27 صبح
در کل بهترین زبان برای استعمال OpenGL به نظر من سی ++ است و سی شارپ زیاد بدرد بازی سازی نمی خوره با این حال TAO تا یاد دارم در ویندوز اکس پی بدون مشکل کار می کرد ولی در ویندوز های سون و 8 درست کار نمیداد و
ببین openTK داخل خودش مثال و سمپل داره می تونی بری یکسری به پوشش بزنی و نیازی هم به simpleOpenGLControl نداره روش استفاده از کنترلش به صورت زیر است :
// Creates a 1.0-compatible GraphicsContext with GraphicsMode.Default
GameWindow window = new GameWindow();

// Creates a 3.0-compatible GraphicsContext with 32bpp color, 24bpp depth
// 8bpp stencil and 4x anti-aliasing.
GLControl control = new GLControl(new GraphicsMode(32, 24, 8, 4), 3, 0);
http://www.opentk.com/doc/graphics/graphicscontext

ahmaduse
چهارشنبه 11 دی 1392, 11:32 صبح
در کل بهترین زبان برای استعمال OpenGL به نظر من سی ++ است و سی شارپ زیاد بدرد بازی سازی نمی خوره با این حال TAO تا یاد دارم در ویندوز اکس پی بدون مشکل کار می کرد ولی در ویندوز های سون و 8 درست کار نمیداد و
ببین openTK داخل خودش مثال و سمپل داره می تونی بری یکسری به پوشش بزنی و نیازی هم به simpleOpenGLControl نداره روش استفاده از کنترلش به صورت زیر است :
// Creates a 1.0-compatible GraphicsContext with GraphicsMode.Default
GameWindow window = new GameWindow();

// Creates a 3.0-compatible GraphicsContext with 32bpp color, 24bpp depth
// 8bpp stencil and 4x anti-aliasing.
GLControl control = new GLControl(new GraphicsMode(32, 24, 8, 4), 3, 0);
http://www.opentk.com/doc/graphics/graphicscontext

من میخوام روی فرم یک شکل ساده کشیده بشه و یک دکمه بزارم وقتی رو دکمه کلید شد شکل دو برابر بشه
بنابراین میخوام شکل رو فرم کشیده بشه میشه کمک کنین؟
شکلی که میخوام بکشم شکل کد opngl اش بصورت زیره :




glClear(GL_COLOR_BUFFER_BIT );
glLoadIdentity();
glColor3f(1.0f,1.0f,0.0f);
POINT p1,p2,p3,p4,p5;
p1.x=300;p1.y=200;
p2.x=260;p2.y=300;
p3.x=350;p3.y=240;
p4.x=250;p4.y=240;
p5.x=340;p5.y=300;
glBegin(GL_LINE_LOOP);
glVertex2i(p1.x,p1.y);
glVertex2i(p2.x,p2.y);
glVertex2i(p3.x,p3.y);
glVertex2i(p4.x,p4.y);
glVertex2i(p5.x,p5.y);
glEnd();
glutSwapBuffers();

amin1softco
چهارشنبه 11 دی 1392, 12:54 عصر
سرچ کن عزیزم http://www.opentk.com/doc/chapter/2/glcontrol

mostafagsm
شنبه 19 بهمن 1392, 18:27 عصر
با عرض سلام و خسته نباشید خدمت دوستان عزیز
بچه ها موضوع شیوه ارائه من در دانشگاه Open GL هستش و ویژوال استودیو 2010 رو روی لپ تاپم نصب کردم ولی کدهای اوپن جی الم رو ران نمی کنه. میشه یکی به صورت کامل توضیح بده ک چجوری باید کتابخانه ها و ملزومات اوپن جی ال رو روی ویژوال استودیو 2010 و ویندوز 7 شصت و چهار بیتی نصب و برنامه هامو ران کنم.
با تشکر

mostafagsm
یک شنبه 20 بهمن 1392, 10:43 صبح
دوستان ب جز visual studio برنامه دیگری هست که بشه با زبان c++ کتابخانه OpenGL رو اجرا کرد؟
خواهش می کنم راهنمایی کنید
مرسی

turn-off
سه شنبه 19 فروردین 1393, 13:15 عصر
سلام
من میخوام توی opengl از فونتهای فارسی استفاده کنم از کتابخونه ftgl
حالا نمیدونم ftgl رو چطوری به سیستم بشناسونمش
میشه کمک کنیدلطفا خیلی سریع
به ایمیلم بفرستین

apolon005
سه شنبه 16 اردیبهشت 1393, 21:18 عصر
سلام
خسته نباشین
ببخشید من هفته دیگه یک ارائه دارم از چند خط کد نویسی opengl
رسم یک خط بصورت نقطه چین
کدهاشم دارم
فقط درخواستم اینه که بگید هر خط کد چه کاری انجام میده؟
و اینکه اگه بخوام 2تا خط بشه باید چیکار کنم
و اینکه اگه بخوام نقطه چینهاش درشت و کوچیک بشه
و اینکه زاویه خط عوض بشه
و حالا بجای نقطه چین وفقط یک خط بشه فقط
اینا سولاتیه که استاد از من میپرسه موقع ارائه
ممنون میشم راهنماییم کنین


#include<GL/glut.h>
void init()
{
glClearColor(0.1,0.2,0.1,0);
glutInitWindowPosition(200,60);
glutInitWindowSize(800,400);
glMatrixMode(GL_PROJECTION);
gluOrtho2D(0,100,0,200);
}
void display()
{
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1.0,0.0,0.0);
for(int i=1; i<2000 ;i++)
{
glBegin(GL_POINTS);
glVertex2i(i,i*2);
glEnd();
}
glFlush();
}
int main(int argc,char**argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);
glutCreateWindow("Test");
init();
glutDisplayFunc(display);
glutMainLoop();
return 0;
}

amin1softco
جمعه 19 اردیبهشت 1393, 13:45 عصر
ما اینجا پروژه شما را انجام نمی دهیم فقط راهنمایی می کنیم در مورد توضیح کد یکمی بالاتر کد مشابه توضیح داده شده این توابع کارشون قبلاً شرح داده شده فقط در این برنامه کد زیر کار نمایش خط را انجام میده

for(int i=1; i<2000 ;i++)
{
glBegin(GL_POINTS);
glVertex2i(i,i*2);

glEnd();
}




که اصلاً کار جالبی نیست برای رسم خط به صورت نقطه چین یا خط چین پیشنهاد می شه از
glLineStipple(1, 0x3F07); glEnable(GL_LINE_STIPPLE);
استفاده کنید
http://www.opengl.org.ru/docs/pg/OpenGL%20Programming%20Guide%202.files/image008.gif

void lineTo(Point2 p1, Point2 p2) {
glBegin(GL_LINES);
glVertex2f((GLfloat) p1.getX(), (GLfloat) p1.getY());
glVertex2f((GLfloat) p2.getX(), (GLfloat) p2.getY()); //draw the line
glEnd();
}

برای تغییر زاویه خط یا امثالهم باید نقطه شروع و پایان را تغییر بدید در برنامه شما تابع خط y=2x رسم می شود چون همیشه در حلقه i و 2*i مقدار نقطه بعدی را مشخص می کنند شما با تغییر به 3i می تونید زاویه را هم تغییر بدید...

samadblaj
یک شنبه 21 اردیبهشت 1393, 21:04 عصر
سلام خواهش میکنم یکی راهنمایی کنه من نیاز به پروژه پرچم ایران به زبان سی شارپ یا سی پلاس با استفاده از OpenGL دارم ممنون میشم.... :ناراحت:
فقط پرچم ایران رو نمایش بده همین.

amin1softco
دوشنبه 22 اردیبهشت 1393, 16:38 عصر
قبلاً یک لینک دادم بازم یک لینک میدم تا عاقبت به خیر شی http://pages.cs.wisc.edu/~byrne/p3/Flag.cpp

samadblaj
سه شنبه 23 اردیبهشت 1393, 10:34 صبح
سلام ببخشید پروژه رو جمع جور کردم از سایتی که معرفی کردید اما یکی از فایل های include وجود نداره؟!#include "Flag.h"#include "Project3.h"#include "GlObject.h"#include "Camera.h"#include "Texture.h"#include #include #include #include #include #include #include

3pid71
شنبه 27 اردیبهشت 1393, 18:56 عصر
سلام بچه ها



من با استفاده از آرایه رئوس یه شکلی رو ترسیم کردم.حالا می خوام وقتی با موس روی شکل کلیک می کنم بتونم نزدیک ترین راس به کرسر رو انتخاب و اون رو با حرکت موس جا به جا کنم.این قسمتی از برناممه که این کارو باید انجام بده





void Mouse(int button, int state ,int X,int Y){

if (button == GLUT_LEFT_BUTTON && state==GLUT_DOWN){

click=true;
oldX=X;
oldY=Y;



}


else if (button == GLUT_RIGHT_BUTTON && state==GLUT_UP)
click=false;


else if (button == GLUT_RIGHT_BUTTON && state==GLUT_DOWN){
z_camera -= 20;


}

glutPostRedisplay();




}





void Motion(int X,int Y){
if(click){
printf("click\n");
for(int i=0;i<n1;i=i+3){
if((abs(vertices[i]-X)<3)&&(abs(vertices[i+1]-Y)<3)){
printf("i=%d \n",i);
printf("x=%d y=%d \n",X,Y);
printf("1=%f 2=%f \n",vertices[i], vertices[i+1]);
if(oldX==-1.0)
oldX=X;
if(oldY==-1.0)
oldY=Y;
diff_x=X-oldX;
diff_y=-Y+oldY;
vertices[i]=vertices[i]+diff_x;
vertices[i+1]=vertices[i+1]+diff_y;
glutPostRedisplay();
}}}
//oldX=X;
//oldY=Y;


}








vertices =همون آرایه ای هست که مختصات رئوس رو توش ریختم


به نظر شماها اشکال کارم کجاست؟برنامم ران میشه ولی با کلیک کردن هیچگونه تغییری توی شکلم ایجاد نمیشه:ناراحت:

amin1softco
یک شنبه 28 اردیبهشت 1393, 20:51 عصر
@3pid71 (http://barnamenevis.org/member.php?306229-3pid71) : کلاً وقتی کلیک می کنید چی در کنسول چاپ می شه اصلاً تشخیص میده به نظر من شما باید همین را در تابع display بنویسید

@alirezafaa (http://barnamenevis.org/member.php?275877-alirezafaa) : همین عکس را تکسچر کن بنداز روی یک مستطیل ;)

turn-off
دوشنبه 29 اردیبهشت 1393, 15:46 عصر
سلام
من میخوام توی opengl فارسی بنویسم
با بیت مپم نمیخوام باشه
کسی میتونه کمکم کنه؟

amin1softco
دوشنبه 29 اردیبهشت 1393, 16:30 عصر
دقیقاً می خواهی چیکار کنی ؟ freetype - FTGL استفاده کن بیتمپم نیست یا اینکه خودت یک کتابخانه بنویس که بتونه یک فایل فونت مثل ttf را بخونه و سپس پردازش روش انجام بده و ازش در برنامه استفاده کن

turn-off
سه شنبه 30 اردیبهشت 1393, 09:22 صبح
دقیقاً می خواهی چیکار کنی ؟ freetype - FTGL استفاده کن بیتمپم نیست یا اینکه خودت یک کتابخانه بنویس که بتونه یک فایل فونت مثل ttf را بخونه و سپس پردازش روش انجام بده و ازش در برنامه استفاده کن
دقیقا میخوام فارسی تایپ کنم که وقتی فونتشو بزرگ کردم کیفیتش تغییر نکنه .میشه ی مثال از ftgl یا free type برام بزارید

amin1softco
سه شنبه 30 اردیبهشت 1393, 10:16 صبح
مثال بهمراه توضیحات : http://ftgl.sourceforge.net/docs/html/ftgl-tutorial.html

turn-off
سه شنبه 30 اردیبهشت 1393, 10:30 صبح
مثال بهمراه توضیحات : http://ftgl.sourceforge.net/docs/html/ftgl-tutorial.html
ااینا رو امتحان کردم نتونستم اگه خودتون امتحانش کردید میشه کدتونو بزارید .

3pid71
سه شنبه 30 اردیبهشت 1393, 13:24 عصر
@3pid71 (http://barnamenevis.org/member.php?306229-3pid71) : کلاً وقتی کلیک می کنید چی در کنسول چاپ می شه اصلاً تشخیص میده به نظر من شما باید همین را در تابع display بنویسید

@)

اگه دقت کرده باشید آخرش postredisplay نوشتم پس بین این تابع و display ارتباط برقرار کردم و از اون جهت مشکلی نیس.ولی درگ کردن رو درست انجام نمیده و شکل به هم میریزه

amin1softco
سه شنبه 30 اردیبهشت 1393, 13:41 عصر
منم یک سوال دارم : ما اگر بخواهیم یک برنامه مثل فوتوشاپ درست کنیم که کاربر بتونه بوسیله نقطه ها (Bezier Curves) یک شکلی مثل شکل زیر درست کنه و بتونه داخلش را رنگ کنه باید چیکار کنیم .:متفکر:119253

@turn-off (http://barnamenevis.org/member.php?328679-turn-off) : باشه پیدا کردم رو چشم .

@3پیده : خوب اون یکبار اجرا می شه !!

3pid71
سه شنبه 30 اردیبهشت 1393, 14:05 عصر
@3پیده : خوب اون یکبار اجرا می شه !!

چرا یه بار؟هر بار که تابع اجرا بشه و به اون خط برسه اجرا میشه دیگه

3pid71
سه شنبه 30 اردیبهشت 1393, 20:19 عصر
یه چیزی متوجه شدم
.اون x و y که تابع motion بهم میده نسبت به دستگاه مختصات ویندوز هست ولی اون چیزی که من رسم می کنم چون روش تبدیلای مختلف انجام شده و دوربین جا به جا شده و اینا،مختصاتاش فرق می کنه
الان مثلا مکان نقطه ی (1و0) موس با (1و0) مکعب هایی که رسم کردم باهم فرق می کنه.اونجوری که من متوجه شدم با دستور gluUnProject میشه این تبدیل مختصاتی رو انجام داد. ولی من هرجایی که کلیک می کنم مختصات صفر رو بهم برمیگردونه و بازم برنامه کار نمی کنه :متفکر:

amin1softco
چهارشنبه 31 اردیبهشت 1393, 11:18 صبح
شما داری 3 بعدی کار می کنید فک کنم خود اپن جی ال تابع پیکینگ داره براش ....

turn-off
چهارشنبه 31 اردیبهشت 1393, 12:35 عصر
از کجا میشه تشخیص داد یه عکس یا متنی که توی opengl گذاشتیم وکتور هست ؟

amin1softco
چهارشنبه 31 اردیبهشت 1393, 15:14 عصر
بزرگش کن اگر کیفیتش را از دست داد پیکسلی است اگر نه وکتوری است

turn-off
چهارشنبه 31 اردیبهشت 1393, 16:24 عصر
من یه عکس آوردم توی opengl
شما ببینید وکتور هست یا نه

amin1softco
چهارشنبه 31 اردیبهشت 1393, 17:30 عصر
عکس BMP وکتور نیست و بیشتر تکسچر هایی که استفاده می شوند بیتمپ هستند .........

این مثلثی کردن اپن جی الم داستانیه ها
119287

turn-off
پنج شنبه 01 خرداد 1393, 10:28 صبح
من پیدا نکردم ک گفتین 2-3 تا عکس لود شده
کد این عکستونو میشه بذارین؟

3pid71
پنج شنبه 01 خرداد 1393, 12:42 عصر
شما داری 3 بعدی کار می کنید فک کنم خود اپن جی ال تابع پیکینگ داره براش ....
بله یه تابع picking داره ولی اون برای وقتیه که چند تا جسم مختلف داشته باشی و به هرکودوم یه ID اختصاص بدی ولی من یه مش دارم که تعداد نقاطش خیلی زیاده و با دستور glDraw اونو رسم کردم و نمی تونم به هر کودوم از رئوس یه ID اختصاص بدم

کسی نمی تونه راهنماییم کنه؟ :/

amin1softco
پنج شنبه 01 خرداد 1393, 15:32 عصر
در این زمینه باید پویا یا کوچول وارد عمل بشوند از حوزه دانش من خارج است :چشمک: و من الله توفیق

amin1softco
جمعه 02 خرداد 1393, 00:41 صبح
turn-off (http://barnamenevis.org/member.php?328679-turn-off) : ابزار های سایت زیر را بررسی کن
http://www.opengl-tutorial.org/miscellaneous/useful-tools-links

turn-off
شنبه 03 خرداد 1393, 09:53 صبح
turn-off (http://barnamenevis.org/member.php?328679-turn-off) : ابزار های سایت زیر را بررسی کن
http://www.opengl-tutorial.org/miscellaneous/useful-tools-links
خیلی ممنون
یه راه حلی که تو بیشتر سایتا دیدم استفاده از openvg بود
شما میدونین چیه؟
بیشتر جاهام گفته بودش که باید معادلات ریاضی به کار ببریم

turn-off
شنبه 03 خرداد 1393, 10:36 صبح
3pid71 (http://barnamenevis.org/member.php?306229-3pid71)
:
http://www.daneshju.ir/forum/1507/t27228-6.html
شاید این سایت بتونه کمکت کنه
پروژه ای که شکل رو میتونه با کلید کیبورد خم و یا راست کنه

turn-off
یک شنبه 04 خرداد 1393, 09:44 صبح
سلام
من چند تا شی توی opengl دارم
اگه بخوام درگشون کنم باید چکار کنم؟

amin1softco
یک شنبه 04 خرداد 1393, 14:21 عصر
عزیزم شما یک سرچی بزنی رو نت کدشو پیدا می کنید ولی به هر حال چیزی که من پیدا کردم
https://forum.libcinder.org/#topic/23286000000285018
این در محیط سه بعدی است ...

+http://www.lighthouse3d.com/opengl/picking/

turn-off
یک شنبه 04 خرداد 1393, 14:50 عصر
عزیزم شما یک سرچی بزنی رو نت کدشو پیدا می کنید ولی به هر حال چیزی که من پیدا کردم
https://forum.libcinder.org/#topic/23286000000285018
این در محیط سه بعدی است ...

+http://www.lighthouse3d.com/opengl/picking/
مرسی :تشویق:
http://www.youtube.com/watch?v=XgrrsPigBWw
اینو پیدا کردم
به نظرم کار جالبیه

turn-off
یک شنبه 04 خرداد 1393, 15:53 عصر
ببخشید من انقد سوال میپرسم
من میخوام متن و عکس بذارم توی opengl
میخوام منو و نوار ابزار و پنل بذارم
به نظر شما از win32 استفاده کنم بهتر و راحت تره یا mfc?

pswin.pooya
دوشنبه 05 خرداد 1393, 10:37 صبح
به نظر شما از win32 استفاده کنم بهتر و راحت تره یا mfc?

هیچ کدوم.برای ui از Qt استفاده کنید.

turn-off
دوشنبه 05 خرداد 1393, 10:43 صبح
هیچ کدوم.برای ui از Qt استفاده کنید.

کار با qt واسه من که تا حالا کار نکردم سخت نیست؟

turn-off
دوشنبه 05 خرداد 1393, 10:47 صبح
میخوام چند تا شی که روی opengl دارم یکیشونو درگ کنم
کسی میتونه کمک کنه؟

turn-off
پنج شنبه 08 خرداد 1393, 10:08 صبح
من طبق توصیه اقا پویا رفتم سمت qt
تا حالا با هاش کار نکردم
سوالم اینه توی qt میشه از ftgl استفاده کرد ؟

mehdijafari39
جمعه 09 خرداد 1393, 19:46 عصر
سلام دوستان..میشه منو کمک کنید..:افسرده:
یه برنامه ی اماده میخام که هم خیلی ساده باشه هم متحرک باشه
واسه پروژه گرافیم میخام(GUI) هیچی هم ازش بلد نیستم:گریه:...اک میشه لینک ی برنامه رو به ایمیلم بزنید..مرسی...ممنون
atefehahmadi5@gmail

rezaaasa
دوشنبه 12 خرداد 1393, 14:27 عصر
سلام خدمت دوستان من میخوام یه چهره انسان طراحی کنم با open gl کسی مثالی,راهنمایی سراغ داره؟ممنون.

rezaaasa
دوشنبه 12 خرداد 1393, 22:19 عصر
سلام خدمت دوستان من میخوام یه چهره انسان طراحی کنم با open gl کسی مثالی,راهنمایی سراغ داره؟ممنون.
کسی نی به ما کمک کنه؟

mg_ho2003
جمعه 23 خرداد 1393, 15:26 عصر
چاپ مستطیل وفونت در opengl

با سلام در ++C با کمک opengl یک مستطیل چاپ کردم و فونت را با کمک تابع glbitmap-character جدا چاپ کردم حالا میخوام این 2 تا با هم در یک صفحه چاپ شود ولی بعد از ترکیب هر 2تا کد باهم فقط یکی چاپ میشود با هم در یک صفحه قرار نمیگیرد لطفا راهنمایی فرمایید .

amin1softco
جمعه 23 خرداد 1393, 18:35 عصر
مشکل در روش ترکیب است ...

rezaaasa
یک شنبه 25 خرداد 1393, 11:21 صبح
سلام خدمت دوستان من میخوام یه چهره انسان طراحی کنم با open gl کسی مثالی,راهنمایی سراغ داره؟ممنون.
دوستان کسی نی کمکی به ما بکنه؟

mg_ho2003
یک شنبه 25 خرداد 1393, 19:47 عصر
چاپ مستطیل وفونت در opengl



با سلام در ++C با کمک opengl یک مستطیل چاپ کردم و فونت را با کمک تابع glbitmap-character جدا چاپ کردم حالا میخوام این 2 تا با هم در یک صفحه چاپ شود ولی بعد از ترکیب هر 2تا کد باهم فقط یکی چاپ میشود با هم در یک صفحه قرار نمیگیرد لطفا راهنمایی فرمایید .




سلام

amin1softco (http://barnamenevis.org/member.php?46176-amin1softco)
جان چطوربایدترکیب کنم

amin1softco
یک شنبه 25 خرداد 1393, 22:49 عصر
احتمالاً تابع clear را فراخوانی کردی ....

fareshteh
جمعه 30 خرداد 1393, 00:32 صبح
سلام خوبید دوستان من کمک می خوام
برنامه ای می خوام که با کلیک چپ در محل کلیک نقطه بگذاره با کلیک راست روی نقطه اون رو پاک کنه میشه راهنمایی کنید نمیدونم چطوری پاک کنم بعدم قبل از کلیک چپ یه نقطه میکشه که من نمی خوام بکشه

Mahya1993
دوشنبه 02 تیر 1393, 19:19 عصر
سلام دوستان
کل این 9 صفحه رو گشتم اما ب جوابی نرسیدم
من ذوزنقه تو صفحه کشیدم.شما فرض کنید یه ماشینه.
حالا باید تو صفحه مدام از چپ به راست حرکت کنه و به اخر صفحه ک رسید دوباره از سمت راست تصویر شروع بشه
وقتی کلید راست رو میزنم سرعتش بیشتر بشه یا با زدن کلید چپ سرعتش کم بشه.
میخواستم راهنماییم کنید
کار عاقلانه ایه اگه
یه حلقه چرخشی بنویسم ک مدام صفحه رو پاک کنه و شکل رو یه بار دیگه با مختصات جدید رسم کنه ؟
برای حرکتش باید چیکار کنم؟
گرفتن وروودی رو بلدم اما چجوری سرعتش کم یا زیاد شه.
البته تو یکی از پست ها یه دایره بود ک مدام میچرخید و سرعتش کم و زیاد میشد.اما نتونستم کاری کنم ک ب جای حرکت دورانی حرکت مستقیم داشته باشه!
لطفا کمکم کنید
سپاسگزارم :)

amin1softco
دوشنبه 02 تیر 1393, 21:57 عصر
کار عاقلانه هست یا نه که ملت اینجوری کار می کنند با یک حلقه
برای حرکتشم مثالی که سرعت دایره را کم و زیاد می کنه جواب شماست با یک متغیر اضافی
در همون حلقه با متغیر سوم می تونید کنترلش کنید اون دایره همه مختصاتشو عوض کنید به نتیجه می رسید

Mahya1993
سه شنبه 03 تیر 1393, 11:19 صبح
سلام:)
از پاسخ دیروزتون ممنون
4تا خواهش وسوال دیگه ازتون دارم
یکی این ک میشه لطفا کد منو بررسی کنید و اشکالاتشو بگیرید
دوم این که اون قسمت کد ک کامنت کردم عمل نمیکنه
البته خیلی هم مطمعن نیستم ک درست باشه.برای کم و زیاد کردن سرعت نوشتم.
سوم این که هرچقد سعی کردم نتونستم کاری کنم ک وقتی ازصفحه خارج شد دوباره برگرده از اول و این روند هی ادامه پیدا کنه
چهارم این ک اگه تابع
(glutIdleFunc(Display
رو توی main فراخوانی کنم
ماشین هم به طور کامل از تصویر میره بیرون
اما اگه فراخوانی نکنم یکم از ماشین میمونه توصفحه.اصلا این تابع چه کاری میکنه و لازمه ک باشه؟
خیلی خیلی ممنون میشم تو این موارد هم راهنماییم کنید.

Mahya1993
سه شنبه 03 تیر 1393, 11:33 صبح
#include<windows.h>
#include<GL/glut.h>
#include <math.h>
#include <time.h>


void init()
{
glClearColor(0,0,0,0);
glMatrixMode(GL_PROJECTION);
gluOrtho2D(0,200,0,200);
}
GLint i=0,j=30;
GLdouble k=0;
void Display()
{
for (k=0 ; k<20 ; k++){
static float fElect1 = 0.0;
glRotatef(fElect1, 0.0, 1.0, 0.0);
Sleep(200);
glTranslatef(k, 0.0, 0.0);
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1.0,0.0,0.0);
glBegin(GL_QUADS);
glVertex2i(i,j);
glVertex2i(i+15,j+30);
glVertex2i(i+45,j+30);
glVertex2i(i+60,j);
glEnd();
glFlush();
glutSwapBuffers();
glEnable(GL_POINT_SMOOTH);
glPointSize(35);
glBegin(GL_POINTS);
glColor3f(1,1,1);
glVertex2i(i+20,j);
glColor3f(1,1,1);
glVertex2i(i+40,j);
glEnd();
glFlush();


}
}
//void keyboard(unsigned char key, int x, int y)
//{
// switch (key) {
// case '1':
// Sleep(180);
// glutIdleFunc(Display);
//
// break;
//
// case '2':
// Sleep(290);
// glutIdleFunc(Display);
//
// break;
//
// case '3':
// exit(1);
// break;
// case 'X':
// exit(2);
//
//
// default:
// break;
// }
//
//
//}




int main(int argc,char **argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);


glutInitWindowSize(500,500);
glutInitWindowPosition(200,200);


glutCreateWindow("Moving Car");
init();


glutDisplayFunc(Display);
// glutKeyboardFunc(keyboard);
glutMainLoop();


return 0;
}

amin1softco
سه شنبه 03 تیر 1393, 15:56 عصر
اینو ببین شاید رستگار شدی

#include <windows.h>

#include<GL/glut.h>
#include <math.h>
#include <time.h>


void init()
{
glClearColor(0, 0, 0, 0);
glMatrixMode(GL_PROJECTION);
gluOrtho2D(0, 200, 0, 200);
}
GLint i = 0, j = 30,GLcounter=0;

GLdouble k = 3;
void Display()
{
//for (k = 0; k<20; k++){
GLcounter++;
if (GLcounter > 50) {
k = -k;
GLcounter = 0;
}
static float fElect1 = 0.0;
glRotatef(fElect1, 0.0, 1.0, 0.0);
Sleep(100);
glTranslatef(k, 0.0, 0.0);
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1.0, 0.0, 0.0);
glBegin(GL_QUADS);
glVertex2i(i, j);
glVertex2i(i + 15, j + 30);
glVertex2i(i + 45, j + 30);
glVertex2i(i + 60, j);
glEnd();

glEnable(GL_POINT_SMOOTH);
glPointSize(35);
glBegin(GL_POINTS);
glColor3f(1, 1, 1);
glVertex2i(i + 20, j);
glColor3f(1, 1, 1);
glVertex2i(i + 40, j);
glEnd();
glFlush();
glutSwapBuffers();


//}
}
void keyboard(unsigned char key, int x, int y)
{
switch (key) {
case '1':
Sleep(180);
if (k < 0) k = -k;
glutPostRedisplay();


break;

case '2':
Sleep(290);
if (k > 0) k = -k;
glutPostRedisplay();

break;

case '3':
exit(1);
break;
case 'X':
exit(2);


default:
break;
}


}




int main(int argc, char **argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);


glutInitWindowSize(500, 500);
glutInitWindowPosition(200, 200);


glutCreateWindow("Moving Car");
init();


glutDisplayFunc(Display);
glutKeyboardFunc(keyboard);
glutIdleFunc(Display);
glutMainLoop();


return 0;
}

fareshteh
پنج شنبه 05 تیر 1393, 11:31 صبح
یعنی سوال من جواب نداشت؟؟؟؟؟؟؟؟؟؟؟؟:گریه:

amin1softco
پنج شنبه 05 تیر 1393, 13:48 عصر
سلام خوبید دوستان من کمک می خوام
برنامه ای می خوام که با کلیک چپ در محل کلیک نقطه بگذاره با کلیک راست روی نقطه اون رو پاک کنه میشه راهنمایی کنید نمیدونم چطوری پاک کنم بعدم قبل از کلیک چپ یه نقطه میکشه که من نمی خوام بکشه

اگر بخواهیم راه حل منطقی ارائه بدیم شما باید یک کلاس شامل مختصات x,y درست کنید و در یک لیست ذخیره کنید و سپس در هر بار اجرا تابع نمایش صفحه را پاک و از اول این لیست را رسم کنید و در صورتی که مختصات کلیک راست شد مختصات را بگیرید و با اعضای لیست توسط یک حلقه چک کنید و در صورت تطابق عنصر مربوطه را پاک کنید .
راه حل سادش اینه که یک دایره با همون مشخصات و رنگ زمینه روش رسم بشه تا پاک بشه
راه حل دیگه استفاده از پیکینگ است
شوما هم ایشالا رستگاربشی

s-i-s-i
شنبه 07 تیر 1393, 17:46 عصر
سلام بچه ها
من یه پروژه با opengl دارم کسی هست که بهم کمک کنه و بگه چه کاری انجام میده؟
واسه 8 تیر 93 میخوام خواهش میکنم جوابم رو بدید
ممنون

amirpcp30
دوشنبه 09 تیر 1393, 16:17 عصر
سلام دوستان

ممنون از آموزشتون
من چند تا نقطه دادم که به هم متصل شه با GL_line_loop درسته اما وقتی با polygon میزنم شکلی که دارم اضلاعش کمتر میشه و اون جزئیات قبلی رو نداره - میخواستم بپرسم کدی هست مثل lines loop باشه اما داخلش هم رنگ کنه؟
این کد رو ببینید:
اگه line loop باشه خیلی با پولیگانش فرق میکنه الان loop هست میتونید پولیگان کنید منظورمو متوجه شید


#include<stdlib.h>
#include<GL\glut.h>


void pir(double x , double y)
{
glBegin(GL_LINE_LOOP);
glVertex2d(2895,2235);
glVertex2d(2880,2220);
glVertex2d(2865,2205);
glVertex2d(2865,2190);
glVertex2d(2850,2175);
glVertex2d(2835,2160);
glVertex2d(2820,2115);
glVertex2d(2805,2040);
glVertex2d(2790,2010);
glVertex2d(2775,1965);
glVertex2d(2760,1920);
glVertex2d(2745,1890);
glVertex2d(2715,1860);
glVertex2d(2685,1815);
glVertex2d(2700,1770);
glVertex2d(2670,1725);
glVertex2d(2655,1695);
glVertex2d(2640,1650);
glVertex2d(2625,1590);
glVertex2d(2610,1545);
glVertex2d(2625,1515);
glVertex2d(2610,1425);
glVertex2d(2610,1380);
glVertex2d(2610,1290);
glVertex2d(2625,1245);
glVertex2d(2640,1170);
glVertex2d(2655,1080);
glVertex2d(2655,1020);
glVertex2d(2685,945);
glVertex2d(2700,885);
glVertex2d(2715,810);
glVertex2d(2730,780);
glVertex2d(2745,720);
glVertex2d(2760,660);
glVertex2d(2775,600);
glVertex2d(2790,480);
glVertex2d(2805,360);
glVertex2d(2820,300);
glVertex2d(2835,210);
glVertex2d(2850,60);
glVertex2d(2850,0);
glVertex2d(3390,0);
glVertex2d(3660,0);
glVertex2d(4830,0);
glVertex2d(5100,0);
glVertex2d(5160,0);
glVertex2d(5175,30);
glVertex2d(5190,75);
glVertex2d(5205,90);
glVertex2d(5220,135);
glVertex2d(5235,180);
glVertex2d(5250,210);
glVertex2d(5265,255);
glVertex2d(5280,315);
glVertex2d(5295,360);
glVertex2d(5310,420);
glVertex2d(5325,465);
glVertex2d(5340,525);
glVertex2d(5355,570);
glVertex2d(5370,615);
glVertex2d(5385,660);
glVertex2d(5400,705);
glVertex2d(5415,750);
glVertex2d(5445,825);
glVertex2d(5445,885);
glVertex2d(5460,945);
glVertex2d(5475,1020);
glVertex2d(5490,1080);
glVertex2d(5505,1155);
glVertex2d(5520,1200);
glVertex2d(5535,1290);
glVertex2d(5550,1440);
glVertex2d(5550,1515);
glVertex2d(5535,1590);
glVertex2d(5520,1620);
glVertex2d(5505,1665);
glVertex2d(5490,1710);
glVertex2d(5490,1740);
glVertex2d(5490,1815);
glVertex2d(5475,1860);
glVertex2d(5460,1890);
glVertex2d(5445,1905);
glVertex2d(5175,1920);
glVertex2d(4800,1920);
glVertex2d(3345,1920);
glVertex2d(3165,2175);
glVertex2d(2940,2250);
glVertex2d(2910,2265);
glVertex2d(2895,2235);


glEnd();
}




void display(void)
{
glClear(GL_COLOR_BUFFER_BIT);

glColor3ub(180,54,65);
pir(0,0);


glFlush();
}



void main(int argc,char** argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);
glutInitWindowSize(402.75,450);
glutInitWindowPosition(100,100);
glutCreateWindow("Amir.S");
glClearColor(1,1,1,0);
glMatrixMode(GL_PROJECTION);
gluOrtho2D(0,8130,0,9000);
glutDisplayFunc(display);
glutMainLoop();
}


اگه از کد
glEnable(GL_CULL_FACE); در بعضی از همین کدهایی که خراب میشوند استفاده کنم قبل از پولیگان دقیقا چیزهای اضافه ای که میکشه رو بهم نشون میده ولی من دقیقا برعکس رو میخوام یعنی چیزهای اضافه نباشه فقط خودش باشه
اگه راهنمایی کنید ممنونتون میشم
با سپاس

raaamin
جمعه 25 مهر 1393, 18:17 عصر
با سلام و خسته نباشید
ممنون از مطالب مفیدتون .
من یه مشکل اساسی با برنامه dev C++‎‎‎ دارم اونم اینکه موقع اجرا کردن برنامه رسم دو خط به #include <GL/glut.h> گیر میده هر کاری گفتین کردم ولی باز درست نشد
لطفا کمک کنید فوری فوری

behzadkhan
جمعه 02 آبان 1393, 14:17 عصر
با سلام و خسته نباشید
ممنون از مطالب مفیدتون .
من یه مشکل اساسی با برنامه dev C++‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎ ‎‎‎‎‎‎‎‎‎‎ دارم اونم اینکه موقع اجرا کردن برنامه رسم دو خط به #include <GL/glut.h> گیر میده هر کاری گفتین کردم ولی باز درست نشد
لطفا کمک کنید فوری فوری

با سلام

با توجه به اینکه نویسنده هم به این مشکل برخورد کرده سعی در مرتفع کردن آن نموده و راه حل زیر را ارائه نموده:

نویسنده سعی می کنه تا نصب "اپن جی ال" در "دو سی پلاس پلاس" (نویسنده از devcpp-4.9.9.2 استفاده کرده) را حل کند:

ابتدا "اپن جی ال" را از لینک زیر دریافت کنید:
125360


سپس آن را از حالت فشرده خارج سازید:

125369


آنگاه دو فایل های glut.h و glut32.def را در مسیر نصب "دو سی پلاس پلاس" در پوشه Include\GL کپی کنید:

125368

حالا فایل های libglut.a و glut32.def را در مسیر نصب "دو سی پلاس پلاس" در پوشه Lib کپی کنید:

125367

و آخرین فایل با نام glut32.dll را در مسیر نصب ویندوز در پوشه Windows\System32 کپی نمایید:


125366

حالا کار نصب "اپن جی ال" به پایان رسیده است.
================================================== ================================================== ==========================

اکنون یک برنامه برای تست اجرا می کنیم.

ابتدا یک پروژه جدید با نام دلخواه ایجاد کنید:

125365

سپس یک "سورس فایل" با نام دلخواه به پروژه اضافه کنید:

125364

اکنون کد زیر را در "سورس فایل" کپی نمایید:


#include <GL/glut.h>


const int A = 500; /* length of a side of the monitor window */
const float B = 500; /* length of a side of the clipping rectangle */
const float C = 200; /* length of a side of the square the program draws */


void myinit(void)
{
glClearColor(0.7, 0.7, 0.7, 0.0); /* gray background */

glMatrixMode(GL_PROJECTION); /* In World coordinates: */
glLoadIdentity(); /* position the "clipping rectangle" */
gluOrtho2D( -B/2, B/2, -B/2, B/2);/* at -B/2, its right edge at +B/2, its bottom */
glMatrixMode(GL_MODELVIEW); /* edge at -B/2 and its top edge at +B/2 */
}


void display( void )
{

glClear(GL_COLOR_BUFFER_BIT); /* clear the window */

glMatrixMode(GL_MODELVIEW); /* The following coordinates are expressed */
glLoadIdentity(); /* in terms of World coordinates */


glBegin(GL_POLYGON) ; /* draw a filled polygon */
glColor3f ( 1.0, 0.3, 0.2); /* draw in light red */
glVertex2f( -C/2, -C/2 ); /* (x,y) */
glVertex2f( C/2, -C/2 ); /* (x,y) */
glVertex2f( C/2, C/2 ); /* (x,y) */
glVertex2f( -C/2, C/2 ); /* (x,y) */
glEnd();


glFlush(); /* send all commands */
}


int main(int argc, char** argv)
{
glutInit(&argc,argv);
glutInitWindowSize( A, A ); /* A x A pixel screen window */


glutInitDisplayMode( GLUT_RGB | GLUT_SINGLE);
glutCreateWindow("My Rectangle"); /* window title */
glutDisplayFunc(display); /* tell OpenGL main loop what */
myinit(); /* set attributes */


glutMainLoop(); /* pass control to the main loop */

return 0;
}




125363

سپس پروژه و سورس فایل را ذخیره نمایید.

حالا باید فایل زیر را به قسمت پارامتر پروژه اضافه کنید:

125362

../lib/libopengl32.a
../lib/libglu32.a
../lib/libglut32.a



و دیگر وقت اجرای پروژه می باشد.

125361

اکنون کار به پایان رسیده است.
================================================== ================================================
منابع:
1. http://chortle.ccsu.edu/Bloodshed/howToGL.html
2. http://www.3dbuzz.com/forum/threads/129976-OpenGL-GLUT-compiler-error

================================================== ===========================================
در صورت بروز مشکل پیام بگذارید.

با تشکر

raaamin
پنج شنبه 15 آبان 1393, 12:40 عصر
فقط یه مشکل هنگام دانلود فایل ضمیمه می نویسه :
درس مورد نظر وجود ندارد.
علت :
1-آدرس را اشتباه تایپ کرده اید.
2-این صفحه توسط مدیر سایت حذف شده است.
3- هنگام ایجاد گفتگوی جدید از عناوین نامناسب استفاده شده است.

behzadkhan
پنج شنبه 15 آبان 1393, 16:18 عصر
با سلام

مشکل برطرف شد.

با تشکر

hilda.f
یک شنبه 16 آذر 1393, 16:46 عصر
این کدهارو ببینید
یکم کدنویسیش کلک رشتی داره اما مهم خروجیه :)
مشکلاتش:
رندوم رو به صورت سراسری میخوام تعریف کنم که دو تا تابع ازش استفاده کنن اما مشکل دار میشه
میخوام هروقت موس رفت رو دایره که به صورت رندوم ایجاد میشه رنگش عوض شه که خیلی دیر این اتفاق میفته
لطفا راهنماییم کنید.خیلی وقت ندارم :)
#include <stdlib.h>
#include <GL\glut.h>
#include<math.h>
bool flag=0;
int counter=0;
int i=rand()%5+1;
void init (void)
{
glClearColor (0.0, 0.0, 0.0, 0.0);
glMatrixMode(GL_PROJECTION);
gluOrtho2D(0.0, 200.0, 0.0, 150.0);
}
//namayeshe moraba'a ha
void Display(void)
{

GLint a[4][2]={{15,140},{65,140},{65,90},{15,90}};
GLint b[4][2]={{75,140},{125,140},{125,90},{75,90}};
GLint c[4][2]={{135,140},{185,140},{185,90},{135,90}};
GLint d[4][2]={{50,75},{100,75},{100,25},{50,25}};
GLint e[4][2]={{110,75},{160,75},{160,25},{110,25}};




glBegin(GL_LINE_LOOP);
glColor3f(0.0, 2.0, 0.0);
glVertex2iv(a[0]);
glVertex2iv (a[1]);
glVertex2iv (a[2]);
glVertex2iv (a[3]);
glEnd();

glBegin(GL_LINE_LOOP);
glColor3f(0.0, 2.0, 0.0);
glVertex2iv(b[0]);
glVertex2iv (b[1]);
glVertex2iv (b[2]);
glVertex2iv (b[3]);
glEnd();

glBegin(GL_LINE_LOOP);
glColor3f(0.0, 2.0, 0.0);
glVertex2iv(c[0]);
glVertex2iv (c[1]);
glVertex2iv (c[2]);
glVertex2iv (c[3]);
glEnd();

glBegin(GL_LINE_LOOP);
glColor3f(0.0, 2.0, 0.0);
glVertex2iv(d[0]);
glVertex2iv (d[1]);
glVertex2iv (d[2]);
glVertex2iv (d[3]);
glEnd();


glBegin(GL_LINE_LOOP);
glColor3f(0.0, 2.0, 0.0);
glVertex2iv(e[0]);
glVertex2iv (e[1]);
glVertex2iv (e[2]);
glVertex2iv (e[3]);
glEnd();

glFlush();
glutSwapBuffers();
}


//penhan shodan dayere ha
void hide(int value)
{

glClear(GL_COLOR_BUFFER_BIT );

}

//emtiaz bandi
void end(int value)
{
if(counter>5)
{
glLoadIdentity();
glClear(GL_COLOR_BUFFER_BIT );
}

//else if(counter<5)
//{
// glLoadIdentity();
//glClear(GL_COLOR_BUFFER_BIT );
//}

}

//namayeshe randome dayere ha
void timer_function( int value)
{



if(i==1)
{
glClear(GL_COLOR_BUFFER_BIT);
if (flag) glColor3f(0, 1, 0);
else glColor3f(1, 1, 1);
glPushMatrix();
glTranslatef(40,115.0,0);
GLUquadricObj *circle = gluNewQuadric ();
gluQuadricDrawStyle (circle, GLU_FILL);
gluDisk (circle,0,25,20000,1);
gluDeleteQuadric(circle);
glPopMatrix();
glutSwapBuffers();
}

else if(i==2)
{
glClear(GL_COLOR_BUFFER_BIT);
if (flag) glColor3f(0, 1, 0);
else glColor3f(1, 1, 1);
glPushMatrix();
glTranslatef(100,115.0,0.0);
GLUquadricObj *circle = gluNewQuadric ();
gluQuadricDrawStyle (circle, GLU_FILL);
gluDisk (circle,0,25,20000,1);
gluDeleteQuadric(circle);
glPopMatrix();
glutSwapBuffers();
}


else if(i==3)
{
glClear(GL_COLOR_BUFFER_BIT);
if (flag) glColor3f(0, 1, 0);
else glColor3f(1, 1, 1);
glPushMatrix();
glTranslatef(160,115,0.0);
GLUquadricObj *circle = gluNewQuadric ();
gluQuadricDrawStyle (circle, GLU_FILL);
gluDisk (circle,0,25,20000,1);
gluDeleteQuadric(circle);
glPopMatrix();
glutSwapBuffers();
}



else if(i==4)
{
glClear(GL_COLOR_BUFFER_BIT);
if (flag) glColor3f(0, 1, 0);
else glColor3f(1, 1, 1);
glPushMatrix();
glTranslatef(75,50,0.0);
GLUquadricObj *circle = gluNewQuadric ();
gluQuadricDrawStyle (circle, GLU_FILL);
gluDisk (circle,0,25,20000,1);
gluDeleteQuadric(circle);
glPopMatrix();
glutSwapBuffers();
}



else if(i==5)
{
glClear(GL_COLOR_BUFFER_BIT);
if (flag) glColor3f(0, 1, 0);
else glColor3f(1, 1, 1);
glPushMatrix();
glTranslatef(135,50,0.0);
GLUquadricObj *circle = gluNewQuadric ();
gluQuadricDrawStyle (circle, GLU_FILL);
gluDisk (circle,0,25,20000,1);
gluDeleteQuadric(circle);
glPopMatrix();
glutSwapBuffers();
}

glutTimerFunc(100,hide,0);
glutTimerFunc(100,timer_function,0);
}


//taghire range dayere ha
void myMotionFunc( int x, int y )
{
switch(i)
{
case(1):
{
if(sqrt(double(pow(float(abs(40-x)),2)+pow(float(abs(115-y)),2)))>100) flag=0;
else {flag=1; counter++;}
}
break;
case(2):
{
if(sqrt(double(pow(float(abs(100-x)),2)+pow(float(abs(115-y)),2)))>100) flag=0;
else {flag=1; counter++;}
}
break;

case(3):
{
if(sqrt(double(pow(float(abs(160-x)),2)+pow(float(abs(115-y)),2)))>100) flag=0;
else {flag=1; counter++;}
}
break;

case(4):
{
if(sqrt(double(pow(float(abs(75-x)),2)+pow(float(abs(50-y)),2)))>100) flag=0;
else {flag=1; counter++;}
}
break;

case(5):
{
if(sqrt(double(pow(float(abs(135-x)),2)+pow(float(abs(50-y)),2)))>100) flag=0;
else {flag=1; counter++;}
}
break;


}

}




//mohasebeye emtiaz
//void myMouse(int button, int state, int x, int y)
//{
//
// if(button == GLUT_LEFT_BUTTON && state == GLUT_DOWN)
// {
// if(flag)
// counter++;
//
// }
// glutPostRedisplay();
//}


int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize (400, 300);
glutInitWindowPosition (500, 500);
glutCreateWindow ("Dash");
init ();
glutDisplayFunc (Display);
glutIdleFunc (Display);
glutTimerFunc(100,timer_function,0);
glutTimerFunc(40000,end,0);
//glutMouseFunc(myMouse);
glutPassiveMotionFunc (myMotionFunc);
glutMainLoop();

}

hilda.f
دوشنبه 17 آذر 1393, 19:53 عصر
تاپیک جداگونه میزنم کسی نیست.تو تاپیک موجود پست میزنم بازم کسی نیست

یکی هم تو رسیدن به رستگاری کمکم کنه ممنون میشم
لطفا

peperojj
چهارشنبه 10 دی 1393, 00:25 صبح
سلام من به نقاط برای یه شکل پیچیده احتیاج دارم ترجیحا 3 بعدی خیلی لازم دارم
ممنون

TAMIGI
چهارشنبه 17 دی 1393, 21:56 عصر
استفاده از ارایه در مختصات و رسم شکل ها .
تا حالا از ارایه در ذخیره نقاط و مختصات استفاده نشده
یه مثال ساده که بقیه دوستان مختصات و نقاط اشکالشون رو از این قاعده استفاده کنند .

#include <iostream>
#include <gl/glut.h>
using namespace std;
GLfloat verts[4][2] = { 0.3, -0.4, 0.5, 0.5, -0.5, 0.5, -0.7, -0.3 };
GLfloat colors[4][3] = { 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1 };
GLenum mode = GL_POINTS;
void init()
{
gluOrtho2D(-3, 3, -3, 3);
glClearColor(0.5, 0.5, 0.5, 1.0);

}
void display()
{

glClear(GL_COLOR_BUFFER_BIT);
glBegin(mode);
for (int i = 0; i < 4; i++)
{
glColor3fv(colors[i]);
glVertex2fv(verts[i]);
}
glEnd();
glFlush();
}
void keyboard(unsigned char key, int x, int y)
{
switch (key)
{
case '0':
mode = GL_POINTS;
break;
case '1':
mode = GL_LINES;
break;
case '2':
mode = GL_TRIANGLES;
break;
case '3':
mode = GL_QUADS;
break;
case '4':
mode = GL_LINE_LOOP;
break;
}
glutPostRedisplay();
}
void main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitWindowSize(700, 400);
glutInitWindowPosition(100, 200);
glutCreateWindow("First Open Gl to menu");
init();
glutDisplayFunc(display);
glutKeyboardFunc(keyboard);
glutMainLoop();

}

TAMIGI
چهارشنبه 17 دی 1393, 21:59 عصر
سوال .
تعیین نقاط داخلی و خارجی یه چند ضلعی دلخواه رو می شه نوشت
هر چه قدر کار کردم نتونستم درست جواب بگیرم

PareParvaz77
جمعه 25 اردیبهشت 1394, 18:04 عصر
سلام ....میشه این برنامه رو به من توضیح بدین؟؟؟
ممنون میشم

#include <windows.h>
#include <gl/Gl.h>
#include <gl/glut.h>

int flag=0;
int rx,ry;
int xw,yw,selector=4,selector2=3;
float rr,gg,bb,ff=4.0;

//<<<<<<<<<<<<<<<<<<<<<<<< myDisplay >>>>>>>>>>>>>>>>>
void myDisplay(void)
{

glColor3f(0.670f, 0.776f, 0.878f);
glRectf(0,0,xw,40);

if(ry<=40)
{ if(rx>=10 && rx<=30)
{
selector=1;
rr=1;
gg=0;
bb=0;
}
if(rx>=40 && rx<=60)
{
selector=2;
rr=0;
gg=1;
bb=0;
}
if(rx>=70 && rx<=90)
{
selector=3;
rr=0;
gg=0;
bb=1;
}
if(rx>=100 && rx<=120)
{
selector=4;
rr=0;
gg=0;
bb=0;
}
if(rx>=155 && rx<=172)
{
selector2=1;
ff=8;
}
if(rx>=173 && rx<=189)
{
selector2=2;
ff=6;
}
if(rx>=189 && rx<=203)
{
selector2=3;
ff=4;
}
if(rx>=204 && rx<=215)
{
selector2=4;
ff=2;
}
}


if(selector==1)
{
glColor3f(0.70f, 0.70f, 0.70f);
glRectf(5,5,35,35);
}
if(selector==2)
{
glColor3f(0.70f, 0.70f, 0.70f);
glRectf(35,5,65,35);
}
if(selector==3)
{
glColor3f(0.70f, 0.70f, 0.70f);
glRectf(65,5,95,35);
}
if(selector==4)
{
glColor3f(0.70f, 0.70f, 0.70f);
glRectf(95,5,125,35);
}
if(selector2==1)
{
glColor3f(0.70f, 0.70f, 0.70f);
glRectf(155,11,172,29);
}
if(selector2==2)
{
glColor3f(0.70f, 0.70f, 0.70f);
glRectf(173,11,189,29);
}
if(selector2==3)
{
glColor3f(0.70f, 0.70f, 0.70f);
glRectf(189,11,203,29);
}
if(selector2==4)
{
glColor3f(0.70f, 0.70f, 0.70f);
glRectf(203,11,215,29);
}


glColor3f(1.0f, 0.0f, 0.0f);
glRectf(10,10,30,30);

glColor3f(0.0f, 1.0f, 0.0f);
glRectf(40,10,60,30);

glColor3f(0.0f, 0.0f, 1.0f);
glRectf(70,10,90,30);

glColor3f(0.0f, 0.0f, 0.0f);
glRectf(100,10,120,30);

glRectf(150,0,151,40);

glRectf(160,16,168,24);
glRectf(178,17,184,23);
glRectf(194,18,198,22);
glRectf(208,19,210,21);

glColor3f(rr, gg, bb);
glPointSize(ff);


if (flag==1 && ry>40)
{
glBegin(GL_POINTS);
glVertex2i(rx, ry);
glEnd();
}
glFlush();
}

void myMouse(int button, int state, int x, int y)
{
if(button == GLUT_LEFT_BUTTON && state == GLUT_DOWN)
{
flag=1;
rx=x;
ry=yw-y;
}
glutPostRedisplay();
}

void myMouseMotion(int x, int y)
{
flag=1;
rx=x;
ry=yw-y;
glutPostRedisplay();
}


void myKeyboard(unsigned char ch, int x, int y)
{

switch (ch)
{
case 'e':
exit (-1);

case 'a':
flag=0;
glClear(GL_COLOR_BUFFER_BIT); // clear the screen
break;
}

glutPostRedisplay();
}



void ChangeSize(GLsizei w, GLsizei h)
{

yw=h;
xw=w;



glClearColor(1.0,1.0,1.0,0.0);
// glColor3f(0.0f, 0.0f, 0.0f);

glClear(GL_COLOR_BUFFER_BIT);
glMatrixMode(GL_PROJECTION);

glLoadIdentity();

glViewport(0,0,w,h);

gluOrtho2D(0.0, w, 0.0, h);

}



//<<<<<<<<<<<<<<<<<<<<<<<< main >>>>>>>>>>>>>>>>>>>>>>
void main(int argc, char** argv)
{

glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);

glutInitWindowSize(640,480);

glutCreateWindow("board");

glutDisplayFunc(myDisplay);

glutReshapeFunc(ChangeSize);

glutMouseFunc(myMouse);

glutKeyboardFunc(myKeyboard);

glutMotionFunc (myMouseMotion);

glutMainLoop();
}

reza hafezi
پنج شنبه 15 آبان 1399, 20:49 عصر
سلام کسی کد رسم مثلث و حرکت دادن آن را دارد