আমি কীভাবে 3 ডি (উত্সের পরিবর্তে) একটি স্বেচ্ছাসেবী বিন্দু সম্পর্কে ঘোরান?


15

আমার কাছে এমন কিছু মডেল রয়েছে যা আমি সাধারণ পদ্ধতিতে কোয়ার্টার্নগুলি ব্যবহার করে আবর্তন করতে চাই, উত্স সম্পর্কে ঘোরানোর পরিবর্তে, আমি এটিটি কিছুটা অফসেট হতে চাই। আমি জানি যে আপনি 3 ডি স্পেসে বলেন না যে আপনি একটি বিন্দু ঘোরান; আপনি বলছেন যে আপনি একটি অক্ষ প্রায় ঘোরান। সুতরাং আমি এটিকে কোনও ভেক্টরটির ঘূর্ণন হিসাবে পর্যবেক্ষণ করছি যার লেজ স্থানীয় উত্সে নয় position

আমার রেন্ডারিং / পদার্থবিজ্ঞানের ইঞ্জিনের সমস্ত অ্যাফাইন ট্রান্সফর্মেশনগুলি এসকিউটি (স্কেল, কোয়ার্টারিয়ন, অনুবাদ; গেম ইঞ্জিন আর্কিটেকচার বইটি থেকে ধারিত একটি ধারণা ) ব্যবহার করে সংরক্ষণ করা হয়, সুতরাং আমি এই উপাদানগুলি থেকে প্রতিটি ফ্রেম তৈরি করি এবং এটি ভার্টেক্স শ্যাডারে পাস করি। এই সিস্টেমে অনুবাদ প্রয়োগ করা হয়, তারপরে স্কেল করা হবে, তারপরে ঘোরানো হবে।

একটি নির্দিষ্ট ক্ষেত্রে, আমার বিশ্বজগতে কোনও বস্তুর অনুবাদ করতে হবে, এটি স্কেল করতে হবে এবং এটিকে এর স্থানীয় উত্সকে কেন্দ্র করে নয় এমন একটি শীর্ষবিন্দু সম্পর্কে ঘোরানো দরকার।

প্রশ্ন: উপরে বর্ণিত আমার বর্তমান ব্যবস্থার সীমাবদ্ধতাগুলি দেখে আমি কীভাবে উত্স ব্যতীত অন্য একটি বিন্দু কেন্দ্রিক স্থানীয় ঘূর্ণন অর্জন করতে পারি? কেবলমাত্র ম্যাট্রিকগুলি ব্যবহার করে এটি কীভাবে করা যায় তা বর্ণনা করতে পারে এমন যে কাউকে স্বয়ংক্রিয়ভাবে আপভোট করুন :)


কোয়ার্টেরিয়ানস ইতিমধ্যে একটি স্বেচ্ছাকৃতির অক্ষ সম্পর্কে একটি ঘূর্ণন বর্ণনা করে; আপনার সমস্যা আছে নির্মাণের তথ্য আপনি থেকে যেমন একটি চার বস্তুর সমষ্টি?
মার্টিন সোজকা

3
সিরিয়াসলি, উত্তরগুলি উত্তর দেওয়া লোকেরা কি আসলে তাদের পড়তে পারে ? আমি একটি পদ্ধতি, একটি দক্ষ সূত্র এবং এমনকি একটি প্রদর্শনও দিয়েছিলাম। তবুও একমাত্র upvated উত্তর, কিছু মূল্যবান তথ্য প্রদান করার সময় (এবং কিছু স্পষ্টতই ভুল তথ্য), এর কোনওটিই বৈশিষ্ট্যযুক্ত না এবং এমনকি প্রশ্নের উত্তরও দেয় না!
সাম হোচেভার

@ মার্টিনসোজকা, এটি একটি স্বেচ্ছাসেবীর অক্ষ নয়, স্বেচ্ছাসেবী বিষয়।
notlesh

@ সামহোসেভর আপনার উত্তর দুটিই সহায়ক ছিল। আমি আপনার চয়ন করেছি কারণ এটি আরও পুঙ্খানুপুঙ্খ ছিল এবং আমাকে সমাধানে আসতে সহায়তা করেছিল। দুজন কেই ধন্যবাদ.
notlesh

