ওপেনজিএলে স্বাগতম, যেখানে দ্রুত জিনিসগুলি নিখরচায় আসে এবং সহজ জিনিসগুলি শক্ত করে তোলে।
যদি আপনি মনে করেন যে নমুনাটি দীর্ঘ এবং জটিল, "কেবল একটি টেক্সচার লোড করার জন্য", তবে আপনি এখনও কিছুই দেখেন নি। আপনার ডিডিএস টেক্সচার লোড না করা, এইচডিআর টেক্সচার প্রসেস করা, কিউব্যাপ সমর্থন করা, কোনও টেক্সচারে রেন্ডার করা ইত্যাদি অপেক্ষা করুন
ওপেনজিএলে একটি টেক্সচার লোড করাতে দুটি উপাদান থাকে:
আপনার চিত্রের ফর্ম্যাট থেকে ডেটা পাওয়া। আপনি কোনও ফাইল থেকে একটি জমিন লোড করতে পারেন বা প্রক্রিয়াগতভাবে এটি উত্পন্ন করতে পারেন। যতক্ষণ আপনি রঙের তথ্যের একটি দুর্দান্ত অ্যারেটি শেষ করেন ততক্ষণ তা বিবেচ্য নয়।
ভিডিও কার্ডে ডেটা লাগানো। ডেটা সিস্টেম র্যাম থেকে ভিডিও র্যামে যেতে হবে।
প্রথম অংশটি সহজ হওয়া উচিত, কারণ এসএফএমএল স্ট্যান্ডার্ড ইমেজ লোডার সহ আসে।
sf::Image img_data;
if (!img_data.LoadFromFile("images/avatar.png"))
{
LOG_ERROR("Could not load '%s'.", "images/avatar.png");
return false;
}
এর পরে, আমাদের একটি ওপেনজিএল টেক্সচার অবজেক্ট তৈরি করতে হবে।
GLuint texture_handle;
glGenTextures(1, &texture_handle);
একটি জমিন বাঁধাই করার জন্য অনেকগুলি পছন্দ রয়েছে। তিনটি প্রধান প্রকার রয়েছে: 1 ডি, 2 ডি এবং 3 ডি এবং আপনার কিউব্যাপস (+ এক্স,-এক্স, + ওয়াই, -ওয়াই, + জেড,-জেড) এর জন্য সমর্থন রয়েছে। তবে, 99% ক্ষেত্রে, আপনি 2D টেক্সচার চাইবেন।
glBindTexture(GL_TEXTURE_2D, texture_handle);
এখন আমরা আকর্ষণীয় অংশে পেতে। আসুন ভিডিও কার্ডে আমাদের ডেটা আপলোড করি।
glTexImage2D(
GL_TEXTURE_2D, 0, GL_RGBA,
img_data.GetWidth(), img_data.GetHeight(),
0,
GL_RGBA, GL_UNSIGNED_BYTE, img_data.GetPixelsPtr()
);
অবশেষে, আমরা বেশ কয়েকটি টেক্সচার পরামিতি সেট করতে পারি। এইগুলির উত্তরগুলির মতো প্রশ্নের উত্তর: আমরা যদি কোনও বিন্যাসের স্থানাঙ্ক ব্যবহার করি যা সীমার বাইরে (0.0, 1.0)? GL_REPEAT
আমরা কি ( ) ঘিরে রাখি বা কিছুই করি না ( GL_CLAMP
)? এগুলি ভিডিও কার্ডকে ব্যাখ্যা করতেও ব্যবহার করা যেতে পারে যে আমরা আমাদের টেক্সচারে লিনিয়ার ইন্টারপোলেশন ব্যবহার করতে চাই।
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
এবং এখন আপনি glBindTexture
টেক্সচার্ড মেসগুলি আঁকার জন্য আপনার টেক্সচারটি আবদ্ধ করতে এবং এটি ব্যবহার করতে সক্ষম হবেন ।