کد:
procedure OneLine();
begin
glEnable(GL_DEPTH_TEST);
glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
glOrtho( 0, 665, 467, 0, -1, 1);
glColor3f (1.0, 0.0, 0.7);
glEnable (GL_LINE_STIPPLE);
drawoneline(Q,W,E,R);
glFlush;
end;
این یه کد کشیدن خط هستش .. به این صورت که وقتی کاربر روی صفحه کلیک میکنه مقدار Q,W به عنوان ابتدای خط به تابع ارسال می شه ( که مشخصات نقطه ای هستش که موس در آن قرار داره ) و تا وقتی که کاربر دستشو از روی کلید موس برنداشته همین جور مقدار E,R به صورت متوالی به تابع ارسال شده و پشت سر هم خط تغییر میکنه ..
حالا اگه glClear رو از تابع پاک کنم ، تا وقتی که کاربر میخواد خط جدیدی بکشه خط قبلی پاک نشه ، اون وقت وقتی میخواد خط بکشه توی صفحه هر جایی که موس تکون می خوره خط کشیده میشه و پاک نمیشه ، جوری که همه صفحه پر از خط می شه ..
حالا من باید چی کار کنم که کاربر بتونه بدون اینکه خط قبلیش پاک بشه خط جدیدی بکشه (ممنون میشم اگه کمکم کنید)
حقیر نه دلفی کار می کنم و نه OpenGL بنابراین نمی توانم در تکمیل کدتان کمکتان کنم، اما راه حل مساله واضح است :
شیوه اول)
برنامه شما لیست مختصات خطوطی که تا حالا کشیده و کارشان تمام شده را در حافظه ای نگه خواهد داشت تا هر زمان
که خواستید خطی که هنوز کاربر رسم اش را به پایان نبرده را رسم کنید ابتدا، صفحه نمایش بطور کامل پاک شود، سپس
خطوطی که قبلا رسم شده بود و مختصاتشان را در حافظه نگهداری کرده ایم مجددا رسم شوند و در انتها خط جدیدی
که هنوز رسم اش به پایان نرسیده بصورت موقتی رسم خواهد شد. چون هر بار صفحه نمایش پاک می شود هیچ اثری
از تغییر موقعیت خط جدید بر صفحه نمایش باقی نمی ماند. هر زمان که کاربر دستش را از روی ماوس برداشت، مختصات
خط جدید را به لیست خطوط قبلی اضافه می کنید تا در نمایش های بعدی رسم شود.
عیب این روش کندی و پرپر زدن صفحه نمایش در مواقعی است که تعداد خطوط رسم شده خیلی زیاد باشند.
حسن این روش در کمی حافظه مورد نیاز است.
شیوه دوم)
برنامه شما بجای نگهداری لیست مختصات خطوط قبلی تنها از صفحه نمایش یک تصویر را در حافظه نگهداری می کند،
هر زمانی که خواستید که یک خط را بطور موقتی رسم کنید، اول صفحه نمایش را با آن تصویر جایگزین می کنید و سپس
خط جدید را رسم می کنید. هر زمان که کاربر دستش را از روی ماوس برداشت حافظه ای که برای نگهداری تصویر
بکار برده بودید را با وضعیت جدید صفحه نمایش پر می کنید، بدین شکل شما همیشه تمامی خطوط قبلی که مختصات
تثبیت شده ای دارند را در آن تصویر دارید و نیازی به پاک کردن صفحه نمایش هم نیست.
عیب این روش نیاز به یک حافظه تصویر برای نگهداری محتویات کل صفحه نمایش است.
حسن این روش در سرعت رسم بالا و جلوگیری از پرپر زدن صفحه نمایش است.
شیوه سوم)
در این شیوه بجای نگهداری مختصات خطوط قبلی و یا نگهداری تصویری از صفحه نمایش تنها به رسم خط جابجا شده با
رنگ زمینه اکتفا می شود، بدین شکل که هر بار که مختصات خط جدید جابجا می شود، یک خط با رنگ زمینه در همان
موقعیت قبلی رسم می شود و سپس خط مجددا در مختصات جدید با رنگ دلخواه رسم می شود.
عیب این روش در این است که تنها زمانی کاربرد دارد که اولا زمینه تنها یک رنگ ساده باشد، و ثانیا رسم خط با رنگ زمینه
به خطوط زیرین قبلی آسیب می رساند و آنها را پاک می کند.
حسن این روش در حداقل مصرف حافظه، سادگی پیاده سازی و سرعت بالای نمایش آن است.
اگر مشاهده یک نمونه کد ویژوال بیسیک در این مورد کمکتان می کند، اعلام کنید تا ارائه کنم.