আহ, দুঃখিত - আমি এটি দ্বৈত কোয়ার্টেরিয়নের সাথে বিভ্রান্ত হয়ে পড়েছিলাম (যারা আপনাকে "বিনামূল্যে" অনুবাদটিও পেয়েছে)। আমি উত্তরে আমি কী বোঝাতে চাইছিলাম তা পরে লিখব; সম্ভবত অন্যরা এটি দরকারী বলে মনে করবেন, বিশেষত যেহেতু আপনি আপনার তিনটি উপাদানকে কেবল একটিতে হ্রাস করতে পারেন - তবে আরও জটিল কিছু হলেও।
মার্টিন সোজকা

উত্তর:


17

সংক্ষেপে

আপনার কেবলমাত্র আপনার এসকিউটি আকারে টি পরিবর্তন করতে হবে।

প্রাথমিক অনুবাদ ভেক্টরটি যেখানে অনুবাদ ভেক্টরটি এটির vসাথে প্রতিস্থাপন করুন , আপনি যে ঘূর্ণনটি ঘটাতে চান তা সেই বিন্দুটি এবং আপনার ঘূর্ণন এবং স্কেলের বিপরীতগুলি।v' = v-invscale(p-invrotate(p))vpinvrotateinvscale

দ্রুত বিক্ষোভ

pআপনি যে ঘূর্ণনটি প্রয়োগ করেন তার চারপাশে যাক r। দিন sআপনার স্কেলিং পরামিতি এবং হতে vআপনার অনুবাদ ভেক্টর। T(p)R(r)T(-p)S(s)T(v)পরিবর্তে চূড়ান্ত ম্যাট্রিক্স রূপান্তর R(r)S(s)T(v)

আপনি যা চান তা নতুন রূপান্তর পরামিতি v', r'এবং s'চূড়ান্ত ম্যাট্রিক্স রূপান্তর R(r')S(s')T(v')এবং আমাদের রয়েছে:

