View Full Version : سوال درباره شفافیت در OpenGL
helisa
سه شنبه 30 آبان 1391, 17:39 عصر
با سلام خدمت همه دوستان
یه سوال درباره موله آلفا(شفافیت) در OpenGL دارم، ممنون می شم کمک کنید.
چطور میشه صفحه اجرای OpenGL رو شفاف تعریف کرد، طوری که وقتی برنامه رو اجرا می کنیم، دسکتاپ از پشت صفحه اجرای OpenGL معلوم باشه.
خیلی لطف می کنین اگه قطعه کدش رو هم بذارین.
با تشکر
amin1softco
سه شنبه 30 آبان 1391, 19:54 عصر
قدیما من یک گفتگویی با یکی از دوستان داشتم که می گذارم شاید بدردتون خورد :
می تونی بگی اینجا چطوری این برنامه با glee نوشته شده ؟
http://allanpetersen.com/?p=155
یکی از الحاقی هایی که استفاده کرده FBO هست که برای RenderToTexture استفاده میشه و به جای فریم بافر معمولی عمل میکنه برای استفاده از FBO به نظر من حداقل باید GLSL و MTR (Multi render target( رو بلد باشی. FBO داخل OpenGL 3.0+ مطرح شد اما خیلی از سخت افزارهای OpenGL 2 و حتی 1.5 هم توی قالب الحاقی اون رو پشتیبانی می کنن (مخصوصا مال nvidia) و استفاده از اون بی خطر هست.
مورد بعدی یه قابلیت داخل windows 2000 به بعد هست که بهش layerd window گفته میشه و اجازه میده از کانال آلفا برای transpersy استفاده بشه. پس اگر شما صحنه تون رو داخل یه تکسچر که کانال آلفا داره رندر کنید و بعد تکسچر رو به قالب bitmap ببرین میتونین داخل دسکتاپ ویندوز بدون داشتن فریم پنجره 3D رندر کنید:
http://seganx.com/?tag=layered-windows
در کل glut این قابلیت را در خودش ندارد ولی سورس بالا با glee اینکار را کرده. باید یکجوری هندل پنجره را بدست بیارید مثلاً با تایتلش شفافیتش را تنظیم کنید قدیما یک برنامه ایی بود که وقتی صداش می زدی خودش این کار را می کرد یعنی داخل برنامتون اجراش می کردید که راحتترین راه است.
amin1softco
چهارشنبه 01 آذر 1391, 01:03 صبح
با قطعه کد زیر می توانید پنجره GLUT را شفاف کنید ....
# include <windows.h>
void init(void)
{
.
.
.
int exStyle;
Handle = FindWindow(NULL,L"تیتر پنجره شما");//تیتر پنجره که در تابع glutCreateWindow مشخص شده
// Enable window layering
exStyle = GetWindowLongA(Handle, GWL_EXSTYLE);
if ((exStyle & WS_EX_LAYERED) == 0)
SetWindowLong(Handle, GWL_EXSTYLE, exStyle | WS_EX_LAYERED);
SetLayeredWindowAttributes(Handle, RGB(0xff, 0xff, 0xff), 0x7F, LWA_ALPHA);
.
.
.
}
helisa
جمعه 03 آذر 1391, 05:17 صبح
با قطعه کد زیر می توانید پنجره GLUT را شفاف کنید ....
# include <windows.h>
void init(void)
{
.
.
.
int exStyle;
Handle = FindWindow(NULL,L"تیتر پنجره شما");//تیتر پنجره که در تابع glutCreateWindow مشخص شده
// Enable window layering
exStyle = GetWindowLongA(Handle, GWL_EXSTYLE);
if ((exStyle & WS_EX_LAYERED) == 0)
SetWindowLong(Handle, GWL_EXSTYLE, exStyle | WS_EX_LAYERED);
SetLayeredWindowAttributes(Handle, RGB(0xff, 0xff, 0xff), 0x7F, LWA_ALPHA);
.
.
.
}
نوع متغیر Handle که تعریف کردین رو میشه لطفا بگین؟؟
amin1softco
جمعه 03 آذر 1391, 08:11 صبح
خوب مگه کی تونه چند نوع داشته باشه ؟
HWND Handle=NULL;
این برنامه (http://barnamenevis.org/showthread.php?369742-%D9%85%D8%B4%DA%A9%D9%84-%D8%A8%D8%A7-win32) را هم ببنید
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.