نبدأ بالرد من الاخر ..
احمد .. طبقت الفكرة ونجحت بامتياز :)
بصراحة ما توقعت ابدا ان تكون بهذه السهولة ... ستجد التطبيق بالمرفقات ... رفعت التطبيق من الفرحة :)
ولكن بالرغم من روعة الفكرة لكن هذا ليس ما اريده .. :(
سأشرح بالتفصيل في هذا الرد .. .. كلام كثير ودي اقوله لكن ما اعرف من وين ابدأ
================
اولا حسن :
يعني مشكلتي عكس مشكلتك .. ب 180 درجة ..
بالعكس .. اذا كانت النقطة 0,0 في الزواوية العلوية اليسرى في الجافا .. وانت لاتعمل الا على مكتبات
الجافا .. فهذا افضل .. لانك لاتحتاج الى تحويل ودوخة راس ..
بس اعتقد ان طريقة الجافا افضل من OPENGL لانها متوافقة مع كثير من المكتبات
او استعمل مكتبة opengl فهي تجعل منتصف الشاشة هي النقطة 0,0
لكن انت تقول :
اعتقد ان هذا ينفع struct __POINT
{
float X;
float Y;
};
__POINT ConvertPos(float xPos,float yPos)
{
__POINT pn;
pn.X =(xPos/100)-4;
// -y
if(yPos > 300)
{
pn.Y =(yPos/100)-3 * -1;
}
//+y
else if(yPos <300)
{
pn.Y =(yPos/100);
}
else pn.Y =0;
return pn;
}الان .. لو اردت تحويل النقطة
(600,400)
ستصبح
(2, -1)
وهو تحويل صحيح
جرب مثلا
(200, 100);
تصبح
(-2 , 1);
جربت عدة اعداد وطلع التحويل صحيح..
ثم
تكتب شيء كهذا
__POINT test; test=ConvertPos(400,0);
تخزن الاعداد المحولة في تركيب
SetPixel(hdc , test.X, test.Y,RGB(255,0,0));
حيث setpixel
ترسم نقطة ..
اعتقد هذا حل يمشي الحال لكن ليس كثيرا ... لكن انا لم استطع جعل نقطة الاصل هي منتصف الشاشة ..
اذا كنت تعرف كيف تجعل منتصف الشاشة هي نقطة الاصل .. جرب هذه الطريقة .. اما اذا كنت لاتعرف
لاتجرب هاي الطريقة ..
فاصل اعلاني ...
.. جرب ALLEGRO اذا كانت تشتغل على الجافا . فهي رائعة ومميزة وهي لاتعتمد على مكتبات
اخرى .. لكنها ليست 3D
... ALLEGRO تشتغل على السي ولها دروس كثيرة .. لو كنت ما اشتغل على OPENGL كنت اشتغلت
على ALLEGRO
==================
نعود لموضوعنا ..
بالنسبة لفكرة .. دالة التحويل ... فتحت لي افاق ... جديدة :)
وطبقتها ونجحت بنسبة لابأس بها
يعني كذا
void ConvertToPixel()
{
glTranslatef(-50,50,-50);
}'الارقام كمثال فقط لاني مش متذكر ..
وبالتالي تصبح النقطة في الزاوية العلوية اليسرى ..
وارسم مثلا
ConvertToPixel()ك glTranslatef(10,10,0); draw();
الان الازاحة تتم من النقطة العلوية اليسرى ..
وذلك لانني لم اعيد النقطة الى المنتصف عن طريق الدالة glLoadIdentity() كما كنت افعل بالسابق
شكرا حسن .. لكن .
صحيح ان هذه الطريقة تحل جزء من المشكلة الا انها غير عملية .. وتحتاج الى تطوير كثير .. وفيها عيوب
كثيرة من الصعب شرحها ,,
فلا زال الطلب مستمرا .,
من يعرف طريقة جيدة موثوق منها .
لتحويل نقطة المنتصف من وسط الشاشة .. الى الجهة العلوية اليسرى .. كما في دوال WIN API
فليسعفنا بها ..
لو قلنا ان الماوس يقع في النقطة 400 , 300 وقلنا نريد الجسم الفلاني في Opengl يكون في نفس
موقع الماوس .... فهذا يعني 300,400 ,وهذا القياس غير معتمد فيopengl لاحظ الصورة ..
افرض مثلا سويت map editor في win api وحفظت القياسات في ملف .. واريد ان انقلها الى OPengl
كيف اوفق بين قياسات Opengl و window api .. علما اني جربت عشرات الطرق وكانت النتائج يعني .. .. لكن غير عملية ابدا ....
لان هالمشكلة تتعبنا دون فائدة ..وتلهينا عن الامور الاساسية مثل الذكاء الاصطناعي وامور اخرى ....
انا بحاجة لتوفير بعض المجهود العقلي الى المراحل القادمة . . 
والمرفقات فيها التطبيق اللي ذكره لي احمد ..
تم تعديل هذه المشاركة بواسطة الشـمري في 31 يوليو 2005 في 20:20
تطبيق طمأنينة ، نسخة بيتا على أندرويد
عبدالله الشمّري - Al-Shammari
twitter @abshammeri
abshammeri AT gmail.com
github : abshammeri



