DirectX Render To Texture(RTT)ன் பயன்பாடு - I

”பொட்டலம் இப்போதெல்லாம் வெறுமனே திரைப்பட விமர்சனங்களை மட்டுமே காவி வருகிறது. வேறுவிடயங்கள் வருவதேயில்லை. வெறும் boringகா இருக்கிறது” என்பவர்களுக்கான சிறப்பு பதிவு இது. முதன்முதலாக முற்றுமுழுதான தொழில்நுட்பதிவாக இது வருகிறது. எனினும் இந்தப்பதிவு நிச்சயமாக குறைந்தளவு ஒருவருக்காவது பயனுள்ளதாக இருக்கும். 

நான் வேலை பார்க்குமிடத்தில் செய்யும் வேலைகள் பெரும்பாலும் ஒரு Game Engineஐயே மையமாக கொண்டது. அதாவது Project IGI போன்ற Military Video Game போன்ற ஒன்றை அடிப்படையாக வைத்தே எமது வேலைகள் பின்னப்பட்டிருக்கிறது. வேறு பாணியில் சொன்னால் அந்த Game இற்கும் பாவனையாளர்கள்(Users)இற்கும் இடையிலான தொடர்பை (API -Application Interface) மேற்கொள்ளக்கூடிய செயல்பாடுகளை செய்வதே எமது வேலை. 

அப்படியான செயற்பாடுகளில் ஒரு சிக்கலான வேலைதான். அந்த Game இலே நாம் விரும்பும் Objectsகளை வரைவது. அது அடிப்படை உருவங்களான முக்கோணம், செவ்வகம், வட்டம்,பல்கோணி என்பதிலிருந்து சிக்கலான உருவங்கள் வரை அது செல்லும். உண்மையில் வெறொரு Game Engineனின் Deviceல் dependஆகி எமது வேலைகளை செய்வது சற்று சிரமமானது. நாங்கள் நினைத்தபடி எடுத்தோம் கவிழ்த்தோம் என்று முடிவுகளை எடுத்து தொழிற்பட முடியாது. நாங்கள் தங்கியிருக்கும் Engine எவ்வாறு இயங்குகிறது மற்றும் அது மட்டுறுத்தியிருக்கும் விடயங்களை நாம் அறிந்தபிறகே முடிவுகளை எடுக்கவேண்டும்.

DirectX தவிர OpenGL போன்ற வேறு பல Techniquesகள் Video Gamingல் இருந்தாலும் நாங்கள் உபயோகிக்கும் DirectXல் உள்ள ஒரு சிறு நுணுக்கமான பிரயோசமான வேலையை பற்றியே இங்க பாக்கவுள்ளோம். பெரும்பாலும் DirectX என்று இங்கு சொல்வதெல்லாம் Microsoftன் Direct3D librariesஐதான். DirectX என்று பொதுவாக சொல்வது Direct3D, DirectDraw, DirectMusic, DirectPlay, DirectSound போன்ற எல்லா APIஐயும் சேர்த்துதான் எனினும் இவற்றில் Direct3Dயே பெரிதாக அறியப்பட்ட முக்கிய part என்பதால் DirectX, Direct3D மாறி மாறி ஒரே கருத்துக்காக பயன்படுத்தபடுவதுண்டு. இங்கே போடப்பட்ட தலைப்பில் உள்ள DirectX, Direct3Dயையே குறிக்கிறது.


Render To Texture என்ற பகுதி Direct3Dல் ஒரு பிரயோசமான பகுதியாகும். வெறொரு DirectX Deviceலும் தங்கியிருக்காது நாங்களாக சொந்தமாக create செய்து எமது பூரண கட்டுப்பாட்டில் வைத்து செய்யும் Applicationsகளுக்கு இந்த Render to Texture (RTT) என்ற தொழில்நுட்பம் பெரும்பாலும் தேவைப்படாது. எனினும் இது பயன்படக்கூடிய சந்தர்ப்பமாக இதை சொல்லலாம். நாங்கள் Textureல் (IDirect3DTexture9) எங்களுக்கு தேவையான பொழுதில் தேவைப்பட்டதை Renderபண்ண இந்த முறை முக்கியமாக தேவைப்படும். பின் இந்த render செய்த textureஐ (kind of surfaceஐ) வேறொரு தருணத்தில் பயன்படுத்தலாம்.




