170 likes | 440 Views
به نام خداوند هستی بخش یگانه. جلسه یازدهم. OpenGL برنامه نویسی گرافیکی با. A.M. Safaei. PhD candidate. جلسه یازدهم. گرافیک کامپیوتری. نور پردازی و روش های مصورسازی سطح. جلسه یازدهم. گرافیک کامپیوتری. نور پردازی در OpenGL. جلسه یازدهم. گرافیک کامپیوتری.
E N D
به نام خداوند هستی بخش یگانه جلسه یازدهم OpenGLبرنامه نویسی گرافیکی با A.M. Safaei PhD candidate
جلسه یازدهم گرافیک کامپیوتری نور پردازی و روش های مصورسازی سطح
جلسه یازدهم گرافیک کامپیوتری • نور پردازی در OpenGL
جلسه یازدهم گرافیک کامپیوتری • نور پردازی در OpenGL • مدل نور پردازی یا مدل سایه زنی برای محاسبه شدن رنگی که باید در یک نقطه در سطح شی ء ببینیم به کار می رود. • مدل بندی رنگها و جلوه های نوری که باید در سطح یک شی مشاهده کنیم کار پیچیده ای است، برای کاهش محاسبات برنامه ها در مدل های نورپردازی از مدل های تجربی و قوانین فیزیکی استفاده می کنیم. • مدل نور پردازی فیزیکی شامل عواملی مانند نوع شی ء ، مکان شی ء نسبت به منبع نور و اشیاء دیگر، همچنین شرایط منبع نوری است که در صحنه قرار می دهیم.
جلسه یازدهم گرافیک کامپیوتری • منابع نور در OpenGL • وقتی به یک جسم مات و غیر درخشان نگاه می کنیم، نوری را می بینیم که از سطح شی منعکس می شود، مجموع نور بازتابیده با حاصلجمع نورهای که از منابع نور منتشر شده و نورهایی که اط سطوح دیگر بازتابیده است برابر است. • منبع نور را منبع مولد نور و سطوح منعکس کننده را منابع بازتابنده نور می نامند. • یک شی تابان، در حالت کلی می تواند هم مولد نور و هم بازتابنده نور باشد ( مثل یک گوی پلاستیکی با یک لامپی درون آن).
جلسه یازدهم گرافیک کامپیوتری • منابع نور در OpenGL • نور محیطی • در صورتی که اشیاء نزدیک یک جسم، نورپردازی شده باشند، سطحی که مستقیما در معرض منبع نور هم نباشد قابل مشاهده خواهد بود. • نور محیطی هیچ مشخصه فضایی یا جهت ندارد. مقدار نور محیطی در یک صحنه در مجاورت هر شی در تمام سطوح و در تمام جهات ثابت است. • شدت رنگ بازتابیده از هر سطح به خواص نوری سطح بستگی دارد، یعنی چقدر از انرژی را بازتابنده و چقدر را جذب کند.
جلسه یازدهم گرافیک کامپیوتری • منابع نور در OpenGL • بازتابش انتشاری • سطوح زبر و رگه دار نور منعکس شده را در تمام جهات پخش می کند، این نور پخش شده را بازبابش انتشاری می نامند. • بازتابش انتشاری روی تمام سطوح در یک صحنه ثابت بوده و مستقل از جهت دید است. • برای هر سطحی که کسری از نور به بصورت انتشاری منعکس می کند پارامتری بنام Kd که مقداری بین صفر تا یک دارد در نظر میگیرند. • سطحی که نور بیشتری بصورت انتشاری باز می تاباند، kd نزدیک به یک می شود و بلعکس سطحی که نور بیشتری را در مجاورت خود جذب می کند kd به صفر نزدیک می شود.
جلسه یازدهم گرافیک کامپیوتری • منابع نور در OpenGL • بازتابش آینه ای • هنگامی که به یک سطح براق مانند یک فلز صیقلی نگاه می کنیم، در زاویه های خاصی یک نقطه نورانی می بینیم، این پدیده را بازتابش آینه ای می نامند، که نتیجه بازتابش کامل یا تقریبا کامل نور مجاور است که در یک ناحیه حول زاویه بازتابش آینه ای متمرکز شده است. • زاویه بازتابش برابر است با زاویه تابش نور. • شدت بازتابش آینه ای به خواص ماده سطح مربوطه و زاویه تابش، رنگ منبع نور مجاور و عوامل دیگر بستگی دارد.
جلسه یازدهم گرافیک کامپیوتری • نور پردازی در OpenGL • برای افزودن نور به صحنه در OpenGL چند مرحله باید انجام شود: • تعریف بردارهای نرمال برای هر راس از هر شیء موجود در صحنه . این بردارها جهت شیء را نسبت به منبع نور تعیین می کنند. • ایجاد، انتخاب و تعیین مکان یک یا چند منبع نور • ایجاد و انتخاب مدل نورپردازی که نور محیطی جامع را تعریف کرده و ناحیه تحت تاثیر نور را برای محاسبات مربوطه مشخص می کند. • تعریف خواص ماده ای برای تمام اشیاء موجود در صفحه نمایش
جلسه یازدهم گرافیک کامپیوتری • تعریف بردارهای نرمال • بردار نرمال را برای هر چند ضلعی یا برای هر رأس تعریف می کنند. • رئوس یک چند ضلعی می توانند دارای یک بردار نرمال ( در سطح تخت) و یا بردارهای نرمال مختلف ( در سطح منحنی) باشند. • برای انتساب بردار نرمال یه یک رأس از دستور glNormal*( ) که قبل از glVertex*( ) استفاده می شود.
جلسه یازدهم گرافیک کامپیوتری • تعریف بردارهای نرمال • این تابع قبل از تابع Vertex بکار می رود و بسته به نوع پارامترهایش دارای شکلهای مختلفی است. glBegin (GL_POLYGON); glNormal3fv(n0); glVertex3fv(v0); glNormal3fv(n1); glVertex3fv(v1); glNormal3fv(n2); glVertex3fv(v2); glNormal3fv(n3); glVertex3fv(v3); glEnd();
جلسه یازدهم گرافیک کامپیوتری • تعریف بردارهای نرمال • نرمالسازی • بردار نرمال می تواند هر اندازه ای داشته باشد اما بهتر است قبل از نور پردازی، مولفه های بردارهای نرمال را بر طول بردار تقسیم کنیم تا بردارهایی به طول واحد داشته باشیم، به این عمل نرمالسازی گویند. • در صورتی استفاده از مقیاس طول بردارهای نرمال تغییر خواهد کرد ، که در اینصورت مجددا نیاز به نرمال سازی می باشد که توسط پارامتر GL_NORMALIZE انجام می شود. glEnable (GL_NORMALIZE)
جلسه یازدهم گرافیک کامپیوتری • ایجاد، انتخاب و تعیین مکان یک یا چند منبع نور • منابع نور خواصی مانند رنگ، مکان و جهت دارند. تعیین ویژگیهای منبع نور توسط دستور glLight *( ) تعیین می شود. • پارامتر Light یکی از منابع نور است که توسط OpenGL فراهم می شود و حداکثر 8 منبع نور می توان بصورت همزمان بکار برده شود که با پارامترهای GL_Light0 تا GL_Light7 تعیین می شود. • هر پارامتر نور برای تعیین خصوصیات منبع نور بطور مستقل عمل می کند که جهت استفاده پارامتر مربوطه به glEnable ارسال می شود. glLight fv( light, pname, *param)
جلسه یازدهم گرافیک کامپیوتری • ایجاد، انتخاب و تعیین مکان یک یا چند منبع نور • pnameپارامتری است که جهت تعیین ویژگیهای نور بکار می رود و دارای حالات زیر می باشد که هر کدام بصورت جداگانه بکار می روند: • GL_AMBIENT : تعیین ویژگیهای محیطی • GL_DIFFUSE : تعیین ویژگیهای انتشاری • GL_SPECULAR : تعیین ویژگیهای آینه ای • GL_POSITION : تعیین ویژگیهای مکان منبع نور glLight fv( light, pname, *param)
جلسه یازدهم گرافیک کامپیوتری • ایجاد، انتخاب و تعیین مکان یک یا چند منبع نور • *param اشاره گر به آرایه ای است که پارامترها ی عددی مربوطه به هر کدام از صفات نور را درخود دارد. • OpenGL برای تعیین مکان و جهت منبع نور همانند اشکال پایه ای هندسی تحت تاثیر تبدیلات ماتریسی قرار میگیرد. • زمانی که فرمان glLight فراخوانی شود تا مکان و جهت منبع نور تعیین شود ، مکان یا جهت منبع نور توسط ماتریس نما مدل تبدس شده و در مختصات چشمی ذخیره می شود. glLight fv( light, pname, *param)
جلسه یازدهم گرافیک کامپیوتری • ایجاد و انتخاب مدل نورپردازی • مدل نورپردازی در OpenGL درای سه مولفه است: • شدت رنگ نور محیطی • آیا مکان نور در نزدیکی محل صحنه قرار دارد یا در فاصله بی نهایت؟ • آیا محاسبات نور برای دو رویه پوسته اشیاء بطور مستقل انجام شود یا نه ؟ • برای تعیین مدل نورپردازی: glLightModel*( )
جلسه یازدهم گرافیک کامپیوتری • ایجاد و انتخاب مدل نورپردازی • glLightModel ( GL enumpname, Glfloatparam); • glLightModel ( GL enumpname, Glint param);