بخشی از مقاله
دراين مكان كه نمايندگي تهيه وتوزيع رسانه هاي تصويري ونرم افزارهاي
كامپيوتري بود كارهاي زياد ودرهمي انجام مي دادم و هر روزه بنابر خواسته ي
مدير آنجا كاري را انجام مي دادم، كارهايي هم چون فروش نرم افزار درداخل
فروشگاه به مشتريان گذري كه بنابه دخواست مشتريان آن نرم افزار يا فيلمي را
كه مد نظر داشتند را درخواست كرده وبه آن ها تحويل مي دادم.
گاه اين مشتريان راجع به نرم ازارها سوالاتي پرسيده كه من تا حد امكان وتوانايي
آن ها را راهنمايي مي كردم و طريقه نصب نمدن آن نرم ازار را به آن ها آموزش
مي دادم، وگاه نيز بعضي از مشتريان نرم افزارهايي خاص را سفارش مي دادند
كه بايد اين نرم افزار يا فيلم از جايي ديگر تهيه مي شد جهت اين كار نرم افزار يا
فيلم درخواستي را در داخل كامپيوتر موجود ثبت كرده وبعدا به نمايندگي كلي
ارسال مي نموديم تا نمايندگي در اولين فرصت اين فيلم و يا نرم افزار را ارسال
كرده وما به مشتريان تحويل مي داديم.
يك سري از نرم افزارهاي درخواستي را مي توانستيم از اينترنت دانلود كنيم كه در
اين صورت وارد اينترنت شده ونرم افزار مربوطه را جستجو كرده و به صورت
هاي بسته هاي آماده به مشتريان تحويل مي داديم.
يك سري ديگر از مشتريان خودشان فروشنده فيلم ها و نرم افزارها بودند كه
قضيه ي اين مشتريان با مشتريان قبلي فرق داشت چون اين مشتريان به صورت
انبوه نرم افزار وفيلم را خريداري مي كردند كه در اين صورت مي بايست اين
نرم افزارها وفيلم هاي مربوطه و مورد در خواست مشتري ليست شده ودر اختيار
او قرار گيرد تا به انتخاب خود نرم افزار ها وفيلم هاي مورد نيازخود را انتخاب
كرده و سفارش دهد، ما نيز اين نرم افزارها و فيلم ها را برداشته وبه تعداد مورد
نياز او در اختيارش قرار مي داديم اما قبل از تحويل اين نرم افزارها وفيلم ها مي
بايست تعداد واسم آن ها در بانك اطلاعاتي ثبت مي شد.
يك مشتري ممكن بود كه از نرم افزار خاص تعداد زيادي را بر دارد واز يك نرم
افزاري ديگر تعدادي كمتري را بردارد كه در نتيجه بايد اين اعداد به دقت در بانك
اطلاعاتي ثبت و ذخيره مي شد، قيمت هر كدام از اين نرم افزارها وفيلم ها قبلا در
بانك اطلاعاتي نيز ثبت شده بود وبه اين ترتيب قيمت كلي فروش به آن مشتري
تهيه و چاپ مي شد وبه مشتري داده مي شد.
كار ديگري كه در اين مكان انجام مي دادم تهيه وپخش پوسترهايي در مورد فيلم ها
ونرم افزار هاي موجود در مغازه بود كه مي بايست كل نرم افزارها وفيلم هاي
موجود را در صفحه اي هم راه با قيمت هايشان تايپ كرده وپرينت گرفت ودر
داخل مركزهاي فروش به مشتريان عرضه كرد.
نوعي ديگر از پوسترها فقط مخصوص يك فيلم ويا يك نرم افزار خاص بود كه
براي تهيه اين پوسترها مي بايست اطلاعات كاملي در مورد آن نرم افزار را در
برگه مربوطه تايپ كرده وعكس هاي مورد نظر را با نرم افزاري خاص
(فتوشاپ) برش داده ودر جاي مخصوص به خود قرار داد وبعد از كامل شدن اين
پوسترها مي بايست آن ها را بر روي كاغذ براق چاپ نمود.
در اين فروشگاه نيز نرم افزارهاي مربوطه ومورد نياز براي كار وثبت اطلاعات
را برروي سيستم نصب مي نمودم.
چون نرم افزاره وفيلم ها هر روزه در حال تغيير و تحول بودند بانك اطلاعاتي نيز
مي بايست هر روزه عوض مي شد وتغيير وتحول مي يافت و هر نرم افزاري كه
قبلا در بانك بوده والان در مغازه نمانده است مي بايست خذف ونرم افزارها وفيلم
هاي جديد وارد شده مي بايست در داخل بانك اطلاعاتي درج مي شد، اين كار
هرروزه صبح انجام مي شد كل اطلاعات نرم افزارها وفيلم هاي جديد از قبيل نام
نرم افزاريا فيلم، قيمت ، ورژن و... مي بايست بادقت درج مي شد.
بعضي از كارمندان كه با كامپيوتر ونرم افزار آشنايي زيادي نداشتند را آموزش
مي دادم به گونه اي كه بتوانند با كامپيوتر كار كرده واز نرم افزارهاي مورد
نيازبه خوبي استفاده كنند.
از اينترنت نرم افزارها جالب ومورد احتياج را به حالتي گلچين كرده وبه صورت
بسته هايي در داخل "سي دي" يا "دي وي دي" در اختيار مشتريان قرار مي داديم.
هم چنين در اين دوره تحقيقاتي در مورد 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