Graphics Programming & OpenGL

3

..હજુ આજે પણ મારા અમુક દોસ્તો એમ માને છે કે, c,C++ માં ગ્રાફિક્સ-પ્રોગ્રામિંગ શક્ય નથી, એટલે સુધી કે GUI based application પણ c,C++ માં બની શકે છે , એ વાત થી તેઓ અજાણ છે. કંઈ વાંધો નહિ, કોને _બધી જ_ ખબર હોય છે ?! મને પણ નથી.

“જાનકિનાથ ને પણ ક્યાં ખબર હતી કે સવારે શું થવાનું છે..” ;) ;)

..long..long..before in the history of time..programmers ને GUI based code કરવા માટે hardware નું ખુબજ ઉંડું ગ્નાન હોવું જોઇતું હતું. જેમકે, hardware સાથે કેવી રીતે communicate કરવું, graphics card ને કેવી રીતે જણાવવું કે screen ઉપર કેવી રીતે કંઈક ચિતરવું, અથવા sound card  ને કેવી રીતે instruct કરવું વગેરે…

પણ, પછી થી એ મુશ્કેલ કામ વધારે મુશ્કેલ થવા માંડ્યું કેમકે, hardware માં અનેક વિવિધતા આવવા લાગી, અને અનેક અલગ અલગ hardware components નું combination..(કેટલી મગજમારી ??) છ્તાંય “કરને વાલે” કામ કરતાં જ હતાં પણ એનાથી બીજી અમુક તકલીફો આવતી હતી.

1) કોઇ એક hardware માટે બનાવેલો code બીજા hardware માટે useless થઈ જતો હતો. પરિણામે બધાં માટે અલગ code લખવો પડે જેનાથી , સમય, પૈસા…બગડતાં હતાં
, જે તે software product વધારે મોંઘી બનતી હતી…વગેરે

2) બધી જગ્યાએ બધું સાચવવાના ચક્કર (!) માં code માં bugs નું પ્રમાણ પણ વધારે રહેતું હતું, એટલે કે quality of code સાથે સમાધાન કરવું પડતું હતું.

3) કોઇ નવા વિચાર-અભિગમ-technique ને implement કરવાનો તો સવાલ જ ક્યાંથી આવતો કે જ્યારે સ્થાપિત થયેલા નિયમો-protocol પણ દુ:ખ આપતા હોય ?! ;)   અને વગેરે..વગેરે…

 

ત્યારે..છેવટે, કોઇ દેવદુત ની જેમ એક ઉપાય આવ્યો. જે બંને બાજુ થી અમ્લમાં મુકાયો. બંને બાજુ થી એટલે કે hardware and software.

==>hardware તરફથી ઉપાય એ હતો કે  hardware manufacturers વચ્ચે એક પ્રકારનું standardization અમલમાં મુકવું.

જો કે, અમુક સ્વાભાવિક કારણોથી જ આ ઉપાય લાગે છે એટલો અસરકારક નહોતો. કેમકે બધાંને (hardware manufacturers)આવા નિયમો standardization પસંદ નહોતું. અને એમાંય computer જેવા platform — કે જેમાં સૌથી વધારે વિવિધતા છે–બધાંને સાથે રાખવું કદાચ શક્ય પણ નહોતું.

જેમ કે આજે 2011 માં પણ અમુક ચોક્કસ પ્રકારના graphics માટે અમુક ચોક્કસ પ્રકારના graphics-card ની જરૂર પડે છે.

==> software તરફથી અમ્લમાં મુકવામાં આવેલો ઉપાય વધારે કારગત નિવડ્યો. ઉપાય એ હતો કે, અલગ અલગ hardware માટે જરૂર પડે તો અલગ અલગ code કરવાનો , પણ એ બધાંને utilize કરવાનો રસ્તો-નિયમ એકસરખો હોવો જોઇએ.

 

કંઈક object-oriented programming જેવું, કે જેમાં implementation method ને બદલ્યા વગર પણ processing logic ને બદલી શકાય છે.

એટલે કે, programmers ને અલગ hardware ના internal structure ને સમજવાની મજુરી કરવાને બદલે , આવા નિયમો-રસ્તાઓ ને જ સમજવાની જરૂર પડે માત્ર.

 

આ બંને તરફના ઉપાયો થી _સંપુર્ણ_ આઝાદી તો ના મળી પણ, એ તરફનો રસ્તો મળિ ગયો, એટલે કે “દિલ્હી અભી દુર હૈ…but you’re on the right track…” ;)

હવે આમાં software તરફથી અમલમાં મુકાયેલ ઉપાય માટે એક pre-written code ની જરૂર હતી, જે પુરી કરાઈ અને એને એ કોડ ને અમુક અલગ અલગ નામથી ઓળખવામાં આવે છે. જેમકે, SDK (Software Development Kits),Libraries, platform, framework.

(આ બધાં માં technical તફાવત હોય છે , એ વાત જો કે અલગ છે, અને અહિં નકામિ ગુંચવણો ઉભી થાય એમ છે, પણ છેવટે બધાં એક જ “વેલ ના ચિભડાં” છે  ;) )

 

