কিভাবে OpenGL এ কিউব তৈরি করবেন (ছবি সহ)

সুচিপত্র:

কিভাবে OpenGL এ কিউব তৈরি করবেন (ছবি সহ)
কিভাবে OpenGL এ কিউব তৈরি করবেন (ছবি সহ)

ভিডিও: কিভাবে OpenGL এ কিউব তৈরি করবেন (ছবি সহ)

ভিডিও: কিভাবে OpenGL এ কিউব তৈরি করবেন (ছবি সহ)
ভিডিও: ভার্চুয়াল বক্সে উইন্ডোজ এক্সপি কীভাবে ইনস্টল করবেন - 2023 2024, এপ্রিল
Anonim

OpenGL একটি শক্তিশালী 3D প্রোগ্রামিং টুল যা সাধারণ আদিম থেকে জটিল ত্রিমাত্রিক দৃশ্য আঁকতে ব্যবহৃত হয়। এই নিবন্ধটি আপনাকে শিখাবে কিভাবে একটি সাধারণ ঘনক আঁকতে হয় যা আপনি তিনটি মাত্রায় দেখতে স্পিন করতে পারেন!

এই প্রকল্পের জন্য আপনার প্রয়োজন হবে একটি কোড এডিটর এবং সি প্রোগ্রামিং এর কিছু জ্ঞান।

ধাপ

3 এর অংশ 1: প্রাথমিক সেটআপ

1994315 1 1
1994315 1 1

পদক্ষেপ 1. ওপেনজিএল ইনস্টল করুন আপনার সিস্টেমে ওপেনজিএল ইনস্টল করার জন্য এই ধাপগুলি অনুসরণ করুন।

আপনার যদি ইতিমধ্যে ওপেনজিএল, সেইসাথে একটি সামঞ্জস্যপূর্ণ সি কম্পাইলার ইনস্টল করা থাকে, তাহলে আপনি এই ধাপটি এড়িয়ে পরবর্তীটিতে যেতে পারেন।

1994315 2 1
1994315 2 1

পদক্ষেপ 2. নথি তৈরি করুন।

আপনার পছন্দের কোড এডিটরে একটি নতুন ফাইল তৈরি করুন এবং mycube.c হিসেবে সেভ করুন

1994315 3 1
1994315 3 1

ধাপ 3. #অন্তর্ভুক্ত করুন।

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

    // অন্তর্ভুক্ত #অন্তর্ভুক্ত #অন্তর্ভুক্ত #অন্তর্ভুক্ত #অন্তর্ভুক্ত GL_GLEXT_PROTOTYPES #ifdef _APPLE_ #include #else #include #endif

1994315 4 1
1994315 4 1

ধাপ 4. ফাংশন প্রোটোটাইপ এবং গ্লোবাল ভেরিয়েবল যোগ করুন।

আপনার পরবর্তী পদক্ষেপ হল কিছু ফাংশন প্রোটোটাইপ ঘোষণা করা।

    // ফাংশন প্রোটোটাইপ অকার্যকর প্রদর্শন (); অকার্যকর বিশেষ কী (); // গ্লোবাল ভেরিয়েবল ডবল rotate_y = 0; ডবল rotate_x = 0;

1994315 5 1
1994315 5 1

