আমি জেসন এল। ম্যাককেসনের লেখা "লার্নিং মডার্ন 3 ডি গ্রাফিক্স প্রোগ্রামিং" বইটি পড়ছি
এখন পর্যন্ত, আমি গিম্বল লক সমস্যা এবং কীভাবে চতুর্থাংশ ব্যবহার করে এটি সমাধান করব তা অবধি।
তবে ঠিক এখানে, কোয়ার্টারিয়নস পৃষ্ঠায় ।
সমস্যার অংশটি হ'ল আমরা 3 টি জমে থাকা অক্ষীয় আবর্তনের সিরিজ হিসাবে একটি ওরিয়েন্টেশন সংরক্ষণ করার চেষ্টা করছি। ওরিয়েন্টেশন হ'ল ওরিয়েন্টেশন, আবর্তন নয়। এবং ওরিয়েন্টেশন অবশ্যই আবর্তনের একটি সিরিজ নয়। সুতরাং আমাদের জাহাজের ওরিয়েন্টেশনকে একটি নির্দিষ্ট পরিমাণ হিসাবে অভিহিত হিসাবে বিবেচনা করতে হবে।
আমি অনুমান করি এটি প্রথম স্থান যা আমি বিভ্রান্ত হওয়া শুরু করি কারণ এর কারণ হ'ল আমি ওরিয়েন্টেশন এবং আবর্তনের মধ্যে নাটকীয় পার্থক্য দেখি না। আমিও বুঝতে পারি না কেন কেন একটি কেন্দ্রীভূতিকে ধারাবাহিকভাবে ঘোরানো দ্বারা প্রতিনিধিত্ব করা যায় না ...
এছাড়াও:
এই প্রান্তের দিকে প্রথম চিন্তাটি হবে ম্যাট্রিক্স হিসাবে ওরিয়েন্টেশন রাখা। ওরিয়েন্টেশনটি সংশোধন করার সময় আসার পরে, আমরা কেবলমাত্র এই ম্যাট্রিক্সে একটি রূপান্তর প্রয়োগ করি, ফলাফলটিকে নতুন বর্তমান ওরিয়েন্টেশন হিসাবে সংরক্ষণ করি।
এর অর্থ হ'ল বর্তমান ওরিয়েন্টেশনের সাথে প্রযোজ্য প্রতিটি ইয়াও, পিচ এবং রোল সেই বর্তমান ওরিয়েন্টেশনের সাথে সম্পর্কিত। যা আমাদের অবিকল প্রয়োজন। যদি ব্যবহারকারী কোনও ইতিবাচক ইয়াবা প্রয়োগ করে তবে আপনি চান যে ইয়াবা সেগুলি বর্তমান পয়েন্টিংয়ের সাথে সম্পর্কিত করে কোনও নির্দিষ্ট স্থানাঙ্ক ব্যবস্থার তুলনায় নয় them
ধারণাটি, আমি বুঝতে পারি, তবে আমি বুঝতে পারি না যে কীভাবে ম্যাট্রিক্স ট্রান্সফর্মেশনগুলি জড়ো করা যদি এই সমস্যার সমাধান হয় তবে পূর্ববর্তী পৃষ্ঠায় প্রদত্ত কোডটি কীভাবে তা নয়।
কোডটি এখানে:
void display()
{
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
glClearDepth(1.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glutil::MatrixStack currMatrix;
currMatrix.Translate(glm::vec3(0.0f, 0.0f, -200.0f));
currMatrix.RotateX(g_angles.fAngleX);
DrawGimbal(currMatrix, GIMBAL_X_AXIS, glm::vec4(0.4f, 0.4f, 1.0f, 1.0f));
currMatrix.RotateY(g_angles.fAngleY);
DrawGimbal(currMatrix, GIMBAL_Y_AXIS, glm::vec4(0.0f, 1.0f, 0.0f, 1.0f));
currMatrix.RotateZ(g_angles.fAngleZ);
DrawGimbal(currMatrix, GIMBAL_Z_AXIS, glm::vec4(1.0f, 0.3f, 0.3f, 1.0f));
glUseProgram(theProgram);
currMatrix.Scale(3.0, 3.0, 3.0);
currMatrix.RotateX(-90);
//Set the base color for this object.
glUniform4f(baseColorUnif, 1.0, 1.0, 1.0, 1.0);
glUniformMatrix4fv(modelToCameraMatrixUnif, 1, GL_FALSE, glm::value_ptr(currMatrix.Top()));
g_pObject->Render("tint");
glUseProgram(0);
glutSwapBuffers();
}
আমার বোধগম্যতার জন্য, তিনি যা করছেন তা নয় (স্ট্যাকের উপর একটি ম্যাট্রিক্স সংশোধন করে) একত্রিত ম্যাট্রিক্স হিসাবে বিবেচিত, যেহেতু লেখক সমস্ত পৃথক ঘূর্ণন রূপান্তরকে এক ম্যাট্রিক্সের সাথে সংযুক্ত করেছিলেন যা স্ট্যাকের শীর্ষে সঞ্চিত রয়েছে।
ম্যাট্রিক্স সম্পর্কে আমার বোঝাটি হল যে এগুলি একটি বিন্দুতে ব্যবহার করা হয় যা একটি উত্সের সাথে সম্পর্কিত (আসুন বলা যাক ... মডেল), এবং এটিকে অন্য উত্সের (ক্যামেরা) সাথে সম্পর্কিত করে তোলা হয়। আমি নিশ্চিত যে এটি একটি নিরাপদ সংজ্ঞা, তবে আমার মনে হচ্ছে এমন কিছু আছে যা আমাকে এই জিম্বল লক সমস্যাটি বুঝতে বাধা দিচ্ছে।
একটি জিনিস যা আমার কাছে বোধগম্য নয় তা হ'ল: যদি কোনও ম্যাট্রিক্স দুটি "স্পেস" এর মধ্যে পার্থক্য নির্ধারণ করে, তবে Y অক্ষের চারপাশে কীভাবে আবর্তন হবে, আসুন বলি, রোল করি, বিন্দুটিকে "রোল স্পেসে রাখি না" "যা এই রোলের সাথে সম্পর্কিত হয়ে আবারও রূপান্তরিত হতে পারে ... অন্য কথায় এই নতুন বিন্দুটির সাথে আর কোনও রূপান্তর এই নতুন" রোল স্পেস "এর সাথে হওয়া উচিত নয় এবং তাই ঘূর্ণনটি আগেরটির সাথে তুলনামূলকভাবে হওয়া উচিত নয়" মডেল স্পেস "যা গিম্বল লক তৈরি করছে।
জিম্বল লক ঠিক তাই হয়? এর কারণ আমরা বস্তুটিকে তার নিজের, আপেক্ষিক অক্ষের চারপাশে ঘোরানোর চেয়ে সেট এক্স, ওয়াই এবং জেড অক্ষের চারপাশে ঘোরান । নাকি আমি ভুল করছি?
যেহেতু আপাতদৃষ্টিতে এই কোডটি আমি সংযুক্ত করেছি সেটি ম্যাট্রিক্স রূপান্তরগুলির সঞ্চিতি নয়, আপনি দয়া করে এই পদ্ধতিটি ব্যবহার করে কোনও সমাধানের উদাহরণ দিতে পারেন।
সুতরাং সংক্ষেপে:
- একটি ঘূর্ণন এবং একটি ওরিয়েন্টেশন মধ্যে পার্থক্য কি?
- কোডটি কেন ম্যাট্রিক্স রূপান্তরকেন্দ্রিক সংস্থার উদাহরণ নয়?
- ম্যাট্রিক্সের আসল, নির্দিষ্ট উদ্দেশ্যটি কী, যদি আমার এটি ভুল হয়?
- জিম্বল লক সমস্যার সমাধান কীভাবে ম্যাট্রিক্স ট্রান্সফর্মেশনের সংশ্লেষ ব্যবহার করে প্রয়োগ করা যেতে পারে?
- এছাড়াও, বোনাস হিসাবে: ঘূর্ণনের পরে রূপান্তরগুলি এখনও "মডেল স্পেস" এর সাথে তুলনামূলক কেন?
- আরেকটি বোনাস: আমি কি এই ধারণায় ভুল করছি যে একটি রূপান্তরের পরে আরও রূপান্তরগুলি বর্তমানের তুলনায় ঘটবে?
এছাড়াও, যদি এটি বোঝানো না হয়, তবে আমি ওপেনজিএল, জিএলএসএল, সি ++, এবং জিএলএম ব্যবহার করছি, সুতরাং প্রয়োজনীয়তা না থাকলে এগুলির ক্ষেত্রে উদাহরণ এবং ব্যাখ্যাগুলি প্রশংসিত হয়।
আরও বিস্তারিত আরও ভাল!
আগাম ধন্যবাদ.