آموزش تخصصی ویژوال بیسیک 6

مسائل مربوط به برنامه نویسی ویژوال بیسیک 6

آموزش تخصصی ویژوال بیسیک 6

مسائل مربوط به برنامه نویسی ویژوال بیسیک 6

آموزش opengl قسمت چهارم

در جسه چهارم آموزش OpenGL یاد میگیرین که :

۱- اشیای خود را با چند رنگ مختلف رسم کنین. (برای مثال گوشه بالا سمت راست آبی و نیمه پایینی مربع قرمز باشد و وسط مربع نیز ترکیبی از این دو رنگ.)

۲- اشیای سه بعدی رسم کنین.

۳- چگونگی متحرک سازی اشیای سه بعدی.

-------------------------------------------------------------------------------------------------------------------

۱- رنگ آمیزی اشیا:

یکی از قابلیت های مهم OpenGL ترکیب رنگ های مختلف در یک شئ است. که در این کار هر راس از شئ رنگ متفاوتی میگیرد. برای این کار تابعی وجود دارد که نام آن glShadeModel است . این تابع به OpenGL میگوید که اشیای ما فقط یک رنگ بگیرند یا با چند رنگ مختلف رنگ آمیزی شوند. این تابع دو ثابت دارد:

۱: smFlat فقط یک رنگ میتوانیم به شئ اختصاص دهیم.

۲: smSmooth می توانیم ترکیبی از رنگها را به شی اختصاص دهیم.

در حالت پیش فرض مقدار تابع glShadeModel برابر smFlat است که ما در این صورت فقط یک رنگ میتوانیم به شئ مان اختصاص دهیم.

باید همیشه این نکته را توجه داشته باشید که تابع glShadeModel قبل از بلوک glBegin / glEnd بیاید که در غیر این صورت خطا رخ میدهد.

در مثال زیر یک مثلث با رنگ های قرمز و سبز و آبی رسم میکنیم:

glShadeModel smSmooth

glBegin bmTriangles

glcolor3f 1,0,0

glVertex2f 0.5, 0

glColor3f 0 , 1 , 0

glVertex2f 0 , 0.5

glcolor3f 0 , 0 , 1

glVertex2f -0.5 , 0

glEnd

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

حالا برای تمرین مقدار تابع glShadeModel را برابر smFlat قرار دهید و نتیجه رو نگاه کنین.


--------------------------------------------------------------------------------

مهمترین بخش آموزش OpenGL :

۲- رسم اشیای سه بعدی:

برای رسم اشیای سه بعدی همانند رسم اشیای ۲ بعدی عمل میکنیم . یعنی اینکه با فراخوانی بلوک glBegin .../.../glEnd میتوانیم اشیای سه بعدی رسم کنیم. رسم اشیای سه بعدی بسیار بسیار ساده و آسان است و برای برنامه نویسان OpenGL لذت بخش ترین بخش برنامه نویسی است. ما برای رسم اشیای سه بعدی به جای استفاده از تابع glVertex2f از توابع glVertex3f و یا glVertex4f استفاده می کنیم . مطمئنم که فهمیدید . بله در تابع glVertex2f همان طور که از شماره ۲ آن معلوم است توانایی رسم اشیای ۲ بعدی را دارد اما توابع glVertex3f , glVertex4f بر اساس شماره آنها توانایی رسم اشیای سه بعدی را دارند.

شکل کلی تابع glVertex3f به صورت زیر است:

glVertex3f X , Y , Z

که در این تابع x و y همان مختصات معمولی رئوس شئ هستند ولی z عمق شی را نشان می دهد.

مختصات اشیای سه بعدی:

کسانی که برنامه نویس هستند قطعا مختصات سه بعدی رو هم بلدند اما مختصات سه بعدی مختصاتی فرضی است و فقط با مغز انسان قابل درک است. در مثال بعد یک مثلث سه بعدی رسم میکنم:

مثال: رسم مثلث ۳ بعدی:

glShadeModel smSmooth

glBegin bmTriangles

glColor3f 1,0,0

glVertex3f 0.5 , 0, 0

glColor3f 0,1,0