T(p)R(r)T(-p)S(s)T(v) = R(r')S(s')T(v')

অসীমের আচরণটি ইঙ্গিত দেয় যে ঘূর্ণন পরামিতি এবং স্কেলিং পরামিতি পরিবর্তন করতে পারে না (এটি প্রদর্শিত হতে পারে)। আমরা এইভাবে r = r'এবং আছে s = s'। কেবলমাত্র অনুপস্থিত প্যারামিটারটি হ'ল v', আপনার নতুন অনুবাদ ভেক্টর:

T(p)R(r)T(-p)S(s)T(v) = R(r)S(s)T(v')

যদি এই ম্যাট্রিকগুলি সমান হয় তবে তাদের বিপরীতগুলি সমান:

T(-v)S(-s)T(p)R(-r)T(-p) = T(-v')S(-s)R(-r)

এটি বিশেষত উত্সটির পক্ষে সত্য O:

T(-v)S(-s)T(p)R(-r)T(-p)O = T(-v')S(-s)R(-r)O

উত্সকে স্কেলিং এবং ঘোরানোর ফলে উত্সটি পাওয়া যায়, যেভাবে এটি পান:

T(-v)S(-s)T(p)R(-r)(-p) = -v'

v'আপনি যে নতুন অনুবাদ ভেক্টরটির সন্ধান করছেন তা হ'ল এটি আপনাকে এসকিউটি আকারে আপনার রূপান্তর সংরক্ষণ করতে দেয়। সম্ভবত গণনা সহজ করা সম্ভব; তবে কমপক্ষে প্রয়োজনীয় স্টোরেজ বৃদ্ধি করা হয় না।


বর্নানার জন্য ধন্যবাদ. বিটিডাব্লু, আপনি কি এমন কোনও সংস্থান সম্পর্কে জানেন যেখানে আমি এসকিউটি উপস্থাপন কৌশল সম্পর্কে আরও পড়তে পারি?
পাচাঙা

আমি ভুল হলে আমাকে সংশোধন করুন তবে মনে হয় এর অন্য সমাধানটি হ'ল আপনার কোয়ার্টেরিয়নটিকে স্বাভাবিক হিসাবে সংরক্ষণ করা এবং যদি আপনাকে কোনও স্বেচ্ছাচারিত বিন্দু / অক্ষের চারপাশে অনুবাদ করার প্রয়োজন হয়, তবে এটি অন্তর্ভুক্ত করে কিউ ম্যাট্রিক্স তৈরি করুন, কেবল অনুবাদ ভেক্টরটি বের করুন এই ম্যাট্রিক্স থেকে (সাধারণত শেষ কলাম, সাধারণত) এবং এটিতে যুক্ত করুন অনুবাদ ভেক্টর, তারপরে আপনার অস্থায়ী ম্যাট্রিক্স টস করুন।
জনবেকার্স

15

আপনার ঘূর্ণন ম্যাট্রিক্স প্রাপ্ত করতে ব্যবহৃত সমস্ত ক্যানোনিকাল রোটাল সূত্রগুলি মূল সম্পর্কে ঘোরার জন্য। আপনি যদি পরিবর্তে কোনও নির্দিষ্ট পয়েন্টের চারপাশে এই ঘূর্ণনটি প্রয়োগ করতে চান তবে আপনাকে অবশ্যই প্রথমে উত্সটি অফসেট করতে হবে - বা, সমতুল্যভাবে, অবজেক্টটি সরিয়ে ফেলতে হবে যার ফলে আপনি যে বিন্দুটি ঘুরতে চান তা মূলদিকে রয়েছে।

প্রথমে 2 ডি কেসটি বিবেচনা করুন, কারণ এটি সহজ এবং কৌশলটি স্কেল। যদি আপনার উত্সকে কেন্দ্র করে 2 প্রস্থের ঘনক্ষেত্র থাকে এবং আপনি এটির কেন্দ্রটি প্রায় 45 ডিগ্রি ঘোরানো চেয়েছিলেন তবে এটি 2 ডি রোটেশন ম্যাট্রিক্সের একটি তুচ্ছ অ্যাপ্লিকেশন হবে ।

তবে পরিবর্তে যদি আপনি এটির উপরের ডান কোণে (অবস্থিত 1,1) চারদিকে ঘোরানো চান তবে আপনাকে প্রথমে এটি অনুবাদ করতে হবে যাতে সেই কোণটি মূলত। এটি একটি অনুবাদ সঙ্গে সম্পন্ন করা যেতে পারে -1,-1। তারপর আপনি আগের মত বস্তু ঘোরাতে পারেন, কিন্তু আপনি তা ফিরে (দ্বারা অনুবাদ এই পর্যন্ত অনুসরণ করতে হবে 1,1)। সুতরাং সাধারণভাবে, আপনি প্রায় বিন্দু Rঘোরানোর জন্য ঘূর্ণন ম্যাট্রিক্স অর্জন করতে:rP

R = translate(-P) * rotate(r) * translate(P)

যথাক্রমে ক্যানোনিকাল অনুবাদ / রোটেশন ম্যাট্রিক্স translateএবং কোথায় rotate। যেমনটি ঘটে, ত্রিমাত্রিকভাবে এই স্কেলগুলি ত্রিমাত্রিকভাবে আঁকা, যা ঘূর্ণনের সাথে অক্ষ সরবরাহ করার ব্যতিক্রম - আপনি কেবল সর্বদা ক্যানোনিকাল এক্স, ওয়াই বা জেড অক্ষের ঘূর্ণন ম্যাট্রিকগুলি বেছে নিতে পারেন তবে এটি নিস্তেজ হবে। আপনি স্বেচ্ছাকৃতির অক্ষ-কোণ ঘূর্ণন ম্যাট্রিক্স ব্যবহার করতে চাইবেন । আপনার R3D এ চূড়ান্ত হয়:

R = translate(-P) * rotate(a,r) * translate(P)

aঘূর্ণনের অক্ষটি উপস্থাপন করে এমন একক ভেক্টর যেখানে Pএখন ঘূর্ণন বিন্দুর প্রতিনিধিত্বকারী মডেল স্পেসের একটি 3 ডি পয়েন্ট।

যেমনটি ঘটে, চতুর্ভুজগুলিকে ম্যাট্রিক্স উপস্থাপনায় এবং থেকে রূপান্তর করা যেতে পারে , সুতরাং আপনি নিজের পছন্দমতো সেভাবেই নিজের বক্তব্য রাখতে পারেন। অথবা আপনি কেবল ম্যাট্রিক হিসাবে সমস্ত কিছু রেখে যেতে পারেন (কোয়ার্ট্রিয়ানের কিছু দুর্দান্ত সুবিধা রয়েছে যেমন একটি বুদ্ধিমান ফ্যাশনে অন্তরঙ্গ করা সহজ হওয়া, তবে আপনার প্রয়োজন কিনা তা আপনার উপর নির্ভর করে)।

এছাড়াও:

সুতরাং আমি এটিকে কোনও ভেক্টরটির ঘূর্ণন হিসাবে পর্যবেক্ষণ করছি যার লেজ স্থানীয় উত্সে নয় position

কড়া কথায় বলতে গেলে, ভেক্টরগুলিকে কোনও উত্স থেকে স্থানান্তর হিসাবে বিবেচনা করে অবস্থানগুলি উপস্থাপন করতে ব্যবহার করা যেতে পারে, তবে ভেক্টরের নিজস্ব অবস্থান নেই তাই এ জাতীয় চিত্রটি দেখা কিছুটা অস্বাভাবিক।


ধন্যবাদ, এটি একটি ভাল উত্তর। যদিও এটি আমার সিস্টেমের সীমাবদ্ধতার সাথে খাপ খায় না। আমার প্রশ্নটিতে আমার অন্তর্ভুক্ত করা উচিত ছিল, "এই প্রতিবন্ধকতাগুলি রেখে কি এটি করা সম্ভব ?," এবং আমি মনে করি যে উত্তরটি এটি নয়, কারণ এটির জন্য দুটি অনুবাদ প্রয়োজন এবং আমি কেবল একটিটির জন্য সরবরাহ করেছি। এফাইন ট্রান্সফর্মেশনের উপস্থাপনা হিসাবে এটি কি এসকিউটি ব্যবহারে অনিবার্য ঘাটতি?
notlesh

এটি আপনার সীমাবদ্ধতার মধ্যে পুরোপুরি ফিট করে। ম্যাট্রিক্স আর (অনুবাদ-রোটেট-ট্রান্সলেট-ব্যাক হিসাবে উত্পাদিত) আপনার রোটেশন ম্যাট্রিক্স। আপনার "এসকিউটি" সিস্টেমে আর এর সাথে কি প্রতিস্থাপন করুন যাতে আপনার আরও সাধারণ স্কেল-আবর্তিত-অনুবাদ উদাহরণ রয়েছে, এবং আপনি শেষ করেছেন। শেষটি অনুবাদটি পছন্দসই ঘূর্ণন উত্পাদন করতে দুটি মধ্যবর্তী অনুবাদ থেকে স্বতন্ত্র।

আপনি প্রস্তাব দিচ্ছেন আমি কি চৌম্বকটি ম্যাট্রিক্সের সাথে প্রতিস্থাপন করব? এটি বস্তুতে আরও 12 টি বাইট (8 যদি আমি এটি 4x3 ম্যাট্রিক্স হিসাবে সঞ্চয় করি)! আমি আমার মধ্যে আশাবাদীকে চুপ করে দেব এবং এটিকে ঘূর্ণি দেব। (এটি সম্ভবত পায়ের ছাপে 2kb বৃদ্ধির পরিমাণও হবে না ...) আপনার প্রতিক্রিয়াগুলির জন্য ধন্যবাদ।
notlesh

আপনি পারতেন - আপনি তাদের মধ্যে রূপান্তর করতে পারেন, সেইভাবে ঘূর্ণন কোয়ার্টেরিয়নটি তৈরি করে এবং আপনার বিদ্যমান সিস্টেমে ফিরে যেতে পারেন।

1
@ সামোহেশ্বর: বিকল্পভাবে, এর যে কোনও সংমিশ্রণকে একটি স্ক্রু হিসাবে প্রকাশ করা যেতে পারে ।
মার্টিন সোজকা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.