بخشی از مقاله

 




دراين مكان كه نمايندگي تهيه وتوزيع رسانه هاي تصويري ونرم افزارهاي

كامپيوتري بود كارهاي زياد ودرهمي انجام مي دادم و هر روزه بنابر خواسته ي

مدير آنجا كاري را انجام مي دادم، كارهايي هم چون فروش نرم افزار درداخل

فروشگاه به مشتريان گذري كه بنابه دخواست مشتريان آن نرم افزار يا فيلمي را

كه مد نظر داشتند را درخواست كرده وبه آن ها تحويل مي دادم.

گاه اين مشتريان راجع به نرم ازارها سوالاتي پرسيده كه من تا حد امكان وتوانايي

آن ها را راهنمايي مي كردم و طريقه نصب نمدن آن نرم ازار را به آن ها آموزش

مي دادم، وگاه نيز بعضي از مشتريان نرم افزارهايي خاص را سفارش مي دادند

كه بايد اين نرم افزار يا فيلم از جايي ديگر تهيه مي شد جهت اين كار نرم افزار يا

فيلم درخواستي را در داخل كامپيوتر موجود ثبت كرده وبعدا به نمايندگي كلي

ارسال مي نموديم تا نمايندگي در اولين فرصت اين فيلم و يا نرم افزار را ارسال

كرده وما به مشتريان تحويل مي داديم.

يك سري از نرم افزارهاي درخواستي را مي توانستيم از اينترنت دانلود كنيم كه در

اين صورت وارد اينترنت شده ونرم افزار مربوطه را جستجو كرده و به صورت

هاي بسته هاي آماده به مشتريان تحويل مي داديم.

يك سري ديگر از مشتريان خودشان فروشنده فيلم ها و نرم افزارها بودند كه

قضيه ي اين مشتريان با مشتريان قبلي فرق داشت چون اين مشتريان به صورت

انبوه نرم افزار وفيلم را خريداري مي كردند كه در اين صورت مي بايست اين

نرم افزارها وفيلم هاي مربوطه و مورد در خواست مشتري ليست شده ودر اختيار

او قرار گيرد تا به انتخاب خود نرم افزار ها وفيلم هاي مورد نيازخود را انتخاب

 

كرده و سفارش دهد، ما نيز اين نرم افزارها و فيلم ها را برداشته وبه تعداد مورد

نياز او در اختيارش قرار مي داديم اما قبل از تحويل اين نرم افزارها وفيلم ها مي

بايست تعداد واسم آن ها در بانك اطلاعاتي ثبت مي شد.

يك مشتري ممكن بود كه از نرم افزار خاص تعداد زيادي را بر دارد واز يك نرم

افزاري ديگر تعدادي كمتري را بردارد كه در نتيجه بايد اين اعداد به دقت در بانك

اطلاعاتي ثبت و ذخيره مي شد، قيمت هر كدام از اين نرم افزارها وفيلم ها قبلا در

بانك اطلاعاتي نيز ثبت شده بود وبه اين ترتيب قيمت كلي فروش به آن مشتري

تهيه و چاپ مي شد وبه مشتري داده مي شد.

كار ديگري كه در اين مكان انجام مي دادم تهيه وپخش پوسترهايي در مورد فيلم ها

ونرم افزار هاي موجود در مغازه بود كه مي بايست كل نرم افزارها وفيلم هاي

موجود را در صفحه اي هم راه با قيمت هايشان تايپ كرده وپرينت گرفت ودر

داخل مركزهاي فروش به مشتريان عرضه كرد.


نوعي ديگر از پوسترها فقط مخصوص يك فيلم ويا يك نرم افزار خاص بود كه

براي تهيه اين پوسترها مي بايست اطلاعات كاملي در مورد آن نرم افزار را در

برگه مربوطه تايپ كرده وعكس هاي مورد نظر را با نرم افزاري خاص

