OpenGL এ একটি ত্রিভুজ নির্ধারণ করা খুবই সহজ, কিন্তু আপনি যদি একটু বেশী জটিল কিছু চান তখন কী হবে? ধরুন বর্গক্ষেত্র? এটা করার অনেক উপায় আছে, কিন্তু OpenGL এর মধ্যে ঐ শেপ/গঠন অঙ্কন করার একটি সাধারণ পথ হচ্ছে দুইটা ত্রিভুজ এক সাথে অঙ্কন করা:
ফিগার ১. দুইটি ত্রিভুজ ব্যবহার করে একটি বর্গক্ষেত্র অঙ্কন করুন
পূনরায়, উভয় ত্রিভুজের জন্য একটি কাউন্টার-ক্লক-ওয়াইজ ক্রমের মধ্যে আপনার শীর্ষবিন্দুগুলো (vertices) নির্ধারন করা যা এই শেপকে প্রতিনিধিত্ব করে, ভ্যালু একটি ByteBuffer এর মধ্যে রাখে। প্রতিটা ত্রিভুজ কর্তৃক দুইবার শেয়ার হওয়া দুইটা কোঅরডিনেটস কে নির্ধারন করা পরিহার করতে, OpenGL ES গ্রাফিক্স পাইপলাইন কে বলার জন্য যে এই শীর্ষবিন্দুগুলো (vertices) কীভাবে ড্র করতে হয় তার জন্য ড্রয়িং লিস্ট ব্যবহার করুন। এখানে এই শেপের জন্য কোড দেয়া হলো:
public class Square {
private FloatBuffer vertexBuffer;
private ShortBuffer drawListBuffer;
// number of coordinates per vertex in this array
static final int COORDS_PER_VERTEX = 3;
static float squareCoords[] = {
-0.5f, 0.5f, 0.0f, // top left
-0.5f, -0.5f, 0.0f, // bottom left
0.5f, -0.5f, 0.0f, // bottom right
0.5f, 0.5f, 0.0f }; // top right
private short drawOrder[] = { 0, 1, 2, 0, 2, 3 }; // order to draw vertices
public Square() {
// initialize vertex byte buffer for shape coordinates
ByteBuffer bb = ByteBuffer.allocateDirect(
// (# of coordinate values * 4 bytes per float)
squareCoords.length * 4);
bb.order(ByteOrder.nativeOrder());
vertexBuffer = bb.asFloatBuffer();
vertexBuffer.put(squareCoords);
vertexBuffer.position(0);
// initialize byte buffer for the draw list
ByteBuffer dlb = ByteBuffer.allocateDirect(
// (# of coordinate values * 2 bytes per short)
drawOrder.length * 2);
dlb.order(ByteOrder.nativeOrder());
drawListBuffer = dlb.asShortBuffer();
drawListBuffer.put(drawOrder);
drawListBuffer.position(0);
}
}
এই উদাহরণ আপনাকে OpenGL দিয়ে আরও জটিল শেপ তৈরী করা বিষয়গুলো দেখাবে। সাধারণভাবে, আপনি অবজেক্ট ড্র করতে ত্রিভুজের সংগ্রহ ব্যবহার করেন। পরবর্তী অনুশীলনীতে আপনি শিখবেন স্ক্রিনে কীভাবে এই শেপগুলো অঙ্কন করা হবে।