glVertex3f 0 , 0.3 , 0

glColor3f 0,0,1

glVertex3f -0.5 , 0 , 0

glEnd

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

ممکنه بعد از اجرای برنامه با خودتون بگین که ما یک مثلث سه بعدی رسم کردیم ولی چرا از یک بعد قابل روئیت بود ! برای اینکه از تمامی ابعاد و از همه طرف مثلث رو ببینین باید اون رو متحرک کنین.(یعنی حرکت بدین.)


--------------------------------------------------------------------------------

۳- متحرک کردن اشیای سه بعدی:

برای متحرک کردن اشیای سه بعدی OpenGl تابعی دارد که نام آن glRotatef است . تابع glRotateF دارای ۴ پارامتر است و شکل کلی آن به این صورت است:

مختصات Z , مختصات Y , مختصات X , سرعت حرکت glRotatef

در این تابع هر چه مقدار سرعت حرکت بیشتر باشد شئ مورد نظر ما با سرعت بیشتری حرکت میکند .

در مثال زیر یک مثلث سه بعدی با سه رنگ متفاوت را به حرکت در می آوریم:

glRotatef 2 , 0.5 , 0.5 , 0.5

glShadeModel smSmooth

glBegin bmTriangles

glColor3f 1,0,0

glVertex3f 0.5,0,0

glColor3f 0,1,0

glVertex3f 0,0.3,0

glColor3f 0,0,1

glColor3f -0.5,0,0

glEnd

مثال بالا رو هم حتما اجرا کنین و نتیجه رو ببینین.

همون طور که در مثال بالا مشاهده می کنین تابع glRotatef نیز باید در قبل و خارج از بلوک glBegin/glEnd باشد که در غیر این صورت...

--------------------------------------------------------------------------------

جلسه چهارم آموزش OpenGL نیز به پایان رسید ولی کلاغه به خونش نرسید. و کسی هم نظر نداد.

امیدوارم تا جلسه آینده خوب تمرین کنین

آموزش opengl قسمت پنجم

خوب میرویم سر آموزش قسمت پنجم OpenGL

در این جلسه یاد میگیرین که:

۱- رسم مکعب:

۲- رسم کره:

۳- رسم منشور و اهرام( مکعب مثلث):

۴- رسم استوانه ( یا دیسک):

در این جلسه چگونگی رسم مکعب و کره و اهرام را میدم و رسم استوانه را برای جلسه بعد . چرا که رسم استوانه و دیسک کاملا با بقیه مکعب ها فرق داره و مستلزم اختصاص دادن وقت بیشتری برای آموزش آن داره پس برای رسم مکعب خودتون رو آماده کنین.



۱- رسم مکعب (مکعب مربع و مستطیل):

رسم مکعب های سه بعدی بسیار ساده است و ما با استفاده از بلوک glBegin/glEnd مکعب های سه بعدی خودمان را رسم می کنیم. برای اینکه چگونگی رسم مکعب های سه بعدی رو یاد بگیرین خطوط زیر را با دقت بخونین:

می دونید که مربع دارای چهار راس است . همچنین از چهار پاره خط تشکیل شده است. یک مکعب مربع یا مستطیل از شش تا چهار ضلعی تشکیل شده است . همچنین این شش تا چهار ضلعی دارای ۱۲ پاره خط است . برای درک بهتر شما یک مثال میزنم تا بهتر بفهمین.

در مثال زیر با استفاده از رسم شش تا مربع یک مکعب مستطیل میسازیم:

glShadeModel smSmooth

glRotatef 1,0.5,0.3,0.2