એવા અમુક platform, framework ના નામ…
DirectX==http://www.msdn.microsoft.com/directx/
OpenGL    ==http://www.opengl.org
SDL         == http://www.libsdl.org
ClanLib    ==http://www.clanlib.org
OGRE 3D  ==http://www.ogre3d.org
BASS       == http://www.un4seen.com/
OpenAL    ==http://www.openal.org/
FMOD      == http://www.fmod.org/

મુખ્યત્વે DirectX અને OpenGL એ બંને મોટાભાગે વપરાતાં framework છે…પણ..અહિં જે કારણસર આ લખું છું એના માટે હું OpenGL ને લાગતી-વળગતી વાત જ કરીશ.

OpenGL (Open Graphics Library) -એ એક પ્રકારનું cross-platform framework છે.  એટલે એમાં અથવા એના વડે લખેલા GUI code , Mac Os, windows, linux,Unix બધાં જ platform ઉપર એકસરખું  result આપે છે.  જે વળી open- source પણ છે.

DirectX મોટાભાગે windows (microsoft) ને જ વળગી રહે છે. OpenGL ને એવી મર્યાદા નથી. પણ…પણ..એક વાત ધ્યાનમાં રાખ્વી કે..,DirectX માં graphics અને sound પણ supported છે, જ્યારે OpenGL બહુ ચુસ્ત રીતે માત્ર graphics ને જ વળગી રહે છે. અને એટલે જો graphics સાથે sound ને પણ code કરવાનો હોય તો બહેતર રહેશે કે SDLઅથવા OpenAL ને OpenGl ની સાથે utilize કરાય.

(OpenGL for graphics, OpenAL for audio)

OpenGl comparatively વધારે fast છે. શિખવામાં સહેલું છે. વળી અલગ અલગ operating System બદલાવાની સાથે ન તો એના output , performance કે ન તો એના implementation કોઇ ફરક પડે છે.

OpenGl , directX કરતાં વધારે structured પણ ખરું એટલે એના code ને maintain કરવો પણ સહેલો રહેશે.

NvIDIA પણ એની ઘણી product , OpenGL માં બનાવે છે, જે એ બતાવવા પુરતું છે કે, OpenGL high performance graphics API માટે પણ કામ લાગી શકે છે.

OpenGL શિખવામાં પણ સરળ છે.

OpenGL લગભગ બધીજ computer languages (from C, c++,java to….Perl, Python) અને મોટાભાગે બધાં જ compilers સાથે ચાલી શકે છે.

ક્યારેક windows platform ઉપર OpenGL કરતાં DirectX વધારે ફાસ્ટ execute થાય છે, એ પણ ખરું પણ એ સ્વાભાવિક છે. પણ વાત જો cross-platform ની હોય તો openGL જ કામ લાગી શકે છે.

OpenGL , directx  ની જેમ _છાશવારે_ બદલાતું નથી. directx ના દરેક નવા “અવતાર” ની સાથે આપણે નવા અભિગમ શિખવા પડે છે !, OpenGL માં એવું નથી હોતું.

….મતલબ કે OpenGL માં કરેલું રોકાણ લાંબાગાળાનો ફાયદો આપી શકે છે. :)

..અને હવે આવે છે કે ક્યાં ? કેવી રીતે ? શેમાં કોડ કરવું વગેરે.

codeBlock, DevC++ વગેરે IDEs માં OpenGL framework સાથે જ આવે છે. કદાચ અમુક sample code પણ હોય જ છે. (graphics, sounds માટેનાં) જેનાથી એના (OpenGL) code, syntax, functions, headers નો ખ્યાલ આવી શકશે.

અમુક sample code મુકવાનું મને મન તો થાય છે, (અને આ hectic schedule!!) પણ એના માટે મારે અમુક code લખિને, execute કરીને, પુરતાં documentation સાથે, મુકવું પડશે.  કેમકે, અધુરી વિગતો કદાચ ચલાવી શકાય, પણ ઉતાવળમાં ગેરમાર્ગે દોરવાઈ જવાય એવી ચિંથરેહાલ વિગતો આપીને શું કરવાનું ?! ;)  બાકી તો, એ પણ ખરું કે..

“તમને કમ આપવાનું મન નહી,
ને મનથી કમ કંઈ આપવાનું નહી…”

…બસ, તો અત્યારે આટલું જ. જરૂર લાગશે તો બીજી વાતો પણ કરીશ. :)

Share.

About Author

મોડીરાત્રીઓ, ધુમાડો, કોફી, કોડિંગ, એક્સપ્લોઇટ્સ, ગઝલો, બાઇકિંગ, જંગલો, પથ્થરો, લોકો, પુસ્તકો, રખડપટ્ટી, લાઈફની મઝા છે. એની દરેક અનુકુળતાઓ અને વિષમતાઓમાં. અને એ બધું અંગત નોટના પાનાઓમાંથી અહીં સુધી ફેલાયું છે. આ લખાણો મારા છે અને એક જ ડ્રાફ્ટમાં લખાયેલા છે, તો કોઇ માહીતીદોષ દેખાય તો ધ્યાન દોરશો. __નિખિલ શુક્લ. ;) :)

3 Comments

  1. Pingback: Graphics Programming & OpenGL Part–2 « Nikhil Shukl

Leave a Reply

Powered By Indic IME
%d bloggers like this: