কীভাবে আমি ওপেনজিএলে কোনও বস্তুকে বাঁকতে পারি?


11

সিলিন্ডার বা ওপেনএল ব্যবহার করে প্লেনের মতো কোনও বস্তু বাঁকতে পারে এমন কোনও উপায় কি?

আমি একটি ওপেনএলএল শিক্ষানবিশ (আমি ওপেনগিএল ইএস ২.০ ব্যবহার করছি, যদি এটি সন্দেহ হয় তবে এই ক্ষেত্রে গণিতটি সবচেয়ে বেশি গুরুত্বপূর্ণ, তাই এটি কোনওরকম স্বতন্ত্র সংস্করণ), আমি বেসিকগুলি বুঝতে পারি: অনুবাদ, ঘোরানো, ম্যাট্রিক্স রূপান্তরকরণ ইত্যাদি understand আমি ভাবছিলাম যে এমন কোনও প্রযুক্তি আছে যা আপনাকে আসলে আপনার বস্তুর জ্যামিতি পরিবর্তন করতে দেয় (এই ক্ষেত্রে এগুলি বাঁকিয়ে দেওয়ার মাধ্যমে)?

কোনও লিঙ্ক, টিউটোরিয়াল বা অন্যান্য রেফারেন্স স্বাগত জানানো হয়!

উত্তর:


11

কোনও বস্তুকে "নমন" করার জন্য আপনার যা করা দরকার তা হ'ল অনুবাদ / ঘূর্ণন / স্কেলিংয়ের উপযুক্ত কোনও সংমিশ্রণটিকে প্রশ্নের মধ্যে থাকা অবজেক্টের শীর্ষকোষের কিছু উপসেটে প্রয়োগ করা - সম্ভবত সেই রূপান্তরটি সেই অনুসারে ওজন করা।

এটি করার জন্য একটি মনোরম চেহারার ফ্যাশন আসল জাল বর্ণনা করার জন্য অন্যথায় কঠোরভাবে প্রয়োজন হতে পারে তার চেয়ে আরও বেশি শিখর ব্যবহার করা প্রয়োজন। উদাহরণস্বরূপ, একটি সাধারণ সিলিন্ডারের কেবল উভয় প্রান্তে শীর্ষে থাকতে পারে তবে আপনি যদি সিলিন্ডারটি মাঝখানে বাঁকতে চান তবে আপনার পাশাপাশি সেখানে শীর্ষেও প্রয়োজন হবে need

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

যেহেতু পছন্দসই বিকৃতি (বিশেষত আরও ব্যবহারিক এবং জটিল বিষয়গুলির জন্য) অর্জনের জন্য প্রতিটি সেলে প্রতিটি পৃথক শীর্ষে রূপান্তরকে ওজন কীভাবে করা যায় তা সঠিকভাবে নির্ধারণ করা এত জটিল হয়ে উঠতে পারে, তাই অনেক গেম কঙ্কাল অ্যানিমেশন নামে একটি কৌশল ব্যবহার করে । উচ্চ স্তরে এটি জ্যামিতির একটি পৃথক সেট ("কঙ্কাল") আপনার জালের সাথে সংযুক্ত করে। সেই জ্যামিতিটি আপনার বস্তুর হাড়কে প্রতিনিধিত্ব করে এবং আপনি প্রায়শই মডেলিংয়ের সরঞ্জামগুলিতে প্রকৃত মডেলের শীর্ষকোষ এবং কঙ্কালের হাড়গুলির মধ্যে একটি ম্যাপিং সংজ্ঞায়িত করেন - যা হাড়গুলি প্রতিটি শীর্ষবিন্দুর সাথে যুক্ত এবং সেই হাড়টি বিকৃতিকে কতটা প্রভাবিত করে যে শীর্ষবিন্দুর। তারপরে কঙ্কালটি সরাসরি অ্যানিমেটেড হয় এবং অ্যানিমেশনটি হাড় এবং তাদের শীর্ষে অবস্থিত সম্পর্কের মধ্য দিয়ে বাস্তব মডেলে স্থানান্তরিত হয়।

সাধারণত এই কৌশলটিতে, কঙ্কাল এবং আসল জাল মধ্যে ম্যাপিং সম্পদ উত্পাদন সময় সংজ্ঞায়িত করা হয়। অ্যানিমেশনগুলি তখনও নির্মিত যেতে পারে, বা রানটাইমে প্রক্রিয়াগতভাবে সেগুলি নির্মিত যেতে পারে। আসল জালটিতে অ্যানিমেশন রূপান্তরকরণের প্রয়োগটি রানটাইমের সময় ঘটে occurs সাধারণত রানটাইমের সময় কোনও নতুন শীর্ষবিন্দু উত্পন্ন হয় না, যার অর্থ হ'ল সুদর্শন ডিফর্মেশনগুলির পরিসীমা জালটিতে স্পষ্টতই সংশোধন করা হয় যখন এটি তৈরি করা হয়।

তত্ত্ব অনুসারে, অ্যানিমেশনের রূপান্তরগুলির বিশ্লেষণের উপর ভিত্তি করে রানটাইমের সময়ও জালটিতে টেসলেসেশন এবং মহকুমা প্রয়োগ করা যেতে পারে এবং এটি এমন অ্যানিমেশন তৈরির জন্য উপযুক্ত প্রান্তিক উত্পন্ন করতে পারে যা প্রয়োজনীয়ভাবে পরিকল্পনা করা হয়নি। আমি এই বিষয়ে কোনও কাগজপত্র সম্পর্কে অবহিত নই hand

আরো দেখুন:


9

ওয়ার্পিংয়ের আসল গণিতের জন্য, এটি খুব জটিল হয়ে উঠতে পারে, আপনি এখানে কেন শুরু করবেন না ?

আপনি এখন কীভাবে এটি প্রয়োগ করতে পারেন সে সম্পর্কে আমি এখনই কথা বলব, ধরে নিই যে আপনি কীভাবে আপনার ডিফর্মেশনটি কম করবেন তার জন্য আপনি ইতিমধ্যে গণিত পেয়েছেন।

2 উপায়:

1) প্রতিটি ফ্রেম, সিলিন্ডার মডেলের প্রতিটি ভার্টেক্সটি দেখুন এবং কোনও উপায়ে এটি অফসেট করুন।

2) আপনি রেন্ডারিংয়ের সাথে ভার্টেক্স শ্যাডারে শীর্ষেগুলি অফসেট করুন । ওপেনজিএল ইএস 2.0 ভার্টেক্স শেডারগুলিকে সমর্থন করে। সুতরাং আপনি ভাগ্যবান, এক উপায়ে।

আপনি কি পর্দায় প্রদর্শিত অবজেক্টটিকে কেবল বদ্ধ করতে চান , বা আপনি কি সেই বস্তুটি মুছতে চান যাতে গেমের প্রতিটি বস্তু জানে যে এটি বিকৃত হয়েছে?

আপনি যদি ভার্টেক্স শ্যাডারে বস্তুটি গুটিয়ে ফেলেন , তবে তা প্রদর্শন / রাস্টারাইজেশনের ঠিক আগেই ঘটে থাকে , সুতরাং এর অর্থ গেমের কোনও অবজেক্টই বিকৃতি সম্পর্কে জানতে পারবে না । আপনি যদি কেবল কোনও স্ক্রিন সেভার তৈরি করেন বা ডিফর্মেশনগুলি এত ছোট হয় তবে অবজেক্টটির সংঘর্ষযোগ্য আকারে তাদের কোনও প্রভাব নেই যদি এটি ঠিক থাকে।

আপনি যখন জ্যামিতি দোমড়ানো প্রান্তবিন্দু shader মডেলের মূল ছেদচিহ্ন আসলে না সরানো , (তারা শুধুমাত্র সরানো প্রদর্শিত )।

ভার্টেক্স শ্যাডারে বিকৃতি

Undeformed:

অ বিকৃত

অঙ্গবিহীন

বিকৃত