(فتوشاپ) برش داده ودر جاي مخصوص به خود قرار داد وبعد از كامل شدن اين

پوسترها مي بايست آن ها را بر روي كاغذ براق چاپ نمود.

در اين فروشگاه نيز نرم افزارهاي مربوطه ومورد نياز براي كار وثبت اطلاعات

 

را برروي سيستم نصب مي نمودم.

چون نرم افزاره وفيلم ها هر روزه در حال تغيير و تحول بودند بانك اطلاعاتي نيز

مي بايست هر روزه عوض مي شد وتغيير وتحول مي يافت و هر نرم افزاري كه

قبلا در بانك بوده والان در مغازه نمانده است مي بايست خذف ونرم افزارها وفيلم

 

هاي جديد وارد شده مي بايست در داخل بانك اطلاعاتي درج مي شد، اين كار

هرروزه صبح انجام مي شد كل اطلاعات نرم افزارها وفيلم هاي جديد از قبيل نام

نرم افزاريا فيلم، قيمت ، ورژن و... مي بايست بادقت درج مي شد.

بعضي از كارمندان كه با كامپيوتر ونرم افزار آشنايي زيادي نداشتند را آموزش

مي دادم به گونه اي كه بتوانند با كامپيوتر كار كرده واز نرم افزارهاي مورد

نيازبه خوبي استفاده كنند.

از اينترنت نرم افزارها جالب ومورد احتياج را به حالتي گلچين كرده وبه صورت

بسته هايي در داخل "سي دي" يا "دي وي دي" در اختيار مشتريان قرار مي داديم.

هم چنين در اين دوره تحقيقاتي در مورد OpenGl در Visual Basic براي اين

موسسه انجام دادم چون اين موسسه مي خواست در مورد OpenGl در
Visual Basic

نرم افزارهاي آماده اي عرضه كند.

اين تحقيقات را از اينترنت وكتاب هايي در مورد بحث مربوطه انجام دادم كه در

زير بعضي از مطالب اين بحث را آورده ام.

OpenGl یک رابط نر م افزاری برای سخت افزار گرافيک است. این رابط نرم

افزاری تقریبا شامل ١٢0فرمان مجزا از هم است که به برنامه نویس اجازه می

دهد اشکال مورد نياز خود را به صورت دوبعدی و یا سه بعدی به راحتی تهيه

کند.

محيط برنامه نویسی ویژوال بيسيک بهترین محيط برای فراگيری مفاهيم برنامه

نویسی گرافيکی در OpenGL است.شما به کمک این محيط ساده می توانيد خيلی

سریع شروع به یادگيری OpenGLكنيد.

اما در صورتی که می خواهيد به برنامه نویسی حرفه ای گرافيکی بپردازید به شما

پيشنهاد می کنم ازیک از زبانهای خانواده سی مانند Visual C++ 6 و یا Borland C++ 5

استفاده کنيد تا از سرعت واقعی و تمامی امکانات این رابط گرافيکی لذت ببرید.

 

قبل از هر چيز ما بایدOpenGL را بر روی ویژوال بيسيک پياده سازی کنيم.

خوشبختانه برای اینکار یک کتابخانه با نام VBOpenGLوجود دارد. این

کتابخانه شامل اکثر توابع OpenGL و کتابخانه های همراه آن است مانند glut که

 

کار شما را برای کار کردن با OpenGL بسيار ساده کرده است.

ایجاد پنجره در OpenGL کار نسبتا ساد ه ای است اما باید پيش از ایجاد پنجره درOpenGL

یکسری تنظيمات اوليه را انجام دهيم تا سيستم گرافيکی بداند که ما تحت چه

شرایطی می خواهيم پنجر ه را نمایش بدهيم. از جمله این تنظيمات می توان به

موارد زیر اشاره کرد:

