আমি হাড় / ত্বক ব্যবহার করে অ্যানিমেশন অনুশীলন করছি। আমি শেডারটি ভার্টেক্সে এক ম্যাট্রিক্স প্রেরণের চেষ্টা করছি। আমি এই দুটি পদ্ধতির কথা ভাবতে পারি।
পদ্ধতি 1
এই জাতীয় প্রতিটি হাড়ের ম্যাট্রিক্সের জন্য আমার একটি ইউনিফর্ম হ্যান্ডেল রয়েছে
u_Bone0 = GLES20.glGetUniformLocation(mProgram, "u_Bone[0]");
u_Bone1 = GLES20.glGetUniformLocation(mProgram, "u_Bone[1]");
এবং onDraw
আমি তাদের প্রত্যেককে শ্যাডারে প্রেরণ করব:
GLES20.glUniformMatrix4fv(u_Bone0, 1, false, matrix0, 0);
যদি আমার কাছে প্রচুর পরিমাণে ম্যাট্রিক থাকে তবে এটি অবশ্যই ভাল উপায় নয় approach আমার দ্বিতীয় ধারণাটি যা আমি এখনও চেষ্টা করি নি যেহেতু রিফ্যাক্টরের জন্য প্রচুর কোড রয়েছে
পদ্ধতি 2
glUniformMatrix4fv
তাদের একবারে পাঠানোর জন্য ব্যবহার করতে হবে (ধরুন আমার কাছে 20 টি ম্যাট্রিক রয়েছে)
GLES20.glUniformMatrix4fv(u_Bones, 20, false, matrices, 0);
যেখানে matrices
হয় float[16 * 20]
। তবে তারপরে প্রতিটি হাড়ের ম্যাট্রিক পরিবর্তন করা কিছুটা ক্লান্তিকর হয়ে ওঠে। উদাহরণস্বরূপ, আমি যদি তৃতীয় ম্যাট্রিক্স পেতে চাই তবে আমার লাইনের সাথে কিছু দরকার
float[] _3rd = Arrays.copy(matrices, 3*16, 4*16);
এবং মানগুলি সংরক্ষণ করা আরও বিরক্তিকর হয়ে উঠতে পারে।
আমি এখন পদ্ধতি 1 ব্যবহার করছি তবে এটি খুব স্মার্ট দেখাচ্ছে না ...
ওপেনজিএল ইএস 2 শেডারে একাধিক ম্যাট্রিক পাঠানোর সর্বোত্তম উপায় কী?
এলই: আমি অ্যান্ড্রয়েড ব্যবহার করছি, তাই আমি জাভা সমাধান খুঁজছি।