எனக்கு இதன் தேவைப்பாடு உணர்ந்த தருணம் இதுதான். நான் ஏலவே சொன்னதுபோல ஒரு Game Engineனிலேயே எமது செயற்பாடுகள் தங்கியிருக்கிறது. அந்த Gameனின் சில callbacksமூலமாக எமக்கும் Gameறக்கான தொடர்பாடல்கள் இடம்பெறும். அப்பிடியான ஒருசில callbackகளின் செயற்பாடுகள் ஒரு புது Game Versionனில் முற்றிலுமாக மாறிவிட்டிருந்தது. முதலில் எந்த வரையறையுமின்றி எந்த callbackகளிலும் பாவிக்ககூடியதாக இருந்த IDirect3DDevice9* புதியதில் ஒரு சில callbackகளிலேயே பயன்படுத்தக்கூடியதாக இருந்தது. தொடர்சியாக ஒன்றை கீறுவதென்றால் ஒரு frequentஆக call பண்ணப்படும் callback இருப்பது அவசியம். அந்த callbackல் device தரப்படாது deviceஉடன் தொடர்புடைய வேலைகளை செய்ய மட்டுறுத்தப்பட்ட இன்னொரு Interface வழங்கப்பட்டது. இந்த புதிய Interfaceல் இல்லாத IDirect3DDevice உடன் தொடர்பான ஒரு தொழிற்பாடு தேவையெனின் சும்மா சிரிச்சுக்கொண்டு இருப்பதை தவிர வேறொன்றும் செய்ய இயலாது.

2D Texts Drawn on Screen
எங்களது இலக்கோ Game Environmentல் 2D ல் அதாவது Screen Displayல் Textஐ Draw பண்ணுவது. ID3DXFontமூலமாக இலகுவாக இதை செய்துவிடலாம் ஆனால் ID3DXFont Objectகளை frame by frame call பண்ணும் callbackல் உபயோகிப்பது மட்டுறுத்தப்பட்டிருந்தது. (directX device இந்த callbackல் வழங்கப்படாமையால்) எனவே IDirect3DDevice access உள்ள இடத்தில் எமது Textஐ ஒரு IDirect3DTextureல் Render செய்து அந்த Textureஐ எமது frequent callbackல் பயன்படுத்திவிட்டால் இந்த இலக்கை அடைந்துவிடலாம்.


பதிவு பெருத்துவிட்டதால் அடுத்த பாகத்தில் C++ code snippetகளுடனும் விளக்ககுறிப்புகளுடனும் சந்திப்போம்!!!

6 comments:

வவ்வால் சொன்னது…

நல்ல பிரயோசனமான பதிவு, எனக்கு கணினி நிரல்களில் சரியா ஆளுமை இல்லை, ஆனால் 3டி மாடலிங்கில் ஓரளவு வேலை செய்துள்ளேன் என்பதால் கொஞ்சம் புரிகிறது.

இதற்கு முன்னர் டைரக்ட்எக்ஸ் அறிமுகப்படுத்தியாச்சா, அப்பதிவின் சுட்டியும் இணைத்திருக்கலாம்.

Mayu Mayooresan சொன்னது…

அட்ரா சக்கை அட்ரா சக்கதை தமிழில் இப்படி ஒரு நுட்பப்பதிவா. வாழ்த்துக்கள். தொடர்து எழுதுங்கள் யார் வாசிக்காவிட்டாலும் நான் வாசிப்பேன். அருமை அருமை அருமை.

Kirivarnan சொன்னது…

Thala kalakkungo....

புல்லட் சொன்னது…

அருமையான விளக்கம் தம்பி.. எனக்கு உந்த Software, Game Engines பற்றி எதுவும் தெரிந்திருக்காவிடினும் புரிய முடிகிறது.. அதாவது ஒவ்வொருதடவையும் frame refresh பண்ணப்படும் போது Game Engine ஆல் அழைக்கப்படும் ஒரு Method இல் நீங்கள் எழுத்தை வரைவதற்கான code ஐ எழுதப்போகின்றீர்கள்.. ஆனால் இந்த இல் கடுமையான வரைவு வேலைகளை செய்தால் விளையாட்டின் frame rate பாதிக்கப்படாதா? Snippets க்காக வெயிட்டிங்...:) தொடர்ந்து இவ்வாறானா பதிவுகளையும் இடுங்கள்..

Raja சொன்னது…

தலைவா யூ ஆர் கிரேட்!!!!!!!!!!!
தொடர்க உன் பணி!!!

கார்த்தி சொன்னது…

ஆதரவுக்கு நன்றிகள் நண்பர்களே.... எனக்கு தெரிந்ததை அறிய தருகிறேன்..

@புல்லட் இல்லை அண்ணா அந்த வரைவிற்குரிய வேலைகள் எல்லாம் முதலில் IDirect3DDevice available ஆக உள்ள இடத்தில் முடித்து அந்த Textureஐயே Frequent callbackல் பயன்படுத்துவோம். அதான் இப்பிடி சொன்னேன்
”IDirect3DDevice access உள்ள இடத்தில் எமது Textஐ ஒரு IDirect3DTextureல் Render செய்து அந்த Textureஐ எமது frequent callbackல் பயன்படுத்திவிட்டால் இந்த இலக்கை அடைந்துவிடலாம்.”

Share

Related Posts with Thumbnails

என்னைப் பற்றி

எனது படம்
ஒரு போக்கன். எந்த வெருட்டலுக்கும் பயப்படாது வெட்டியாக பொழுதை கழிக்கும் மொக்கன்!

Catch me on Facebook

Twitterல் பிடிக்க

*பார்வைகள்*