glBegin bmQuads
glColor3f 0#, 1#, 0#
glVertex3f 0.5, 0.5, -0.5
glVertex3f -0.5, 0.5, -0.5
glVertex3f -0.5, 0.5, 0.5
glVertex3f 0.5, 0.5, 0.5
glColor3f 1#, 0.5, 0#
glVertex3f 0.5, -0.5, 0.5
glVertex3f -0.5, -0.5, 0.5
glVertex3f -0.5, -0.5, -0.5
glVertex3f 0.5, -0.5, -0.5
glColor3f 1#, 0#, 0#
glVertex3f 0.5, 0.5, 0.5
glVertex3f -0.5, 0.5, 0.5
glVertex3f -0.5, -0.5, 0.5
glVertex3f 0.5, -0.5, 0.5
glColor3f 1#, 1#, 0#
glVertex3f 0.5, -0.5, -0.5
glVertex3f -0.5, -0.5, -0.5
glVertex3f -0.5, 0.5, -0.5
glVertex3f 0.5, 0.5, -0.5
glColor3f 0#, 0#, 1#
glVertex3f -0.5, 0.5, 0.5
glVertex3f -0.5, 0.5, -0.5
glVertex3f -0.5, -0.5, -0.5
glVertex3f -0.5, -0.5, 0.5
glColor3f 1#, 0#, 1#
glVertex3f 0.5, 0.5, -0.5
glVertex3f 0.5, 0.5, 0.5
glVertex3f 0.5, -0.5, 0.5
glVertex3f 0.5, -0.5, -0.5
glEnd

مثال بالا رو اجرا کنین و نتیجه رو نگاه کنین.


--------------------------------------------------------------------------------

۲- رسم کره:

رسم کره نیز همانند رسم دایره است و هیچ فرقی ندارد . دایره ای را که در جلسات پیش رسم کردیم سه بعدی بود اما به علت اینکه متحرک نبود از همه طرف قابل دیدن نبود .

در مثال زیر یک کره به شعاع ۵/۰ رسم میکنیم.

Dim Q

Q = gluNewQuadric

glColor4f 1 , 1 , 0 , 1

gluQuadricDrawStyle Q , qdsLine

glSphere Q , 0.5 , 25 , 25

شاید برای شما این سوال پیش آید که آیا تابع glColor4f هم وجود دارد؟ باید در پاسخ شما بگم که بله البته که وجود داره. شکل کلی تابع glColor4f به صورت زیر است:

مقدار آلفا , رنگ آبی , رنگ سبز , رنگ قرمز glColor4f

در تابع بالا مقدار آلفا رقیق یا غلیظ بودن سطح رو مشخص می کنه. به عبارت دیگه مقدار نوری که پاشیده می شود از سطح(شئ) بگذرد یا نگذرد. (در جلسات بعدی چگونگی نورپردازی نیز آموزش داده می شود.)


--------------------------------------------------------------------------------

این قسمت هم به پایان رسید. و اما تمرین این جلسه شما:
۱- سعی کنین که یک مکعب متوازی الاضلاع رسم کنین و اون رو متحرک کنین.

۲- قسمت های اصلی کره زمین ( پوسته و گوشته و هسته) را با رسم سه کره شبیه سازی کنین و سعی کنین هر قسمت یک رنگ داشته باشد.(مثلا پوسته آبی , گوشته نارنجی , هسته قرمز)

یه وقت برای انجام تمرین ها تنبلی نکنین ها !
اگه احیانآ مشکلی پیش اومد در قسمت نظرات بگو . حتما جوابتو می گیری.

آموزش open gl قسمت پنجم

خوب میرویم سر آموزش قسمت پنجم OpenGL

در این جلسه یاد میگیرین که:

۱- رسم مکعب:

۲- رسم کره:

۳- رسم منشور و اهرام( مکعب مثلث):

۴- رسم استوانه ( یا دیسک):

در این جلسه چگونگی رسم مکعب و کره و اهرام را میدم و رسم استوانه را برای جلسه بعد . چرا که رسم استوانه و دیسک کاملا با بقیه مکعب ها فرق داره و مستلزم اختصاص دادن وقت بیشتری برای آموزش آن داره پس برای رسم مکعب خودتون رو آماده کنین.



۱- رسم مکعب (مکعب مربع و مستطیل):

رسم مکعب های سه بعدی بسیار ساده است و ما با استفاده از بلوک glBegin/glEnd مکعب های سه بعدی خودمان را رسم می کنیم. برای اینکه چگونگی رسم مکعب های سه بعدی رو یاد بگیرین خطوط زیر را با دقت بخونین:

