Graphics Programming & OpenGL Part–2

…આમ તો અમુક દોસ્તો જોડે ઘણીવાતો-ચર્ચાઓ થતી હોય છે, ક્યારેક online, ક્યારેક offline, અને ઘણું જાણવા મળી જાય છે, બસ એમ જ. :)

આ OpenGL નું પણ એવું જ થયું. એમ જ અમુક સામાન્ય વાતોમાંથી આ પોસ્ટ નો પહેલોપહેલો ભાગ ભાગ લખાયો હતો અને હવે બીજો. 

"થોડું પાણી ઘરમાંથી નીકળીને નદી થઈ જાય છે…." !!

પહેલા ભાગમાં અમુક વાતો-પ્રશ્નો રહી ગયાં હતાં, અમુક મારા ધ્યાનમાં જ નહોતાં, અને અમુક મેં જાણીજોઇને રહેવા દીધાં હતાં. પણ…પછી એ પ્રશ્નોની પણ ચર્ચા થઈ ગઈ તો…..હવે હું એ બીજા પ્રશ્નો ને _થોડાંક ગોઠવી_  ને અહિં મુકું છું.

અમારી વાતો કદાચ કોઇને કામ લાગે. :)

..પોસ્ટમા લ્ખ્યુ તેમ જો c અને c++ મા gu…i વાળી એપ્લીકેશ્ન્સ,graphics પણ બની શકેતો, પછી આ opengl કે sdl ની જરુર કેમ પડે છે, મારુ કેવાનુ એમ કે નવી લેન્ગવેજ કે પછી syntax શીખવાની જરુર જ શુ ?? does problem lies in pixel precision or what ?? why everyone prefers these technologies, ok platform indecency is a great adv, but then complex structures, new syntax and all, doesn’t it make them more messier ??

**..c,C++ માં Gui થઈ શકે એનો અર્થ એટલો (એવી રીતે) કે , આવા જ (OpenGL જેવા) framework નો ઉપયોગ કરીને.

મુળ્ભુત રીતે C,C++ માં તો graphics ને લાગતું વળગતું _લગભગ_ કંઈ નથી, સિવાય કે colorful fonts, and some curves, lines, polygons.. .. . પણ બીજી libraries , headers નો ઉપયોગ કરીને C,C++ માં આ બધું થઈ શકે છે.

એ સિવાય OpenGl, SDL ની જરૂર એટલા માટે પણ ખરી કેમકે, જો એકલા C,C++ વડે બધું કરવા જઈએ તો , એ દરેક અલગ OS,hardware… માટે અલગથી કરવું પડે !!! ઉપરથી દરેક વખતે એક્સરખું result પણ ના મળે, OpenGL જેવા framework વડે એક _સાતત્ય_ જાળવી શકય છે. માટે its worth to learn / implement :)

(openGL ને c-C++ ની STL (standard Template Library), અથવા અમુક બીજી Free Libraries સાથે સરખાવી શકાય, માત્ર સમજવા માટે. )**

..આ openGL ના IDE’s સાથે એના syntax પણ બદલાતા હશે ને ? ભાઈ, એને visual studio સાથે કઈ રીતે વાપરી શકાય ??

**
ના એમ નથી. OpenGL નું કોઇ IDE છે જ નહી. openGL તો માત્ર libraries (a set of pre-written classes, functions, routines only ). આપણે એને આપણને ગમતી-ફાવતી જે તે, computer language માં …"અટેચ" કરવું પડે છે.

બિલકુલ એવી રીતે જેવી રીતે , C,C++ માં header files (#include <stdio.h> , <math.h> …) , અથવા java માં જેમ પેકેજ લઈએ છીએ , import java.lang.*;

એ સિવાય syntax માત્ર જે તે language ની બદલાય IDE ની syntax તો હોતી જ નથી. માટે OpenGL ની syntax અંગે ચિંતા કરવા જેવું નથી.

એ પછી, OpenGL ને visual studio સાથે વાપરવાનો સવાલ પણ _બરાબર_ ગોઠવાયો નથી. :) , કેમકે, coding જે તે language માં થાય છે. માટે visual studio has nothing to do with this openGL syntax.

બલ્કે, vb.net, c++.net, c#.net ની સાથે OpenGL ને જોડવાનું છે. પછી એ જોડવાનું કામ visual stud. માં કરીએ કે પછી , commandline ઉપર , compiling કરતી વખતે કરીએ. બંને ચાલે.

