লাইট সোর্স কনফিগারেশন
থ্রি-ডি গ্রাফিক্সে লাইট সোর্স (Light Source) ব্যবহৃত হয়, যাতে অবজেক্টগুলো সঠিকভাবে রেন্ডার হয় এবং সেগুলোর উপর আলোর প্রভাব দেখতে পাওয়া যায়। ওয়েবজিএল (WebGL) এ লাইট সোর্স কনফিগারেশন করতে সাধারণত দুটি প্রধান ধরনের লাইট ব্যবহার করা হয়:
- পয়েন্ট লাইট (Point Light)
- ডিরেকশনাল লাইট (Directional Light)
এই দুটি লাইটের ভিন্ন ভিন্ন বৈশিষ্ট্য থাকে, এবং সেগুলো নির্দিষ্ট পরিস্থিতিতে ব্যবহৃত হয়।
পয়েন্ট লাইট (Point Light)
পয়েন্ট লাইট হলো একটি লাইট সোর্স যা ৩ডি স্পেসে একটি নির্দিষ্ট পয়েন্ট থেকে আলোকিত করে। এটি একটি সাধারণ লাইট সোর্স যা সর্বদা একরকমভাবে আলো ছড়ায়, তবে তার প্রভাব অবজেক্টের দূরত্বের উপর নির্ভর করে। সাধারণত, পয়েন্ট লাইটের আলোর শক্তি অবজেক্টের সঙ্গে যত বেশি দূরত্ব বাড়ে, তত কমে আসে।
পয়েন্ট লাইটের গুণাবলী:
- পজিশন (Position): এটি 3D স্পেসে একটি নির্দিষ্ট পয়েন্টে অবস্থিত থাকে।
- কীভাবে কাজ করে: এই লাইটটি ৩৬০ ডিগ্রীতে আলো ছড়ায়, যা প্যান (pan) ও টিল্ট (tilt) এর মাধ্যমে রেন্ডার করা যায়।
পয়েন্ট লাইট কনফিগারেশন:
// পয়েন্ট লাইটের পজিশন, অল্প শক্তি এবং দূরত্ব সেট করা
var pointLight = {
position: [1.0, 2.0, 3.0], // পয়েন্ট লাইটের পজিশন
color: [1.0, 1.0, 1.0], // আলো রঙ (সাদা)
intensity: 1.0 // আলো শক্তি
};
এখানে, position হচ্ছে লাইট সোর্সের স্থান, color হচ্ছে আলোর রঙ এবং intensity আলোর শক্তি।
ডিরেকশনাল লাইট (Directional Light)
ডিরেকশনাল লাইট হলো এমন একটি লাইট সোর্স যা অনেক দূর থেকে আসে এবং একটি নির্দিষ্ট দিক থেকে আলো ছড়ায়। এটি মূলত সূর্যের আলো বা বৃহৎ লাইট সোর্সের মতো কাজ করে, যেখানে আলোর প্রভাব কোনো নির্দিষ্ট পয়েন্টে সীমাবদ্ধ না হয়ে, একটি নির্দিষ্ট দিকের দিকে ছড়িয়ে পড়ে।
ডিরেকশনাল লাইটের গুণাবলী:
- ডিরেকশন (Direction): এটি আলোর নির্দিষ্ট দিক নির্দেশ করে।
- দূরত্বের প্রভাব নেই: এটি নির্দিষ্ট দূরত্ব থেকে আলো প্রদান করে না, বরং নির্দিষ্ট দিক থেকে সব স্থানে সমানভাবে আলো প্রদান করে।
ডিরেকশনাল লাইট কনফিগারেশন:
// ডিরেকশনাল লাইটের ডিরেকশন, রঙ এবং শক্তি সেট করা
var directionalLight = {
direction: [0.0, -1.0, 0.0], // আলোর দিক
color: [1.0, 1.0, 1.0], // আলো রঙ (সাদা)
intensity: 1.0 // আলো শক্তি
};
এখানে, direction হচ্ছে আলোর দিক নির্দেশক, color হচ্ছে আলোর রঙ এবং intensity হচ্ছে আলোর শক্তি। এই ধরনের লাইটে আলোর তীব্রতা অবস্থান অনুযায়ী পরিবর্তন হয় না।
লাইট সোর্স ব্যবহার করে গ্রাফিক্স রেন্ডারিং
ওয়েবজিএল এ লাইট সোর্স কনফিগারেশনের জন্য সাধারণত শেডার কোড ব্যবহার করা হয়। শেডারে, পয়েন্ট লাইট এবং ডিরেকশনাল লাইটের প্রভাব ব্যবহার করে ৩ডি অবজেক্টের উপর আলোর হিসাব করা হয়।
শেডারে লাইট সোর্স প্রভাব যোগ করার উদাহরণ:
// Vertex Shader (vertex_shader.glsl)
attribute vec4 a_position;
attribute vec3 a_normal;
uniform mat4 u_modelViewMatrix;
uniform mat4 u_projectionMatrix;
uniform vec3 u_lightPosition;
uniform vec3 u_lightColor;
uniform float u_lightIntensity;
varying vec3 v_normal;
varying vec3 v_light;
void main() {
v_normal = a_normal;
vec4 lightDirection = u_lightPosition - a_position.xyz;
v_light = normalize(lightDirection.xyz);
gl_Position = u_projectionMatrix * u_modelViewMatrix * a_position;
}
এখানে, u_lightPosition পয়েন্ট লাইটের অবস্থান, এবং u_lightColor, u_lightIntensity আলোর রঙ ও শক্তি বোঝায়। শেডারের মাধ্যমে আলোর প্রভাব অবজেক্টের উপর প্রয়োগ করা হয়।
ফ্র্যাগমেন্ট শেডারে আলোর প্রভাব (Fragment Shader):
// Fragment Shader (fragment_shader.glsl)
precision mediump float;
varying vec3 v_normal;
varying vec3 v_light;
uniform vec3 u_lightColor;
uniform float u_lightIntensity;
void main() {
float diffuse = max(dot(v_normal, v_light), 0.0);
vec3 color = u_lightColor * u_lightIntensity * diffuse;
gl_FragColor = vec4(color, 1.0);
}
এখানে, diffuse ক্যালকুলেশন পয়েন্ট লাইটের আলোর তীব্রতা নির্ধারণ করে, এবং color আলোর রঙ ও শক্তির সাথে শেডারটি যুক্ত করে।
সারাংশ
ওয়েবজিএল ডেভেলপমেন্টে পয়েন্ট লাইট এবং ডিরেকশনাল লাইট দুটি গুরুত্বপূর্ণ লাইট সোর্স, যা ৩ডি গ্রাফিক্সে আলোর প্রভাব সঠিকভাবে দেখানোর জন্য ব্যবহৃত হয়। পয়েন্ট লাইট একটি নির্দিষ্ট পয়েন্ট থেকে আলো ছড়ায়, যা দূরত্বের উপর নির্ভর করে, আর ডিরেকশনাল লাইট একটি নির্দিষ্ট দিক থেকে আলোর প্রভাব দেয়, যা কোনও নির্দিষ্ট দূরত্বের উপর নির্ভর করে না। এই দুই ধরনের লাইট ওয়েবজিএল গ্রাফিক্সে আলোর প্রভাব সৃষ্টি করতে সহায়তা করে, যার মাধ্যমে বাস্তবসম্মত দৃশ্য তৈরি করা সম্ভব।
Read more