می دونید که مربع دارای چهار راس است . همچنین از چهار پاره خط تشکیل شده است. یک مکعب مربع یا مستطیل از شش تا چهار ضلعی تشکیل شده است . همچنین این شش تا چهار ضلعی دارای ۱۲ پاره خط است . برای درک بهتر شما یک مثال میزنم تا بهتر بفهمین.

در مثال زیر با استفاده از رسم شش تا مربع یک مکعب مستطیل میسازیم:

glShadeModel smSmooth

glRotatef 1,0.5,0.3,0.2

glBegin bmQuads
glColor3f 0#, 1#, 0#
glVertex3f 0.5, 0.5, -0.5
glVertex3f -0.5, 0.5, -0.5
glVertex3f -0.5, 0.5, 0.5
glVertex3f 0.5, 0.5, 0.5
glColor3f 1#, 0.5, 0#
glVertex3f 0.5, -0.5, 0.5
glVertex3f -0.5, -0.5, 0.5
glVertex3f -0.5, -0.5, -0.5
glVertex3f 0.5, -0.5, -0.5
glColor3f 1#, 0#, 0#
glVertex3f 0.5, 0.5, 0.5
glVertex3f -0.5, 0.5, 0.5
glVertex3f -0.5, -0.5, 0.5
glVertex3f 0.5, -0.5, 0.5
glColor3f 1#, 1#, 0#
glVertex3f 0.5, -0.5, -0.5
glVertex3f -0.5, -0.5, -0.5
glVertex3f -0.5, 0.5, -0.5
glVertex3f 0.5, 0.5, -0.5
glColor3f 0#, 0#, 1#
glVertex3f -0.5, 0.5, 0.5
glVertex3f -0.5, 0.5, -0.5
glVertex3f -0.5, -0.5, -0.5
glVertex3f -0.5, -0.5, 0.5
glColor3f 1#, 0#, 1#
glVertex3f 0.5, 0.5, -0.5
glVertex3f 0.5, 0.5, 0.5
glVertex3f 0.5, -0.5, 0.5
glVertex3f 0.5, -0.5, -0.5
glEnd

مثال بالا رو اجرا کنین و نتیجه رو نگاه کنین.


--------------------------------------------------------------------------------

۲- رسم کره:

رسم کره نیز همانند رسم دایره است و هیچ فرقی ندارد . دایره ای را که در جلسات پیش رسم کردیم سه بعدی بود اما به علت اینکه متحرک نبود از همه طرف قابل دیدن نبود .

در مثال زیر یک کره به شعاع ۵/۰ رسم میکنیم.

Dim Q

Q = gluNewQuadric

glColor4f 1 , 1 , 0 , 1

gluQuadricDrawStyle Q , qdsLine

glSphere Q , 0.5 , 25 , 25

شاید برای شما این سوال پیش آید که آیا تابع glColor4f هم وجود دارد؟ باید در پاسخ شما بگم که بله البته که وجود داره. شکل کلی تابع glColor4f به صورت زیر است:

مقدار آلفا , رنگ آبی , رنگ سبز , رنگ قرمز glColor4f

در تابع بالا مقدار آلفا رقیق یا غلیظ بودن سطح رو مشخص می کنه. به عبارت دیگه مقدار نوری که پاشیده می شود از سطح(شئ) بگذرد یا نگذرد. (در جلسات بعدی چگونگی نورپردازی نیز آموزش داده می شود.)


--------------------------------------------------------------------------------

این قسمت هم به پایان رسید. و اما تمرین این جلسه شما:
۱- سعی کنین که یک مکعب متوازی الاضلاع رسم کنین و اون رو متحرک کنین.

۲- قسمت های اصلی کره زمین ( پوسته و گوشته و هسته) را با رسم سه کره شبیه سازی کنین و سعی کنین هر قسمت یک رنگ داشته باشد.(مثلا پوسته آبی , گوشته نارنجی , هسته قرمز)

یه وقت برای انجام تمرین ها تنبلی نکنین ها !
اگه احیانآ مشکلی پیش اومد در قسمت نظرات بگو . حتما جوابتو می گیری.