PDA

View Full Version : کار با گرافیک



Erfan.BT
پنج شنبه 05 دی 1392, 23:41 عصر
سلام،
من در Turbo C دارم با Graphic Mode کار می کنم.
می خواستم بدونم چجوری یک جسم سه بعدی رو حول محور های x,y,z دوران بدم
من از فرمول ماتریس دوران استفاده کردم و نقاط یک مکعب مستطیل رو در فرمول قرار می دم و x,y اون رو چاپ میکنم ولی شکل حاصل نادرسته.
کسی میتونه راهنمایی کنه ؟

مصطفی ساتکی
جمعه 06 دی 1392, 09:33 صبح
سلام.
دوست عزیز این کارو توی turbo c انجام ندید اینکارو ما 14 سال پیش تو اون کامپایلر انجام می دادیم از vs2012 بهمراه OpenGL استفاده کنید این یک پیشنهاد دوستانه بود اگر قصد دارید راه درست را انتخاب کنید.

Ananas
جمعه 06 دی 1392, 10:56 صبح
سلام.
فرمول دورانتون رو بنویسید برامون.
سه تا ماتریس لازم دارید که به ترتیب دوران حول سه محور رو انجام میدن. اگر مطمئن هستید که این مرحله رو به درستی انجام دادید میریم سراغ نمایش.
برای نمایش باید از یک ماتریس تبدیل استفاده کنید که نمای سه بعدی بده. اگر بخواید پرسپکتیو هم داشته باشید (کوچک شدن اجسام با فاصله از دوربین) باید در ماتریس پرسپکتیو هم ضرب کنید.
وضعیت شی شما در فضای سه بعدی با استفاده از ماتریس انتقال (که از ضرب سه ماتریس دوران میتونه ساخته شه به اضافه ی بزرگنمایی و جابجایی شی) مشخص میشه و بعد یک ماتریس دوربین نیاز دارید. ماتریس دوربین یک ماتریس متعامد و یکه هست که جهت بردار x اون، سمت راست دوربین رو مشخص میکنه و بردار y ماتریس دوربین جهت بالای دوربین رو مشخص میکنه و بردار z اون هم جهت دید دوربین رو. که البته بردار z در سیستم مختصات دست راست باید به سمت پشت سر دوربین نشانه بره.
وقتی ماتریس دوربین آماده شد باید اشیای صحنه رو در ماتریس معکوس دوربین ضرب کنید.
یعنی باید اشیا رو از فضای جهانی به فضای دوربین انتقال بدید و اون موقع میتونید x و y نقاطتون رو به عنوان x و y صفحه نمایش استفاده کنید که البته اگر از ماتریس پرسپکتیو استفاده نکنید باید نقاط رو در عدد کوچیکی ضرب کنید تا در ناحیه ی -1 تا 1 دیده بشن (ناحیه ی کادر نمایش).
توضیحات بیشتر میخواید بفرمایید.

Erfan.BT
جمعه 06 دی 1392, 14:41 عصر
از این فرمول ها استفاده کردم :
http://upload.wikimedia.org/math/2/8/5/2851c9dc2031127e6dacfb84b96446d8.png

محور های محتصات رو اینجوری گرفتم که محور zها به سمت بیرون صفحه هست:
http://upload.wikimedia.org/wikipedia/commons/thumb/d/d2/Clockwise_rotation.png/220px-Clockwise_rotation.png

نیازی به پرسپکتیو نیست،
منظورتون از " نقاط رو در عدد کوچیکی ضرب کنید تا در ناحیه ی -1 تا 1 دیده بشن (ناحیه ی کادر نمایش)" چیه ؟

Ananas
جمعه 06 دی 1392, 15:57 عصر
از نظر هندسی درسته، شاید ایراد از کدنویسیه.

منظورتون از " نقاط رو در عدد کوچیکی ضرب کنید تا در ناحیه ی -1 تا 1 دیده بشن (ناحیه ی کادر نمایش)" چیه ؟
zoom کردن تو صفحه منظورمه.
شما میگید شکل حاصل نادرسته! خب کد سی پلاس پلاس؟ تصویر خروجی؟
مختصات x , y شی رو بعد از تبدیل چطور رو صفحه نمایش میارید(کد c++ یا فرمول هندسی تبدیل x, y به مختصات پیکسلی)؟ با چه ضریبی (zoom)؟ اندازه ی مکعب شما چقدره (بزرگی صحنه)؟

Erfan.BT
یک شنبه 08 دی 1392, 21:58 عصر
تصویر خروجی نادرسته،
من ابتدا با استفاده از 12 دستور line دوازده ضلع مکعب رو رسم میکنم،
سپس نقطه های مکعب در فرمول مثلا دوران حول محور xها قرار میدم، شکل قبلی رو پاک میکنم و دوباره نقطه های جدید رو در دستور line استفاده میکنم.
آیا این روش ایراد داره ؟

Ananas
یک شنبه 08 دی 1392, 23:23 عصر
سوال های منو جواب دادید؟!!!! جواب ندادید!

من ابتدا با استفاده از 12 دستور line دوازده ضلع مکعب رو رسم میکنم،
سپس نقطه های مکعب در فرمول مثلا دوران حول محور xها قرار میدم
بله ایراد داره! اول باید تبدیل انجام بشه بعد رسم بشه! نه اینکه اول رسم بشه بعد تبدیل شه!
اول باید نقاط رو با ماتریس ها انتقال بدید بعد از روی مختصات تبدیل شده ی نقاط، مکعب رو رسم کنید.