اندازه پنجره (ارتفاع و طول آن (

تعيين عمق رنگ

تعيين حالت رنگ (مانند RGBA و RGBو...)

تعيين اینکه آیا می خواهيم از بافر دوگانه استفاده کنيم و یا نه.

سپس برای ادامه کار باید تابع CreateGLWindow را تعریف کنيم. کد زیر

تابع CreateGLWindow نشان می دهد.

Public Function CreateGLWindow(frm As Form, Width As

Integer, Height As Integer, Bits As

Integer) As Boolean

Dim PixelFormat As GLuint

Dim pfd As PIXELFORMATDESCRIPTOR

pfd.cColorBits = Bits ' color depth

pfd.cDepthBits = 16

pfd.dwFlags = PFD_DRAW_TO_WINDOW Or

PFD_SUPPORT_OPENGL Or PFD_DOUBLEBUFFER

pfd.iLayerType = PFD_MAIN_PLANE

pfd.iPixelType = PFD_TYPE_RGBA

pfd.nSize = Len(pfd)

pfd.nVersion = 1

 

PixelFormat = ChoosePixelFormat(frm.hDC, pfd)

If PixelFormat = 0 Then

KillGLWindow

 

MsgBox "Can't Find A Suitable PixelFormat.", vbExclamation,

"ERROR"

CreateGLWindow = False

End If

If SetPixelFormat(frm.hDC, PixelFormat, pfd) = 0 Then

KillGLWindow

MsgBox "Can't Set The PixelFormat.", vbExclamation,

"ERROR"

CreateGLWindow = False

End If

hrc = wglCreateContext(frm.hDC)

If (hrc = 0) Then

KillGLWindow

MsgBox "Can't Create A GL Rendering Context.",

vbExclamation, "ERROR"

CreateGLWindow = False

End If

If wglMakeCurrent(frm.hDC, hrc) = 0 Then

KillGLWindow

MsgBox "Can't Activate The GL Rendering Context.",

vbExclamation, "ERROR"

 

CreateGLWindow = False

End If

frm.Show

 

If Not InitGL () Then

KillGLWindow

MsgBox "Initialization Failed.", vbExclamation, "ERROR"

CreateGLWindow = False

End If

CreateGLWindow = True

End Function


درون تابع CreateGLWindow دو تابع دیگر به نا مهای InitGLو KillGLWindow

فراخوانی شده این دو تابع جزء توابعOpenGL نبوده و خود ما باید آنها را در

ماژولOGLUtils تعریف کنبم.

کار تابع آزاد کردن فضای استفاده شده توسط برنامه در سيستم است(در صورتی

که از این تابع استفاده نکنيم امکان مواجه شدن با کمبود فضا بر روی حافظه

اصلی سيستم و یا حافظه کارت گرافيکی افزایش می یابد.) کد مربوط به این تابع

را می توانيد در زیر مشاهده کنيد.


Public Sub KillGLWindow ()

If hrc Then

If wglMakeCurrent(0, 0) = 0 Then

MsgBox "Release of DC and RC Failed.", vbInformation,

"SHUTDOWN ERROR"

End If

If wglDeleteContext(hrc) = 0 Then MsgBox "Release Rendering

Context

Failed.", vbInformation, "SHUTDOWN ERROR"

 

 

End If

hrc = 0

End If

End Sub

تابع InitGl جزء توابعي است كه خود ما بايد آن را تعريف كنيم كار اين تابع پاك

كردن صفحه نمایش و آماده سازی آن برای رسم اشکال است. ما هميشه قبل از

شروع رسم بر روی صفحه نمایش برنامه این تابع را فراخوانی می کنيم تا تمام

تنظيمات اوليه که به آن نياز خواهيم داشت را بدین وسيله تعریف کنيم.

براي تعيين رنگ اشكال OpenGl داراي چند دستور به نام هاي GlColor3f و GlColor3d

مي باشد.تمام اين دستورها کارهای مشابه را انجام می دهند و تنها تفاوت آنها در

نوع پارامترهای آنها است برای مثال پارامترهای glColor3d از نوع Integer

است و می تواند هر عددی مابين ٠ تا55 ٢ باشد اما نوع پارامترهای glColor3f

از نوع اعشاری است و می تواند شامل تمام اعداد اعشاری ما بين ٠ تا ١ باشد.

در نوعGlColor4d چهار پارامتر را وجود دارد که به ترتيب این پارامترها

برابراند با رنگ قرمز، رنگ سبز، رنگ آبی و آلفا. مقدار هر کدام از این

پارامترها بيانگر شدت رنگ است. به عنوان مثال اگر به رنگ آبی مقداریک را

بدهيم و به مابقی بجز آلفا مقدار صفر را بدهيم به این معنی است که رنگ آبی را

انتخاب کرده ایم و یا اگر به تمامی رنگ ها مقدار یک را بدهيم یعنی رنگ سفيد را

انتخاب کرده ایم. همواره دانستن این موضوع که از چه مقادیری و ترکيب رنگی

استفاده کنيم تا رنگ مورد نظر خود را پيدا کنيم،یک مساله گمراه کننده بوده اما

یک راه حل بسيار ساده برای اینکار وجود دارد و آن استفاده از

است . MS Paint

با یک مثال کارنحوه رسم خط و نقطه را نشان می دهيم. در این مثال ما سه نقطه

متفاوت با رنگهای قرمز،سبز و آبی در تغيير سه محل متفاوت از صفحه نمایش

رسم می کنيم. برای اینکار تابع DrawGLScene را بصورت زیر دهيد:

Public Function DrawGLScene () As Boolean

glClear clrColorBufferBit ' pak kardan baffer safe rasm baraye

shoro be rasn jadid

glBegin bmPoints

glColor4f 1, 0, 0, 1 'range germez

glVertex2f 0.3, 0.2 'mokhtasate rase shomare 1

glColor4f 0, 1, 0, 1 ' range sabz

glVertex2f ‐0.3, 0.2 'mokhtasate nogte shomare 2

glColor4f 0, 0, 1, 1 'range abi

glVertex2f ‐0.3, ‐0.2 'mokhtasate ogte shomare 3

glEnd

DrawGLScene = True

End Function

در اینجا ما با استفاده OpenGLبه glBegin اعلام می کنيم که آماده رسم یک

شکل شود وتمام رئوسي را كه بااستفاده از دستور glVertext2f به آن داده شده

را به شكل منتسب كند ودر پايان با دستور glEnd به OpenGl اعلام مي كنيم كه

تمامي رئوس داده شده اند و شكل بايد رسم شود ، دستور GlBegin داراي يك

پارامتر است كه مقدار BmPoint به آن داده شده است اين مقدار به OpenGl

 

اعلام مي كند كه بايد به ازاي هر راس يك نقطه برروي صفحه نمايش بكشد ،

همانگونه كه مي بينيد قبل از دادن رئوس رنگ هر راس را به OpenGl اعلام

كرده ايم در حقيقت با هر بار فراخواني تابع GlColor4f رنگ قلمو عوض مي

احتياجي به اين كار نداريد.

كار تابع glVertext2f تعيين هر راس يك شكل مي باشد اين تابع داراي دو

 

پارامتر است كه اين پارامترها به ترتيب برابرند با Xوy كه همان مكان xو y را

 

برروي صفحه نمايش نشان مي دهند.

برای رسم هر خط در صفحه نمایش ما باید دو راس خط را تعيين کنيم تا OpenGL
از یک راس به راس ديگر خط مستقيمي را رسم كند.

glColor4f 1, 1, 0, 1 'rang zard

glBegin bmLines

glVertex2f -1, 0

glVertex2f 1, 0

در متن اصلی مقاله به هم ریختگی وجود ندارد. برای مطالعه بیشتر مقاله آن را خریداری کنید