PDA

View Full Version : توابع گرافیکی سطح پایین



1485159
یک شنبه 23 خرداد 1389, 14:06 عصر
سلام
من میخوام مثلا بتونم روی یه dc یه چیزی هایی رسم کنم. مثلا پیکسل یا خط و سرعت برام خیلی مهمه. برای همین فکر کنم باید از توابع سطح پایین استفاده کنم ولی نمیدونم از کدوم ها.
ممنون میشم راهنمایی کنید.

مصطفی ساتکی
یک شنبه 23 خرداد 1389, 15:29 عصر
بایستی از Scanline مربوط به کلاس TBitmap استفاده کنی یعنی به روش pointer .و اشکال هندسی رو بایستی خودت پیاده سازی کنی یا از کتابخانه های آماده استفاده کنی.

1485159
یک شنبه 23 خرداد 1389, 16:13 عصر
منظورم رسم توی TBitmap نبود! منظورم یک dc هست! که میتونه هم دسکتاپ باشه و هم یه فرم و هم یه TBitma.

Mahmood_M
یک شنبه 23 خرداد 1389, 16:41 عصر
منظورم رسم توی TBitmap نبود! منظورم یک dc هست! که میتونه هم دسکتاپ باشه و هم یه فرم و هم یه TBitma.
روی TBitmap که چیزی رسم نمی شه ، اون یک Canvas داره که همون DC هست و باید روی اون رسم کنی ، حالا چی می خوای رسم کنی ؟!
ScanLine ای هم که جناب Delphi_CAT گفتن به خاطر همون سرعتی هست که می خوای داشته باشی ...

توضیح بیشتری بده که چه چیزهایی باید رسم کنی ؟ شاید مثلا استفاده از OpenGL کارت رو راه بندازه ...

1485159
یک شنبه 23 خرداد 1389, 16:56 عصر
میخوام یه رندر گر نرم افزاری بنویسم.

Mahmood_M
یک شنبه 23 خرداد 1389, 18:26 عصر
میخوام یه رندر گر نرم افزاری بنویسم.
بهتره ( باید ! ) از OpenGL یا کتابخانه هایی مثل اون استفاده کنی ، وگرنه با امکانات Canvas کار زیادی نمی تونی بکنی !

1485159
یک شنبه 23 خرداد 1389, 19:21 عصر
بهتره ( باید ! ) از OpenGL یا کتابخانه هایی مثل اون استفاده کنی ، وگرنه با امکانات Canvas کار زیادی نمی تونی بکنی !
من میگم رندرگر نرم افزاری میخوام بنویسم، شما میگی با opengl کار کن؟! در ضمن اگه قرار بود که از Canvas استفاده کنم که دیگه تاپیک نمیزدم!

1485159
یک شنبه 23 خرداد 1389, 19:24 عصر
در ضمن تنها رسم پیکسل هم برای من کافیه!

مصطفی ساتکی
یک شنبه 23 خرداد 1389, 22:50 عصر
پست اول

من میخوام مثلا بتونم روی یه dc یه چیزی هایی رسم کنم.
پست 7