છંતાં, આપણે જેમ visual studio માં library reference , અથવા, આપણા બનાવેલા "ક્લાસ" નો reference , add કરીએ છીએ એવી રીતે કરવાનું હોય છે. C,C++ માં એવી જ રીતે અમુક header files વાપરવાની હોય છે.

જેમકે #include <gl/gl.h> , અને પછી એમાં રહેલા functions ને call – use કરવાના હોય છે. જેમકે "PlaySound("Sound_File.wav", NULL, SND_ASYNC);" —
—————————————-
..તો , બીજું કંઈપણ ચિંતા કર્યા વગર માત્ર _બે_ કામ કરવાના રહે

(1)  OpenGL અને/અથવા જે જરૂરી હોય એ libraries/framework ને જે તે language  માં જોડવા કઈ રીતે તે જાણી લેવું …(adding references, OR including required header files, OR importing packages )

(2)..એ પછી એટલું જ યાદ રાખવાનું કે કયા function / class માં કયા function આપણને જોઇએ છે અથવા આપણને જરૂર છે. જેમકે , C , C++ માં abs(), fabs() , વગેરે function <math.h> માં હોય છે, અને <stdio.h> નામની header file માં , printf(); , scanf(); જેવા functions defined થયેલા છે.

——–ફરીવાર OpenGl ના એક version માં કરેલી મહેનત બગડશે નહી કેમકે, દરેક નવા version માં implementation કોઇ એવો ખાસ ફરક નથ ઈપડાતો, ફરક માત્ર એની ગુણવત્ત માં (વધે છે) પડે છે. એટલે કે એક વખત શીખેલી syntax નકામી નહી થઈ જાય. :) :) ——
**

આ GLUT શુ છે ??

**જો C,C++ માં માત્ર menus, toolbars, buttons વગેર બનાવવા હોય તો…OpenGL સુધી જવાની જરૂર નથી , એવા કામ GLUT, WxWidgets, વગેરે જેવા બીજા framework વડે થઈ જાય છે. પણ કેમકે, તમારે project , OpenGL માં છે, એટલે આ બીજા બધાં શબ્દો વડે ગુંચવણો ઉભીના થાય એટલે એનો ઉલ્લેખ ટાળ્યો છે.

(એક અલગ વાત DevCpp નામના C,C++ માટેના IDE માં, આ બધુંજ (બંને) છે , OpenGL પણ અને WxWidgets પણ !! , DevCpp ના install થવાની સાથે જ આ બીજાં framework પણ install થઈ જશે અને , C,c++ સાથે જોડાઈ પણ જશે ) :) **

——–

..અત્યારે આટ્લું જ છે. આશા રાખીએ કે ક્યારેક કોઇ search engine માં અથવા બીજી કોઇ રીતે કોઇ _Newcomer_ ને આ મારો અને દોસ્તોનો લવારો મળિ જાય અને એને એ કંઈક કામ લાગે. અમને બધાંને Info.Tech. માં ચાલવા માટે જે ખાડાઓ (કામની નકામી books, ખરાં ખોટાં codings, સાવ નજીવી પણ સાલી, હરામખોર time-consuming errors, ભળતા-સળતા concept પાછળ દોરવાઈ જવું, આખી રાત જાગીને સવારે એ જાણવું કે આ તો સાલું logic જ ખોટું હતું વગેરે…) માં પડીને ઉભા થવું પડ્યું હતું, અને જે _સમય, શક્તિ_ બગડ્યાં હતાં, એ અમારા જેવા બીજા કોઇને ના બગડે, અને બાકીની શક્તિઓ વડે એ અમારાથી (આ ચર્ચામાં ભાગ લેનારા) પણ આગળ નીકળે.  જો એવું થશે તો આ વાતો સાર્થક થશે. 

બસ, technology ની દુનિયામાં બહું _વેવલાવેડા_ નહી કરવાના, કામ કરવાનું ! ;) ;) ;)

Graphics Programming & OpenGL

..હજુ આજે પણ મારા અમુક દોસ્તો એમ માને છે કે, 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 સાથે, મુકવું પડશે.  કેમકે, અધુરી વિગતો કદાચ ચલાવી શકાય, પણ ઉતાવળમાં ગેરમાર્ગે દોરવાઈ જવાય એવી ચિંથરેહાલ વિગતો આપીને શું કરવાનું ?! ;)   બાકી તો, એ પણ ખરું કે..

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

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

Follow

Get every new post delivered to your Inbox.