ধাপ 5. প্রধান () ফাংশন সেট আপ করুন।

    int main (int argc, char* argv ) {// GLUT আরম্ভ করুন এবং ব্যবহারকারীর পরামিতিগুলি glutInit (& argc, argv); // Z- বাফার glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH) সহ ডবল বাফার্ড ট্রু কালার উইন্ডো অনুরোধ করুন;

  • এই বিবৃতি আপনার পরিবেশ সেট আপ। ওপেনজিএল প্রোগ্রাম লেখার সময় মনে রাখার একটি বড় বিষয় হল যে আপনাকে অবশ্যই সবকিছু চাইতে হবে। এর জন্য আপনার প্রোগ্রামটি কীভাবে কাজ করে এবং আপনি যে কার্যকারিতাটি চান তা পেতে আপনাকে কী অন্তর্ভুক্ত করতে হবে সে সম্পর্কে আরও বেশি বোঝার প্রয়োজন। এই লাইনে, আপনি ডাবল বাফারিং, আরজিবি রঙ এবং একটি জেড-বাফার সহ ডিসপ্লে সেট আপ করবেন।
  • ডাবল বাফারিং গ্রাফিক্স প্রোগ্রামে একটি কৌশল ব্যবহার করা হয় যা স্ক্রিনে ছবি আঁকার কারণে সৃষ্ট সমস্যা দূর করে। প্রতিবার যখন আপনি দৃশ্যটি পুনরায় আঁকবেন, প্রথমে ডিসপ্লেটি মুছে ফেলতে হবে তারপর নতুন তথ্য আঁকা হবে। ডাবল বাফারিং ছাড়াই আপনি একটি ঝলকানি প্রভাব দেখতে পাবেন কারণ স্ক্রিনটি মুছে ফেলা হয়েছে এবং বারবার পুনরায় আঁকা হয়েছে।
  • এই সমস্যাটি আঁকার জন্য দ্বিতীয় বাফার যোগ করে ঠিক করা হয়েছে। এই পদ্ধতির সাহায্যে, প্রথম বাফারে একটি ছবি আঁকা হয় এবং সেই বাফারটি আপনাকে দেখানো হয়। পরবর্তী ফ্রেমটি দ্বিতীয় বাফারের দিকে টানা হবে এবং এটি সম্পন্ন হলে, দুটি বাফার স্থান পরিবর্তন করবে। আপনি অবিলম্বে দ্বিতীয় বাফারটি দেখতে পাবেন, কিন্তু, আমাদের থেকে লুকানো, প্রথম বাফারটি মুছে ফেলা হচ্ছে এবং তৃতীয় ফ্রেমের সাথে পুনরায় অঙ্কন করা হয়েছে যা শেষ হয়ে গেলে অদলবদল করা হবে।
  • আপনিও সক্ষম করতে চান আরজিবি রঙ আপনার উইন্ডোতে সিস্টেম।
  • জেড-বাফারিং আপনি যেভাবে 3D ইফেক্ট পেতে চান তা পাবেন। OpenGL x, y এবং z অক্ষের সাথে একটি ত্রিমাত্রিক সমন্বয় ব্যবস্থা ব্যবহার করে। কোনো বস্তু আপনার কাছাকাছি আছে এমন প্রভাব দেওয়ার জন্য z অক্ষে তার অবস্থান বৃদ্ধি করা হয়, তবে, এটিকে আরও দূরে দেখানোর জন্য z অক্ষে তার অবস্থান হ্রাস পায়।
1994315 6 1
1994315 6 1

ধাপ 6. উইন্ডো তৈরি করুন।

পরবর্তী ধাপ হল জানালা তৈরি করুন যার মধ্যে আপনি কিউব আঁকবেন। এই টিউটোরিয়ালে, উইন্ডোটিকে "অসাধারণ ঘন" বলা হয়েছে।

    // উইন্ডো glutCreateWindow ("Awesome Cube") তৈরি করুন;

1994315 7 1
1994315 7 1

ধাপ 7. গভীরতা পরীক্ষা সক্ষম করুন।

ওপেনজিএল একটি কঠোর ভাষা যাতে এটি অনুমান করে না যে কোনও বিশেষ বৈশিষ্ট্য সক্ষম। আপনার প্রোগ্রামটি যথাক্রমে 3-মাত্রায় প্রদর্শিত Z- বাফার ব্যবহার করে যা আপনি আগে দেখেছিলেন, আপনার প্রয়োজন গভীরতা-পরীক্ষা সক্ষম করুন । আপনি যখন ওপেনজিএল অন্বেষণ করতে থাকবেন, আপনি অনেক বৈশিষ্ট্য আবিষ্কার করবেন যা আপনাকে আলো, টেক্সচার, কুল-ফেসিং এবং আরও অনেক কিছু সহ সক্ষম করতে হবে।

    // Z- বাফার গভীরতা পরীক্ষা glEnable সক্ষম করুন (GL_DEPTH_TEST);

1994315 8 1
1994315 8 1

ধাপ 8. কলব্যাক ফাংশন যোগ করুন।

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

    // কলব্যাক ফাংশন glutDisplayFunc (ডিসপ্লে); glutSpecialFunc (specialKeys);

1994315 9 1
1994315 9 1

ধাপ 9. MainLoop শুরু করুন।

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

    // ইভেন্ট glutMainLoop () এর জন্য GLUT- এ পাস নিয়ন্ত্রণ; // OS রিটার্ন 0 এ ফিরে যান; }

3 এর অংশ 2: প্রদর্শন () ফাংশন

1994315 10 1
1994315 10 1

ধাপ 1. এই ফাংশনের উদ্দেশ্য বুঝুন।

আপনার কিউব আঁকার সমস্ত কাজ এই ফাংশনে সম্পন্ন হবে। আপনার ঘনক্ষেত্রের পিছনে সাধারণ ধারণা হল ছয়টি দিক পৃথকভাবে আঁকুন এবং তাদের যথাযথ অবস্থানে রাখুন।

ধারণাগতভাবে, চারটি কোণ সংজ্ঞায়িত করে এবং ওপেনজিএলকে লাইনগুলিকে সংযুক্ত করে এবং আপনি যে রঙটি সংজ্ঞায়িত করেন তা দিয়ে প্রতিটি দিক আঁকা হবে। এটি করার ধাপ নিচে দেওয়া হল।

1994315 11 1
1994315 11 1

পদক্ষেপ 2. glClear () যোগ করুন।

এই ফাংশনে আপনাকে প্রথম পদক্ষেপ নিতে হবে রঙ এবং Z বাফার পরিষ্কার করুন । এই পদক্ষেপগুলি ছাড়া, নতুন অঙ্কনগুলির অধীনে পুরানো অঙ্কনগুলি এখনও দৃশ্যমান হতে পারে এবং আঁকা বস্তুগুলি পর্দায় সঠিক অবস্থানে থাকবে না।

    void display () {// Clear screen and Z-buffer glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

1994315 12 1
1994315 12 1

ধাপ 3. glBegin () এবং glEnd () যোগ করুন।

OpenGL বস্তুকে বিভিন্ন বহুভুজের সংমিশ্রণ হিসেবে সংজ্ঞায়িত করে। ব্যবহার করে গ্লবেগিন () কমান্ড, আপনি কার্যকরভাবে একটি পেন্সিল রাখুন যা একটি আকৃতি আঁকবে। পেন্সিল তুলতে এবং একটি নতুন আকৃতি শুরু করতে, আপনাকে অবশ্যই ব্যবহার করতে হবে গ্লেন্ড () কমান্ড এই টিউটোরিয়ালে আপনি GL_POLYGON ব্যবহার করে কিউবের প্রতিটি পাশ আঁকবেন কিন্তু অন্যান্য আকার তৈরি করতে GL_LINE, GL_QUAD, বা GL_TRIANGLE এর মত অন্যান্য প্যারামিটার অপশন ব্যবহার করা সম্ভব।

  • এখানে আপনি আপনার ঘনক্ষেত্রের সামনে দিয়ে শুরু করবেন। পরে আপনি সব 6 পাশের রং যোগ করবে।
  • // বহু রঙের দিক - সামনে glBegin (GL_POLYGON); // পরবর্তী ধাপে verteices যোগ করা হবে glEnd ();

1994315 13 1
1994315 13 1

ধাপ 4. glVertex3f () যোগ করুন।

একবার আপনি বলে দিলেন যে আপনি আপনার বহুভুজ শুরু করতে চান, আপনাকে করতে হবে শীর্ষবিন্দু সংজ্ঞায়িত করুন বস্তুর glVertex এর একাধিক ফর্ম রয়েছে যা আপনি আপনার বস্তুর সাথে কী করতে চান তার উপর নির্ভর করে।

  • প্রথমটি হল আপনি কতগুলি মাত্রায় কাজ করছেন। glVertex3f এর উপরের 3 টি বলছে আপনি 3 টি মাত্রায় অঙ্কন করছেন। 2 বা 4 মাত্রায় কাজ করাও সম্ভব। GlVertex3f এ উপরের f বলছে আপনি ভাসমান পয়েন্ট সংখ্যার সাথে কাজ করছেন। আপনি হাফপ্যান্ট, পূর্ণসংখ্যা বা দ্বিগুণ ব্যবহার করতে পারেন।
  • লক্ষ্য করুন যে এই পয়েন্টগুলি একটিতে সংজ্ঞায়িত করা হয়েছে ঘড়ির কাঁটার বিপরীতে পদ্ধতি এই মুহুর্তে এটি খুব গুরুত্বপূর্ণ নয় কিন্তু যখন আপনি আলো, টেক্সচার এবং কুল-মুখোমুখি হয়ে কাজ শুরু করবেন, এটি অবিশ্বাস্যভাবে গুরুত্বপূর্ণ হয়ে উঠবে তাই আপনার পয়েন্টগুলিকে ঘড়ির কাঁটার বিপরীতে নির্ধারণ করার অভ্যাস করুন।
  • GlBegin () এবং glEnd () লাইনের মধ্যে শিরোনাম যোগ করুন।
  • // বহু রঙের দিক - সামনে glBegin (GL_POLYGON); glVertex3f (-0.5, -0.5, -0.5); // P1 glVertex3f (-0.5, 0.5, -0.5); // P2 glVertex3f (0.5, 0.5, -0.5); // P3 glVertex3f (0.5, -0.5, -0.5); // P4 glEnd ();

1994315 14 1
1994315 14 1

পদক্ষেপ 5. glColor3f () যোগ করুন।

glColor glVertex এর অনুরূপ পদ্ধতিতে কাজ করে। আপনি শর্টস, ইন্টিজার, ডাবলস বা ফ্লোটস হিসেবে পয়েন্ট সংজ্ঞায়িত করতে পারেন। প্রতিটি রঙের মান 0 থেকে 1 পর্যন্ত। GlColor3f () -এ 3 আলফা চ্যানেল ছাড়া আরজিবি কালার সিস্টেম বোঝায়। একটি রঙের আলফা তার স্বচ্ছতা নির্ধারণ করে। আলফা স্তর পরিবর্তন করতে, glColor4f () ব্যবহার করুন শেষ প্যারামিটারের মান 0 থেকে 1 পর্যন্ত অস্বচ্ছ থেকে স্বচ্ছ হওয়ার জন্য।

  • যখন আপনি glColor3f () কল করেন তখন সেই বিন্দু থেকে টানা প্রতিটি শীর্ষবিন্দু সেই রঙের হবে। অতএব, যদি আপনি চান যে চারটি শীর্ষবিন্দু লাল হতে পারে, তবে glVertex3f () কমান্ডের আগে যেকোনো সময় একবার রঙ সেট করুন এবং সমস্ত শীর্ষবিন্দু লাল হবে।
  • নীচের সংজ্ঞায়িত সামনের দিক দেখায় কিভাবে প্রতিটি শীর্ষবিন্দুর জন্য একটি নতুন রঙ নির্ধারণ করা যায়। যখন আপনি এটি করেন, আপনি OpenGL রঙের একটি আকর্ষণীয় সম্পত্তি দেখতে পারেন। যেহেতু বহুভুজের প্রতিটি শীর্ষবিন্দুর নিজস্ব রং আছে, তাই OpenGL স্বয়ংক্রিয়ভাবে রং মিশ্রিত করবে! পরবর্তী ধাপে দেখানো হবে কিভাবে একই রঙের সাথে চারটি শীর্ষবিন্দু বরাদ্দ করা যায়।
  • // বহু রঙের দিক - সামনে glBegin (GL_POLYGON); glColor3f (1.0, 0.0, 0.0); glVertex3f (0.5, -0.5, -0.5); // P1 হল লাল glColor3f (0.0, 1.0, 0.0); glVertex3f (0.5, 0.5, -0.5); // P2 হল সবুজ glColor3f (0.0, 0.0, 1.0); glVertex3f (-0.5, 0.5, -0.5); // P3 হল নীল glColor3f (1.0, 0.0, 1.0); glVertex3f (-0.5, -0.5, -0.5); // P4 হল বেগুনি গ্লেন্ড ();

1994315 15 1
1994315 15 1

ধাপ 6. অন্য দিকগুলি পরিচালনা করুন।

কিউবের অন্য পাঁচটি দিকের জন্য প্রতিটি শীর্ষবিন্দুর অবস্থান কী হবে তা খুঁজে বের করুন কিন্তু সরলতার জন্য, এগুলি আপনার জন্য গণনা করা হয়েছে এবং এতে অন্তর্ভুক্ত করা হয়েছে চূড়ান্ত প্রদর্শন () ফাংশন নিচে.

    // সাদা দিক - পিছনে glBegin (GL_POLYGON); glColor3f (1.0, 1.0, 1.0); glVertex3f (0.5, -0.5, 0.5); glVertex3f (0.5, 0.5, 0.5); glVertex3f (-0.5, 0.5, 0.5); glVertex3f (-0.5, -0.5, 0.5); glEnd (); // বেগুনি দিক - ডান glBegin (GL_POLYGON); glColor3f (1.0, 0.0, 1.0); glVertex3f (0.5, -0.5, -0.5); glVertex3f (0.5, 0.5, -0.5); glVertex3f (0.5, 0.5, 0.5); glVertex3f (0.5, -0.5, 0.5); glEnd (); // সবুজ দিক - বাম glBegin (GL_POLYGON); glColor3f (0.0, 1.0, 0.0); glVertex3f (-0.5, -0.5, 0.5); glVertex3f (-0.5, 0.5, 0.5); glVertex3f (-0.5, 0.5, -0.5); glVertex3f (-0.5, -0.5, -0.5); glEnd (); // নীল দিক - TOP glBegin (GL_POLYGON); glColor3f (0.0, 0.0, 1.0); glVertex3f (0.5, 0.5, 0.5); glVertex3f (0.5, 0.5, -0.5); glVertex3f (-0.5, 0.5, -0.5); glVertex3f (-0.5, 0.5, 0.5); glEnd (); // লাল দিক - নীচে glBegin (GL_POLYGON); glColor3f (1.0, 0.0, 0.0); glVertex3f (0.5, -0.5, -0.5); glVertex3f (0.5, -0.5, 0.5); glVertex3f (-0.5, -0.5, 0.5); glVertex3f (-0.5, -0.5, -0.5); glEnd (); glFlush (); glutSwapBuffers (); }

  • আমরা এই ফাংশনের জন্য কোডের শেষ দুটি লাইন যোগ করতে চাই। এইগুলো glFlush ();

    এবং glutSwapBuffers ();

    যা আমাদের ডাবল-বাফারিং প্রভাব দেয় যা আপনি আগে শিখেছিলেন।

3 এর অংশ 3: ব্যবহারকারীর ইন্টারেক্টিভিটি

1994315 16 1
1994315 16 1

ধাপ 1. specialKeys () যোগ করুন।

আপনি প্রায় সম্পন্ন করেছেন কিন্তু এই মুহুর্তে, আপনি একটি ঘনক আঁকতে পারেন কিন্তু এটি ঘোরানোর কোন উপায় নেই। এটি করার জন্য, আপনি করবেন একটি বিশেষ কী তৈরি করুন () ফাংশনটি আমাদের তীর কী টিপতে এবং কিউব ঘোরানোর অনুমতি দেয়!

  • এই ফাংশনটি কেন আপনি বিশ্বব্যাপী ভেরিয়েবলগুলি rotate_x এবং rotate_y ঘোষণা করেছেন। যখন আপনি ডান এবং বাম তীর কী টিপবেন, rotate_y 5 ডিগ্রী বৃদ্ধি বা হ্রাস পাবে। একইভাবে, যখন আপনি উপরের এবং নীচের তীর কীগুলি টিপবেন, তখন rotate_x সেই অনুযায়ী পরিবর্তন হবে।
  • void specialKeys (int key, int x, int y) {// ডান তীর - ঘূর্ণন 5 ডিগ্রী বাড়ান যদি (কী == GLUT_KEY_RIGHT) rotate_y += 5; // বাম তীর - 5 ডিগ্রী দ্বারা ঘূর্ণন হ্রাস করুন যদি (কী == GLUT_KEY_LEFT) rotate_y - = 5; অন্যথায় যদি (কী == GLUT_KEY_UP) rotate_x += 5; অন্যথায় যদি (কী == GLUT_KEY_DOWN) rotate_x -= 5; // অনুরোধ প্রদর্শন আপডেট glutPostRedisplay (); }

1994315 17 1
1994315 17 1

পদক্ষেপ 2. glRotate () যোগ করুন।

আপনার শেষ বিবৃতিটি হল সেই বিবৃতি যোগ করা যা আপনার বস্তুকে ঘোরাবে। ডিসপ্লে () ফাংশনে ফিরে যান এবং সামনে দিকের আগে, এই লাইনগুলি যুক্ত করুন:

    // রিসেট রূপান্তর glLoadIdentity (); // ঘোরান যখন ব্যবহারকারী পরিবর্তন করে rotate_x এবং rotate_y glRotatef (rotate_x, 1.0, 0.0, 0.0); glRotatef (rotate_y, 0.0, 1.0, 0.0); // বহু রঙের দিক - সামনে…।

  • প্রথমে লক্ষ্য করুন যে এর সিনট্যাক্স glRotatef () glColor3f () এবং glVertex3f () এর অনুরূপ কিন্তু সবসময় 4 টি প্যারামিটার প্রয়োজন। প্রথম প্যারামিটার হল ঘূর্ণনের ডিগ্রী যা প্রয়োগ করতে হবে। পরবর্তী তিনটি পরামিতি নির্ধারণ করে যে কোন অক্ষটি ঘুরতে হবে প্রথমটি x অক্ষ, দ্বিতীয়টি y অক্ষ এবং তৃতীয়টি z অক্ষ। এই মুহুর্তে আপনাকে কেবল x এবং y- অক্ষের দিকে ঘুরতে হবে।
  • আপনি আপনার প্রোগ্রামে যে সমস্ত রূপান্তর লেখেন তার অনুরূপ লাইনগুলির প্রয়োজন। ধারণাগতভাবে, আপনি এটিকে x অক্ষ সম্পর্কে আপনার বস্তুকে rotate_x দ্বারা সংজ্ঞায়িত পরিমাণ দ্বারা ঘোরানো এবং তারপর rotate_y দ্বারা y অক্ষের চারপাশে ঘোরানো হিসাবে মনে করতে পারেন। যাইহোক, ওপেনজিএল এই সমস্ত বিবৃতিগুলিকে এক ম্যাট্রিক্স রূপান্তরে একত্রিত করে। প্রতিবার যখন আপনি ডিসপ্লে ফাংশন কল করেন, আপনি একটি রূপান্তর ম্যাট্রিক্স তৈরি করেন এবং glLoadIdentity () আশ্বাস দেয় যে আপনি প্রতিটি পাসে একটি নতুন ম্যাট্রিক্স দিয়ে শুরু করবেন।
  • অন্যান্য রূপান্তর ফাংশন আপনি প্রয়োগ করতে পারেন glTranslatef () এবং glScalef ()। এই ফাংশনগুলি glRotatef () এর অনুরূপ ব্যতিক্রম ব্যতীত তারা শুধুমাত্র 3 টি প্যারামিটার নেয়, বস্তু অনুবাদ করতে বা স্কেল করার জন্য x, y, এবং z পরিমাণ।
  • একটি বস্তুর তিনটি রূপান্তর প্রয়োগ করার সময় সঠিক প্রভাব পেতে, আপনাকে সেগুলি সঠিক ক্রমে প্রয়োগ করতে হবে। সবসময় সেগুলো ক্রমে লিখুন glTranslate, glRotate, তারপর glScale । ওপেনজিএল মূলত রূপান্তরগুলিকে নীচে আপ পদ্ধতিতে প্রয়োগ করে। এটি বোঝার জন্য কল্পনা করার চেষ্টা করুন যে সাধারণ 1x1x1 ঘনকটি রূপান্তরগুলির সাথে কেমন হবে যদি ওপেনজিএল তাদের উপরে থেকে নীচে প্রয়োগ করে এবং যদি ওপেনজিএল তাদের নীচে থেকে উপরে প্রয়োগ করে।
1994315 18 1
1994315 18 1

ধাপ the. x- অক্ষ বরাবর ঘনক্ষেত্রকে 2 দ্বারা, y- অক্ষ বরাবর 2 দ্বারা ঘনকে স্কেল করার জন্য নিম্নোক্ত কমান্ড যোগ করুন, y- অক্ষের সমান 180 ডিগ্রী দ্বারা ঘনকে ঘোরান, এবং x- অক্ষ বরাবর ঘনকে 0.1 দ্বারা অনুবাদ করুন।

উপরে বর্ণিত হিসাবে সঠিক ক্রমে এইগুলি এবং আগের glRotate () কমান্ডগুলি সাজানোর বিষয়টি নিশ্চিত করুন। (যদি আপনি অনিশ্চিত হন তবে টিউটোরিয়ালের শেষে চূড়ান্ত কোডে এটি করা হয়েছে।)

    // অন্যান্য রূপান্তর glTranslatef (0.1, 0.0, 0.0); glRotatef (180, 0.0, 1.0, 0.0); glScalef (2.0, 2.0, 0.0);

1994315 19 1
1994315 19 1

ধাপ 4. আপনার কোড কম্পাইল করুন এবং চালান।

ধরুন আপনি আপনার কম্পাইলার হিসাবে gcc ব্যবহার করছেন, আপনার প্রোগ্রামটি কম্পাইল এবং পরীক্ষা করতে আপনার টার্মিনাল থেকে এই কমান্ডগুলি চালান।

    লিনাক্সে: gcc cube.c -o cube -lglut -lGL./ mycube on Mac: gcc -o foo foo.c -framework GLUT -framework OpenGL। lglu32 -lopengl32./ মাইকিউব

1994315 20 1
1994315 20 1

ধাপ 5. আপনার সম্পূর্ণ কোড চেক করুন।

এটি এইরকম হওয়া উচিত:

    // // ফাইল: mycube.c // লেখক: ম্যাট ডেইজলি // তৈরি: 4/25/2012 // প্রকল্প: ওপেনজিএলে একটি ঘনক্ষেত্র তৈরির সোর্স কোড // বর্ণনা: একটি ওপেনজিএল উইন্ডো তৈরি করে এবং একটি 3D কিউব আঁকে/ / যে ব্যবহারকারী তীরচিহ্নগুলি ব্যবহার করে ঘুরাতে পারে // // নিয়ন্ত্রণ: বাম তীর -ঘোরানো বাম // ডান তীর -ডানদিকে ঘোরান // উপরে তীর -ঘোরান উপরে // নিচে তীর -নিচে ঘোরান // ------ -------------------------------------------------- -// অন্তর্ভুক্ত // ------------------------------------------- --------------- #অন্তর্ভুক্ত #অন্তর্ভুক্ত #অন্তর্ভুক্ত #সংজ্ঞায়িত করুন --------------------------------------------- // ফাংশন প্রোটোটাইপ / / ------------------------------------------------- --------- অকার্যকর প্রদর্শন (); অকার্যকর বিশেষ কী (); // ------------------------------------------------ ---------- // গ্লোবাল ভেরিয়েবল // ---------------------------------- ------------------------ ডবল rotate_y = 0; ডবল rotate_x = 0; // ------------------------------------------------ ---------- // প্রদর্শন () কলব্যাক ফাংশন // ------------------------------- --------------------------- অকার্যকর প্রদর্শন () {// পরিষ্কার পর্দা এবং Z- বাফার glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // রিসেট রূপান্তর glLoadIdentity (); // অন্যান্য রূপান্তর // glTranslatef (0.1, 0.0, 0.0); // অন্তর্ভুক্ত নয় // glRotatef (180, 0.0, 1.0, 0.0); // অন্তর্ভুক্ত নয় // ব্যবহারকারী যখন rotate_x এবং rotate_y glRotatef (rotate_x, 1.0, 0.0, 0.0) পরিবর্তন করে তখন ঘোরান; glRotatef (rotate_y, 0.0, 1.0, 0.0); // অন্যান্য রূপান্তর // glScalef (2.0, 2.0, 0.0); // অন্তর্ভুক্ত নয় // বহু রঙের দিক - সামনে glBegin (GL_POLYGON); glColor3f (1.0, 0.0, 0.0); glVertex3f (0.5, -0.5, -0.5); // P1 হল লাল glColor3f (0.0, 1.0, 0.0); glVertex3f (0.5, 0.5, -0.5); // P2 হল সবুজ glColor3f (0.0, 0.0, 1.0); glVertex3f (-0.5, 0.5, -0.5); // P3 হল নীল glColor3f (1.0, 0.0, 1.0); glVertex3f (-0.5, -0.5, -0.5); // P4 হল বেগুনি গ্লেন্ড (); // সাদা দিক - পিছনে glBegin (GL_POLYGON); glColor3f (1.0, 1.0, 1.0); glVertex3f (0.5, -0.5, 0.5); glVertex3f (0.5, 0.5, 0.5); glVertex3f (-0.5, 0.5, 0.5); glVertex3f (-0.5, -0.5, 0.5); glEnd (); // বেগুনি দিক - ডান glBegin (GL_POLYGON); glColor3f (1.0, 0.0, 1.0); glVertex3f (0.5, -0.5, -0.5); glVertex3f (0.5, 0.5, -0.5); glVertex3f (0.5, 0.5, 0.5); glVertex3f (0.5, -0.5, 0.5); glEnd (); // সবুজ দিক - বাম glBegin (GL_POLYGON); glColor3f (0.0, 1.0, 0.0); glVertex3f (-0.5, -0.5, 0.5); glVertex3f (-0.5, 0.5, 0.5); glVertex3f (-0.5, 0.5, -0.5); glVertex3f (-0.5, -0.5, -0.5); glEnd (); // নীল দিক - TOP glBegin (GL_POLYGON); glColor3f (0.0, 0.0, 1.0); glVertex3f (0.5, 0.5, 0.5); glVertex3f (0.5, 0.5, -0.5); glVertex3f (-0.5, 0.5, -0.5); glVertex3f (-0.5, 0.5, 0.5); glEnd (); // লাল দিক - নীচে glBegin (GL_POLYGON); glColor3f (1.0, 0.0, 0.0); glVertex3f (0.5, -0.5, -0.5); glVertex3f (0.5, -0.5, 0.5); glVertex3f (-0.5, -0.5, 0.5); glVertex3f (-0.5, -0.5, -0.5); glEnd (); glFlush (); glutSwapBuffers (); } // ----------------------------------------------- ----------- // specialKeys () কলব্যাক ফাংশন // ------------------------------ ---------------------------- অকার্যকর বিশেষ কী (int কী, int x, int y) {// ডান তীর-5 দ্বারা ঘূর্ণন বাড়ান ডিগ্রী যদি (কী == GLUT_KEY_RIGHT) rotate_y += 5; // বাম তীর - 5 ডিগ্রী দ্বারা ঘূর্ণন হ্রাস করুন যদি (কী == GLUT_KEY_LEFT) rotate_y - = 5; অন্যথায় যদি (কী == GLUT_KEY_UP) rotate_x += 5; অন্যথায় যদি (কী == GLUT_KEY_DOWN) rotate_x -= 5; // অনুরোধ প্রদর্শন আপডেট glutPostRedisplay (); } // ----------------------------------------------- ----------- // প্রধান ফাংশন // ------------------------------- --------------------------- int প্রধান (int argc, char* argv ) {// GLUT আরম্ভ করুন এবং ব্যবহারকারীর পরামিতিগুলি glutInit & argc, argv); // Z- বাফার glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH) সহ ডবল বাফার্ড ট্রু কালার উইন্ডো অনুরোধ করুন; // উইন্ডো glutCreateWindow ("Awesome Cube") তৈরি করুন; // Z- বাফার গভীরতা পরীক্ষা glEnable সক্ষম করুন (GL_DEPTH_TEST); // কলব্যাক ফাংশন glutDisplayFunc (ডিসপ্লে); glutSpecialFunc (specialKeys); // ইভেন্ট glutMainLoop () এর জন্য GLUT- এ পাস নিয়ন্ত্রণ; // OS রিটার্ন 0 এ ফিরে যান; }

প্রস্তাবিত: