আমি কীভাবে আমার দৃশ্যের কিউব মানচিত্রে রেন্ডার করব তা বোঝার চেষ্টা করছি। আমি এটির জন্য কিছুটা আটকে গিয়েছি এবং বুঝতে পেরেছি আমি আপনাকে কিছু সাহায্য চাইব। আমি ওপেনজিএলে নতুন এবং আমি প্রথমবারের মতো এফবিও ব্যবহার করছি।
আমার কাছে বর্তমানে কিউব্যাম্যাপ বিএমপি ফাইল ব্যবহারের একটি কার্যকারী উদাহরণ রয়েছে এবং টুকরা শ্যাডারে স্যাম্পলারকিউব নমুনা প্রকারটি জিএল_আর। আমি শেডার কোডটি মোটেও পরিবর্তন করছি না। আমি কেবল এই সত্যটি পরিবর্তন করছি যে কিউব্যাপ বিএমপি ফাইলটি লোড করা এবং একটি কিউব্যাপে রেন্ডার করার জন্য নীচের কোডটি ব্যবহার করার চেষ্টা করছিলাম সেই ফাংশনটিতে আমি ফোন করব না।
আপনি নীচে দেখতে পাচ্ছেন যে আমি আবার টেক্সচারটিও জিএল_আর_সই 1 তে সংযুক্ত করছি। আমি ইউনিফর্ম সেট করার সময় এটি এমন হয়:
glUniform1i(getUniLoc(myProg, "Cubemap"), 1);
এটি এর মাধ্যমে আমার খণ্ডের শেডারে এটি অ্যাক্সেস করতে পারে uniform samplerCube Cubemap
।
আমি নীচের ফাংশনটি এভাবে কল করছি:
cubeMapTexture = renderToCubeMap(150, GL_RGBA8, GL_RGBA, GL_UNSIGNED_BYTE);
এখন, আমি নীচের অঙ্কিত লুপটিতে বুঝতে পারি যে আমি + x, -x, + y, -y, + z, -z অক্ষটি দেখার জন্য দর্শন দিকটি পরিবর্তন করছি না। আমি বাস্তবায়নের আগে প্রথমে কিছু কাজ করতে দেখছিলাম। আমি অনুভব করেছি কোডটি এখন যেভাবে করা হচ্ছে তাতে আমার কমপক্ষে আমার কিছু লক্ষ্য করা উচিত।
আমি কিছুই দেখছি না, কেবল সোজা কালো। আমি আমার ব্যাকগ্রাউন্ডকে সাদা করে দিয়েছি এখনও অবজেক্টটি কালো। আমি কেবল কিউব্যাপের জমিন এবং এখনও কালো রঙের নমুনার জন্য আলোকপাত এবং রঙিনটি সরিয়েছি।
আমি ভাবছি যে আমার টেক্সচারটি জিএল_আরজিবি 8, জিএল_আরজিবিএ স্থাপন করার সময় সমস্যাটি ফর্ম্যাট ধরণের হতে পারে তবে আমি চেষ্টা করেছি:
GL_RGBA, GL_RGBA GL_RGB, GL_RGB
আমি ভেবেছিলাম এটি স্ট্যান্ডার্ড হবে যেহেতু আমরা ফ্রেমবফারের সাথে সংযুক্ত একটি টেক্সচারকে রেন্ডার করছি তবে আমি বিভিন্ন উদাহরণ দেখেছি যা বিভিন্ন এনাম মান ব্যবহার করে।
আমি প্রতিটি অঙ্কিত কলটিতে কিউব মানচিত্রের টেক্সচারকে আবদ্ধ করার চেষ্টা করেছি যা আমি কিউব মানচিত্রটি ব্যবহার করতে চাই:
glBindTexture(GL_TEXTURE_CUBE_MAP, cubeMapTexture);
এছাড়াও, আমি এফবিওর জন্য গভীরতার বাফার তৈরি করছি না যা আমি বেশিরভাগ উদাহরণে দেখেছি, কারণ আমি কেবল আমার ঘনক্ষেত্রের মানচিত্রের জন্য রঙিন বাফারটি চাইছি। সমস্যাটি কিনা তা দেখতে আমি আসলে একজনকে যুক্ত করেছি এবং এখনও একই ফলাফল পেয়েছি। আমি চেষ্টা করার সময় আমি এটির সাথে প্রতারণা করতে পারি।
আমাকে সঠিক দিক নির্দেশ করতে পারে এমন যে কোনও সহায়তা প্রশংসিত হবে।
GLuint renderToCubeMap(int size, GLenum InternalFormat, GLenum Format, GLenum Type)
{
// color cube map
GLuint textureObject;
int face;
GLenum status;
//glEnable(GL_TEXTURE_2D);
glActiveTexture(GL_TEXTURE1);
glGenTextures(1, &textureObject);
glBindTexture(GL_TEXTURE_CUBE_MAP, textureObject);
glTexParameterf(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameterf(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameterf(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameterf(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexParameterf(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE);
for (face = 0; face < 6; face++) {
glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X + face, 0, InternalFormat, size, size, 0, Format, Type, NULL);
}
// framebuffer object
glGenFramebuffers(1, &fbo);
glBindFramebuffer(GL_FRAMEBUFFER, fbo);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_CUBE_MAP_POSITIVE_X, textureObject, 0);
status = glCheckFramebufferStatus(GL_FRAMEBUFFER);
printf("%d\"\n", status);
printf("%d\n", GL_FRAMEBUFFER_COMPLETE);
glViewport(0,0,size, size);
for (face = 1; face < 6; face++) {
drawSpheres();
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,GL_TEXTURE_CUBE_MAP_POSITIVE_X + face, textureObject, 0);
}
//Bind 0, which means render to back buffer, as a result, fb is unbound
glBindFramebuffer(GL_FRAMEBUFFER, 0);
return textureObject;
}
drawSpheres
ফাংশনটি আসলে কিছু দৃশ্যমান হয়? ফাংশন আসলে কিছু আঁকেন? আপনি যদিdrawSpheres
কেবল ফ্রেমবফারটি সাফ করতে পরিবর্তন করেন তবে কি হবে ?