ورود

View Full Version : سوال: ایجاد پلی گان



shahin bahari
پنج شنبه 28 اردیبهشت 1391, 17:19 عصر
سلام.
من دنبال پیاده کردن تابعی هستم که به کمک اون بتونم یه پلی گان ایجاد کنم. به این صورت که چند تا نقطه رو به تابع بدم و این نقاط رو به هم وصل کنه و فضای داخل اون رو پر کنه.لطفا در مورد روش کار راهنمایی کنید.
مرسی از همه.

amin1softco
پنج شنبه 28 اردیبهشت 1391, 21:56 عصر
خوب شما به نظرم خودتون رو به زحمت نندازید چون قبلاً تمام بسته های گرافیکی این مورد رو تدارک دیده اند بهتره روی کار های بزرگ تر سرمایه گذاری کنید :دی
در openGL اینجوری می شه

glBegin(GL_QUADS); // Draw A Quad
glVertex3f(-1.0f, 1.0f, 0.0f); // Top Left
glVertex3f( 1.0f, 1.0f, 0.0f); // Top Right
glVertex3f( 1.0f,-1.0f, 0.0f); // Bottom Right
glVertex3f(-1.0f,-1.0f, 0.0f); // Bottom Left
glEnd(); // Done Drawing The Quad

در دایرکس http://www.gamedev.net/page/resources/_/technical/directx-and-xna/directx-8-graphics-and-video-a-fresh-start-r1247
ولی در کل می شه .

shahin bahari
پنج شنبه 28 اردیبهشت 1391, 22:03 عصر
ممنون به خاطر اینکه جواب دادید.
امکان استفاده از این کتابخونه ها به دلیل سنگین بودن رو ندارم.(تو محیط بدون سیستم عامل برنامه میخواد اجرا بشه:لبخند:) برای همین دنبال روش کلی اون هستم....

amin1softco
جمعه 29 اردیبهشت 1391, 00:09 صبح
دیگه نهایتش اینه که شما یک تابعی برای روشن کردن یک پیکسل دارید حالا دیگه خودتون با حلقه های for و ماتریس ها پیادش کنید در ضمن openGL متن باز تشریف داره و می تونید کدهایی که برای این کار استفاده می کنه را رویت کنید و در پروژه خودتون استفاده کنید. ولی من در این بحث های تخصصی شرکت نمی کنم :دی

shahin bahari
جمعه 29 اردیبهشت 1391, 00:30 صبح
تابع ست کردن پیکسل و خط و ..... رو دارم.
اگه میدونستم چطور با for پیادش کنم که نمیپرسیدم:متفکر: مشکل همین هست که با چه الگوریتمی باید این فضا رو پر کنم. بهینه بودن از نظر سرعت هم مهم هست در مرحله بعد!
پیدا کردن یه همچین چیزی تو یه کتابخونه به این بزرگی همچین آسونم نیست.
بحث خیلی هم تخصصی نیست.کمک کنید روش کار رو پیدا کنم....

amin1softco
جمعه 29 اردیبهشت 1391, 20:12 عصر
خوب شما تابع خط رو دارید ابتدا باید بین نقاطی که از کاربر دریافت می شه خطوط را ترسیم کنید و بعدش باید بتونید رنگ هر پیکسل را هم بدست بیارید با تابع getpixel و صفحه نمایش هم یک ماتریس بزرگه می تونید با 2 تا حلقه تو در تو کل صفحه رو مثل یک ماتریس پیمایش کنید حالا وقتی شما به اولین پیکسل با رنگ مورد نظر رسیدید باید شروع به روشن کردن پیکسل ها با تابع setpixel کنید تا جایی که به پیکسل بعدی برسید باید پیکسل ها روشن بشه .
یک همچین کدی بعد از ترسیم خطوط لازمه :


for (i =1 ; i<300;i++)
for (j =1 ; j<200;j++)
if ((getpixel == your color) || (falg == true)){
flag = true;
setpixel = color;
if (getpixel == your color) flag =false;
}


البته الگوریتم های زیادی برای پر کردن سطوح وجود داره یک روش دیگه روش بازگشتی است که شما یک نقطه وسط نقاط پیدا می کنید و شروع به رنگ کردن پیکسل ها می کنید تا به نقاطی که قبلاً رنگ شده برسیم.
اینجا
http://www.cplusplus.com/forum/general/39560/

pswin.pooya
شنبه 30 اردیبهشت 1391, 12:29 عصر
1. برای ایجاد پلیگان می تونید از GL_POLYGON در تابع glBegin استفاده کنید. (توجه کنید که چند ضلعی باید محدب باشه)

2. اگر در محیطی هستند که نمی تونید از کتابخونه ها استفاده کنید. می تونید به کتاب سیاه گرافیک کافمن مراجعه کنید. و یا یکی از کتابهای گرافیک کامپیوتری موجود در بازار ایران رو تهیه کنید و بخونید.

3. در مورد پر کردن داخل اشکال هم متدهای مختلفی وجود داره که عبارتند از:


http://en.wikipedia.org/wiki/Flood_fill
http://en.wikipedia.org/wiki/Scanline_fill#Scanline_fill
و ...