در ضمن اگه قرار بود که از Canvas استفاده کنم که دیگه تاپیک نمیزدم
به قول آقای کشاورز عزیز جان کسی مجبورت نکرده تاپیک بزنی. اگر میخای engine بنویسی بهترین راش همون گفته جناب Mahmood_N (http://barnamenevis.org/forum/member.php?u=16833) .
شما مشکلت اینه که خودت هم نمی دونی میخای چیکار کنی

1485159
یک شنبه 23 خرداد 1389, 23:04 عصر
من فکر کنم شما پست اول رو با دقت نخوندی!!! من گفتم که سرعت برام خیلی مهمه و به همین دلیل در پست 7 هم گفتم که از Canvas نمیتونم استفاده کنم!
در ضمن من نمیخوام با اینکار انجین بنویسم! چون دارم با Opengl مینویسمش. این رو فقط برای دونستن میخوام و بس.

SAASTN
یک شنبه 23 خرداد 1389, 23:28 عصر
من میگم رندرگر نرم افزاری میخوام بنویسم، شما میگی با opengl کار کن؟!

در ضمن من نمیخوام با اینکار انجین بنویسم! چون دارم با Opengl مینویسمش.
ما که نفهمیدیم چی شد.:متفکر:

اگه فقط یه HDC داری و می خوای روش ترسیم کنی کافیه یه TCanvas بسازی و Handle ش رو برابر HDC قرار بدی.
procedure TForm1.FormCreate(Sender: TObject);
begin
Cnvs := TCanvas.Create;
Cnvs.Handle := GetDC(Button1.Handle);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
Cnvs.Free;
end;

procedure TForm1.FormResize(Sender: TObject);
begin
with Cnvs, Button1 do
begin
MoveTo(Random(Width), Random(Height));
LineTo(Random(Width), Random(Height));
end;
end;


اگه با canvas حال نمی کنی کلی دستورای مربوط به DGI32 هست که توی یونیت windows اومده:
Windows.LineTo(HDC, 100, 100);

البته دستورای canvas رو هم بگیری بری جلو به همینا می رسی.

یه مجموعه کامپوننت دیگه هست به اسم Graphic32 (http://www.graphics32.org/wiki/) که سرعت ترسیماتش خیلی بیشتر از Canvasه. من یه موقع یه شبه موتور سه بعدی باهاش نوشتم ولی در نهایت بی خیال شدم رفتم سراغ همون OpenGL.

اگرم تو کارکردن با خود OGL گیر و گرفتی داری که:
http://www.sulaco.co.za/
http://www.og.delcode.com/
برو بچ بخش طراحی و ساخت بازی های کامپیوتری (http://barnamenevis.org/forum/forumdisplay.php?f=28) هم کمکت می کنن.

1485159
یک شنبه 23 خرداد 1389, 23:32 عصر
اگه فقط یه HDC داری و می خوای روش ترسیم کنی کافیه یه TCanvas بسازی و Handle ش رو برابر HDC قرار بدی.
گفتم که سرعتش خیلی کمه!

یه مجموعه کامپوننت دیگه هست به اسم Graphic32 (http://www.graphics32.org/wiki/) که سرعت ترسیماتش خیلی بیشتر از Canvasه.
نه... کامپوننت نمیخوام.

اگرم تو کارکردن با خود OGL گیر و گرفتی داری که:
http://www.sulaco.co.za/
http://www.og.delcode.com/
برو بچ بخش طراحی و ساخت بازی های کامپیوتری (http://barnamenevis.org/forum/forumdisplay.php?f=28) هم کمکت می کنن.
فعلا که باهاش مشکلی ندارم.

SAASTN
دوشنبه 24 خرداد 1389, 00:27 صبح
نه... کامپوننت نمیخوام.
در واقع همون بهینه شدۀ Canvaseه. و البته 32 بیتی.



Graphics32 is a library designed for fast 32-bit graphics handling on Delphi and Kylix. Optimized for 32-bit pixel formats, it provides fast operations with pixels and graphic primitives, and in most cases Graphics32 outperforms the standard TCanvas classes. It is almost a hundred times faster in per-pixel access and about 2–5 times faster in drawing lines.
Graphics32 کتابخانه ایست که برای انجام ترسیمات سریع 32 بیتی با استفاده از دلفی و کایلیکس طراحی شده. Graphics32 با توجه به بهینه سازی های انجام شده برای قالبهای پیکسلی 32 بیتی، امکان انجام سریع عملکردهای روی پیکسلها وعملیات پایه ای گرافیکی را در اختیار گذاشته و در بیشتر موارد از کلاس های استاندارد TCanvas عملکرد بهتری دارد. این کتابخانه در دسترسی به هر پیکسل تقریبا صد برابر و در ترسیم خطوط در حدود دو تا پنج برابر سریعتر از TCanvas عمل می کند.

http://graphics32.org/wiki/Main/Graphics32

مصطفی ساتکی
دوشنبه 24 خرداد 1389, 00:39 صبح
من فکر کنم شما پست اول رو با دقت نخوندی!!! من گفتم که سرعت برام خیلی مهمه و به همین دلیل در پست 7 هم گفتم که از Canvas نمیتونم استفاده کنم!
در ضمن من نمیخوام با اینکار انجین بنویسم! چون دارم با Opengl مینویسمش. این رو فقط برای دونستن میخوام و بس. من پست با دقت خوندم شما در این تاپیک تقریباً اکثر پست هاتون، پست های قبلی رو نقض میکنه .
اگر میخاید گرافیک معمولی کار کنید با توابع GDI که اکثرشونو TCanvas تو خودش encapsulate کرده می تونید استفاده کنید. اگر بخاید تصویر پردازش کنید بایستی با Scanline یا Pointer استفاده کنید که در اینجا سرعت بر می گرده به pixelformat تون . در ضمن با OpenGL تصویر رندر میشه نه پردازش .پردازشو بایستی خودتون در حافظه انجام بدید که با توجه به اندازه تصویر تکنیک های مختلفی داره که کامپوننت Graphics32 نیز از همین روش استفاده میکنه.
در ضمن این روزها گفته میشه کیفیت سایت افت کرده برای همینه که نویسنده تاپیک خودشم نمی دونه چی میخاد حالا چند وقت دیگه یه بنده خدایی میخاد از همین تاپیک استفاده کنه تناقض میبنه و ممکن از این تاپیک دست بکشه اینو دوستانه خدمتون عرض کردم

1485159
دوشنبه 24 خرداد 1389, 00:47 صبح
من کی حرف های خودمو نقض کردم؟ این شما هستید که دارید هی مسئله رو میپیچونید! اگه چیزی رو نمیدونید لازم نیست که در موردش ایراد بگیرید!!
من سوالم این بوده که چطوری باسرعت زیاد و بدون استفاده از Opengl و... بتونم یه چیزی رو توی یک dc رسم کنم!! حالا هی شما بگو opengl اله و بله ....... من فقض میکنم یا شما؟

Mahmood_M
دوشنبه 24 خرداد 1389, 01:24 صبح
من کی حرف های خودمو نقض کردم؟ این شما هستید که دارید هی مسئله رو میپیچونید! اگه چیزی رو نمیدونید لازم نیست که در موردش ایراد بگیرید!!
من سوالم این بوده که چطوری باسرعت زیاد و بدون استفاده از Opengl و... بتونم یه چیزی رو توی یک dc رسم کنم!! حالا هی شما بگو opengl اله و بله ....... من فقض میکنم یا شما؟
از Canvas و ScanLine نمی خوای استفاده کنی ، از OpenGL نمی خوای استفاده کنی ، از کامپوننت هم نمی خوای استفاده کنی ، خوب پس از چی می خوای استفاده کنی ؟ ، کسی که میخواد جواب بده باید بدونه چی باید بنویسه یا نه ؟!
از چی داری استفاده می کنی ؟ فقط سرعت برات مهمه ؟ با چی می خوای بنویسی نرم افزارت رو ؟ خود OpenGL هم راه های زیادی داره برای رسم ، که برخیهاش سریع هستند و برخی کند تر ...

منظورت از توابع گرافیکی سطح پایین ، دستورات گرافیکی در زبانهای سطح پایینه ؟ یعنی ارتباط مستقیم با سخت افزار ؟! ، این موارد منطقی نیست به خاطر همینه که کتابخانه هایی مثل DirectX و OpenGL برای ارتباط نرم افزار شما با سخت افزار ایجاد شدن ، این رو هم بگم که DirectX در برخی موارد از OpenGL سریعتر عمل میکنه ...

به هر حال ، بهتره توضیح کاملتری بدی ...

1485159
دوشنبه 24 خرداد 1389, 09:08 صبح
ببینید خود اون کامپوننتی که معرفی شد هم از یه روشی استفاده میکنه که سریعه دیگه! مگه نه؟ روشش چیه؟

مصطفی ساتکی
دوشنبه 24 خرداد 1389, 12:54 عصر
ببینید خود اون کامپوننتی که معرفی شد هم از یه روشی استفاده میکنه که سریعه دیگه! مگه نه؟ روشش چیه؟
روش ScanLine این صد بار .شما مثل اینکه بچه ها پست میزنن نمی خونید

1485159
دوشنبه 24 خرداد 1389, 16:09 عصر
روش ScanLine این صد بار .شما مثل اینکه بچه ها پست میزنن نمی خونید
آخه من یه روشی میخوام که مختص دلفی نباشه! یعنی بشه تو سی هم ازش استفاده کرد!! در ضمن سرعتش اینقدر هست که بشه به عنوان یه رندر گر استفاده کرد؟