এটি সিজি টিউটোরিয়ালের 6 অধ্যায়ে , (প্রোগ্রাম # 14)।

এই বিকৃতি তৈরির শেডার কোডটি এরকম

// choose a displacement amount
float displacement = scaleFactor * 0.5 * sin(position.y * frequency * time) + 1 ;

// displace it in the direction of the normal
float4 displacementDirection = float4(normal.x, normal.y, normal.z, 0) ;

// move the vertex
float4 newPosition = position + displacement * displacementDirection ;

// transform (as normal)
oPosition = mul(modelViewProj, newPosition) ;

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


8

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

এটি করার জন্য আপনার দুটি জিনিস প্রয়োজন:

  1. আপনার জালকে আপনার রূপান্তর করতে পর্যাপ্ত পরিমাণে শীর্ষস্থান থাকা প্রয়োজন। উদাহরণস্বরূপ যদি এটি একটি বিমান হয় তবে আপনাকে নিশ্চিত করতে হবে যে এটি প্রকৃতপক্ষে একটি গ্রিড হিসাবে তৈরি করা হয়েছে, যাতে আপনাকে বিকৃত করার জন্য অনেকগুলি শীর্ষে রয়েছে। সিলিন্ডার সহ একই জিনিস। পরীক্ষার মাধ্যমে রানটাইমে এটি অর্জন করা সম্ভব হতে পারে তবে আমি বিষয়টি সম্পর্কে খুব বেশি জানি না।
  2. শীর্ষ কোণকে বিকৃত করতে আপনাকে একটি ভার্টেক্স শ্যাডার ব্যবহার করতে হবে। মূলত ভার্টেক্স শ্যাডার প্রতিটি শীর্ষবিন্দুর চূড়ান্ত রূপান্তরিত অবস্থান গণনা করার জন্য যত্ন নেয়, যাতে আপনি তাদের কোনও বিবর্তন প্রয়োগ করার সুযোগ নিতে পারেন।

এটি কতটা সহায়ক হবে তা সম্পর্কে আমি নিশ্চিত নই, তবে এই ওপেনজিএল উত্সটি একবার দেখুন, কারণ এটি আপনার প্রয়োজনীয় জিনিসটি সঠিক বলে মনে হচ্ছে:

http://www.ozone3d.net/tutorials/mesh_deformer_p3.php#part_3

এই লিঙ্ক থেকে স্ক্রিনশট:

এখানে চিত্র বর্ণনা লিখুন

সম্পাদন করা

কেবল জোশের জবাব দেখেছি এবং আমি সম্মত হয়েছি, কঙ্কাল অ্যানিমেশনও এই সমস্যাটিকে সজ্জিত করার একটি খুব মার্জিত উপায়, বিশেষত যখন আপনার বিকৃতিগুলি গাণিতিকভাবে প্রতিনিধিত্ব করা আরও জটিল এবং শক্ত হয়ে উঠতে শুরু করে।

তবে মনে রাখবেন, উপরোক্ত দুটি পয়েন্ট এখনও প্রয়োগ রয়েছে - আপনি কেবলমাত্র शिरোখণ্ডকে বিকৃত করতে পারেন, তাই স্পষ্টতই তাদের প্রথম স্থানে থাকা দরকার, এ কারণেই আপনার জালটি ভার্টেক্সের ঘনত্বের একটি শালীন পরিমাণের প্রয়োজন। এবং এটি সাধারণত ভার্টেক্স শ্যাডার যা কঙ্কালের অ্যানিমেশন চালায় এবং ভার্টেক্স মিশ্রণ এবং এই জাতীয় কাজ করে।

এবং যাইহোক, আপনি সিপিইউতেও এটি করতে পারেন, তবে আজকাল জিপিইউতে সাধারণত এটি করা একটি ভাল বিকল্প, এ কারণেই আমি ভার্টেক্স শ্যাডারের উপর জোর দিয়েছি, এবং আপনার এটি সন্ধান করা উচিত। যাইহোক, সিপিইউতে এটি করার চেয়ে এটি এতটা শক্ত প্রোগ্রামের মতো নয়।

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