اكتشفت احد اسباب البطئ
كثرة Ink في الـ loop تجعل اللعبة ليست بالسرعة المطلوبة
وانا بحاول اكتشف ايه اسباب البطئ اكتشفت السبب ده وقولت اعرضه للفايدة
والله اعلم
ومازالت المحاولات مستمرة :)
عرض للطباعة
اكتشفت احد اسباب البطئ
كثرة Ink في الـ loop تجعل اللعبة ليست بالسرعة المطلوبة
وانا بحاول اكتشف ايه اسباب البطئ اكتشفت السبب ده وقولت اعرضه للفايدة
والله اعلم
ومازالت المحاولات مستمرة :)
مشكلة
هي ليست مشكلة وانما شيء اريد ان اتعلمه ولم استطع ان احصل عليه بمفردي
تعلم الاضائة .. كيف يمكن ان اعمل اضائة في مكان معين .. وكيف يمكن ان اعمل اضائة مع البطل
كيفية التعامل مع الـ Vector
وايضا اقتراحات لعمل دم بالـ Particles
عزيزي ايفل : لا اريد اكواد جاهزة وانما التعلم :)
آسف على الرد المتأخر
بالنسبة للاضاءة هناك الاضاءة التقليدية مثل make light والاضائة الاحترافية طبعا مع الشيدرز واعطيتك رابط لموقع افولفد اللي يصنع الشيدرات هناك عدة خامات ممتازة جداً تعطي واقعية وهناك امثلة كثيرة على الاضاءة..ايضا في الموقع هناك حزمة للاضاءة الاحترافية يمكنك تجربتها..
http://www.evolved-software.com/shaders/bumpmapping
اما بالنسبة للفيكتورز فاي فيكتورز تقصد بالضبط ؟؟
اما البارتكلز فلم استخدمه مع الاسف
اشكرك اخي العزيز
انا بتكلم عن عمل فلاش لايت .. في مثال في الموقع اللي انت حاطه عن الفلاش لايت وانا نزلته لكن للاسف مفيش شرح
وانا مش فاهم الكود ماشي ازاي
ياريت تشرحلي ازاي اتعامل مع الاضائة يا عزيزي :)
اخي العزيز امير... لاداعي لفهم السورس 100% فهو للاستخدام ((الجاهز)) فقط قم بتغيير بعض القيم لتتناسب مع البيئة في مشروعك
اما مسألة الشرح فيمكنك الضغط بالزر F1 على الكود ثم ستجد الشرح مع الوصف ومثال بسيط... انا لم استخدم الفلاش لايت لذا اعذرني لانني لا افقه فيه شيئاً
لكن كنصيحه اذا كنت تريد فلاش لايت يمكنك استخدام 2D Shadow Mapping فهو يدعم الظل لكن المشكلة انه لايدعم الا مصدر ضوء واحد :
http://www.evolved-software.com/shaders/shadowing
هناك لعبة لـ Mike Inel قام بعمل مثل هذه الميزة
http://www.youtube.com/watch?v=pfVF3_E5lTo
اما بالنسبة للفيكتورز فالبعض منها خاص بقيم الشيدر FX كي تفهمها لابد ان يكون لديك برنامج تشغيل الشيدرز مثل fx composer او dark shader
وان اتيحت لي الفرصة سأقوم بدراسة الديمو واضع لك شرح له ان شاء الله
ملف مرفق 350922
طب ايه حل المشكلة دي
بتظهر لما بعمل #include لملف dba
والاسم Lm_SetupData ده اسم function في الملف dba
هي طريقة من طرق عمل الاضائة بس مش عارف اجربها من الاساس لوجود هذا الخطئ
قمت بتعديل الكود لعمل فلاش لايت في موقع اللاعب والتدوير بالماوس للمثال Shadow mapping
كود:
`====================================================
` Depth Shadow Mapping
`====================================================
` By EVOLVED
` www.evolved-software.com
`====================================================
`Setup Display
load dll "user32.dll",1
Sw=call dll(1,"GetSystemMetrics",0)
Sh=call dll(1,"GetSystemMetrics",1)
delete dll 1
set display mode Sw,Sh,32,1
sync on : sync rate 0
hide mouse
`Set Text
set text font "Verdana"
set text size 15
set text to bold
ink rgb(200,200,0),0
`Setup Camera
backdrop on
color backdrop rgb(128,128,128)
autocam off
position camera 0,0,-150
set camera fov 85
xrotate camera 30
CamDis#=-100
`Load Textures
load image "Media/rockwall.dds",1 : image=1
load image "Media/rockwall_n.dds",2
load image "Media/spotlight.bmp",3
load image "Media/floor.dds",5
load image "Media/floor_n.dds",6
make camera 1
set camera to image 1,4,512,512
set camera fov 1,60
set camera aspect 1,1.1
backdrop off 1
`Create Object
load effect "FX/ShadowMapping.fx",1,0
load object "Media/t-pot.x",1 : object=1
scale object 1,4500,4500,4500
scale object texture 1,0,4,3
texture object 1,0,1
texture object 1,1,2
texture object 1,2,3
texture object 1,3,4
set object effect 1,1
`Create floor
make object box 2,500,1,500
position object 2,0,-65,0
texture object 2,0,5
texture object 2,1,6
texture object 2,2,3
texture object 2,3,4
scale object texture 2,0,5,5
set object effect 2,1
`Light vectors
LX#=-156:LY#=200:LZ#=-126
LaX#=56:LaY#=83:LaZ#=0
Null=make matrix4(1)
Null=make matrix4(2)
Null=make matrix4(3)
Null=make vector4(6)
make object cube 4,10
hide object 1
`Start loop
do
if lower$(inkey$()) = "w" then move object 4,1
if lower$(inkey$()) = "s" then move object 4,-1
if lower$(inkey$()) = "d" then move object right 4,1
if lower$(inkey$()) = "a" then move object left 4,1
xrotate object 4,object angle x(4)+mousemovey()*0.25
yrotate object 4,object angle y(4)+mousemovex()*0.25
`Control Camera
position camera 0,0,0
if mouseclick()=0
` xrotate camera camera angle x()-mousemovey()*0.25
` yrotate camera camera angle y()+mousemovex()*0.25
if camera angle x()>80 then xrotate camera 80
if camera angle x()<-60 then xrotate camera -60
endif
if mouseclick()>0 then CamDis#=CamDis#-mousemovey()*0.25
CamDis#=CamDis#+mousemovez()*0.25
if upkey()=1 then CamDis#=CamDis#+2.5
if downkey()=1 then CamDis#=CamDis#-2.5
if CamDis#>-20 then CamDis#=-20
if CamDis#<-300 then CamDis#=-300
move camera CamDis#
if camera position y()<-60 then position camera camera position x(),-60,camera position z()
mousemovex()=0
mousemovey()=0
`Rotate object
if KEYSTATE(19)=1 and rotate=1 and nopress=0 then rotate=0:nopress=1
if KEYSTATE(19)=1 and rotate=0 and nopress=0 then rotate=1:nopress=1
if rotate=0
rotate object 1,0,object angle y(1)+0.5,0
endif
`Change Texture
if KEYSTATE(20)=1 and nopress=0
delete image 1:delete image 2
inc image
if image>4 then image=1
if image=1 then load image "Media/rockwall.dds",1 :load image "Media/rockwall_n.dds",2
if image=2 then load image "Media/wall1.dds",1:load image "Media/wall1_n.dds",2
if image=3 then load image "Media/oldwall3.dds",1:load image "Media/oldwall3_n.dds",2
if image=4 then load image "Media/rock4_1.dds",1 :load image "Media/rock4_1_n.dds",2
texture object 1,0,1
texture object 1,1,2
nopress=1
endif
`Change Object
if Spacekey()=1 and nopress=0
delete object 1
inc object
if object>5 then object=1
if object=1 then load object "Media/t-pot.x",1:scale object 1,4500,4500,4500:scale object texture 1,0,4,3
if object=2 then load object "Media/Tosus.x",1:scale object texture 1,0,1.5,1
if object=3 then make object box 1,75,75,75
if object=4 then make object sphere 1,75,40,40:scale object texture 1,0,2,1
if object=5 then make object cylinder 1,75:scale object texture 1,0,3,1
texture object 1,0,1:texture object 1,1,2:texture object 1,2,3:texture object 1,3,4
set object effect 1,1
nopress=1
endif
if scancode()=0 then nopress=0
`Set spot Light to camera position
` if Shiftkey()=1
LX#=object position x(4):LY#=object position y(4):LZ#=object position z(4)
LaX#=object angle x(4):LaY#=object angle y(4):LaZ#=object angle z(4)
` endif
set vector4 6,LX#,LY#,LZ#,0
set effect constant vector 1,"LightPosition",6
`Text
center text sw/2,15,"1 - Show Depth Texture Shift - Set Spot Light To Camera Space - Change Object T - Change Texture R - Rotate Object"
center text sw/2,40,"FPS "+str$(screen fps())
`Set Shadow shader light projection Matrix
SET CURRENT CAMERA 1
position camera 1,LX#,LY#,LZ#
Rotate camera 1,LaX#,LaY#,LaZ#
view matrix4 1:projection matrix4 2
multiply matrix4 3,1,2
set effect constant matrix 1,"LightProjMatrix",3
SET CURRENT CAMERA 0
set effect technique 1,"DepthMap"
sync mask 2^1:fastsync
if KEYSTATE(2)=1 then paste image 4,0,0
`Main Scene
set effect technique 1,"ShadowMapping"
sync mask 2^0
`End loop
sync
loop
فقط تغيير زاوية وموقع الكاميرا الى زاوية وموقع الاوبجكتكود:
LX#=object position x(4):LY#=object position y(4):LZ#=object position z(4)
LaX#=object angle x(4):LaY#=object angle y(4):LaZ#=object angle z(4)
الكود السابق مثل كود لعبة iott والتي وضعت لك رابط لها لـ mike inel
شكرا لك
كده انا فهمت الموضوع كله
بعد تجربة مع الكود
المعلومة اللي كنت عاوز اعرفها فعلا ان تأثير الضوء له علاقة اساسية بالـ Effect على العالم المحيط
طبعا انا كنت فاكر ان الموضوع له علاقة بالاكواد فقط وليس بملفات الـ fx
صاحب ظهور الضوء عدة اشياء كاختفاء الضباب الاسود بسبب الـ Effect وكذلك اختفاء اضائة وهج السلاح عند اطلاق النار
واعتقد ايضا ان حل الموضوع في ايجاد الـ effect المناسب
شكرا يا عزيزي
العفو :)
نعم كلامك صحيح... لكل تأثير خصائصة فانت ستعين الضياب والـambient وموقع الضوء ولونه عن طريق خصائص الـ fx نفسه
جرب حمل الدارك شيدر :
https://rapidshare.com/#!download|40...E6AB473EAE|0|0
الباسوورد:
Agent3004
ملاحظة: بالنسبة للفيكتورز اللي سألتني عنها طبعا هناك فرق بين الفيكتور في النيوتن والفيكتور في الشيدرز والفيكتور في الدارك بيسيك
طبعا فائدة الفيكتور العادي (الدارك بيسيك) لما تحب تحدد نقطة معينة للمجسم او تعيين اتجاهه
اما في النيوتن فأعتقد ان الامر وضح لك
اما في الشيدرز الامر مختلف قليلا
فمثلا لو كنت تريد تغيير لون الضوء او تغيير موقعه او اي شيء يتطلب 3 قيم فلابد من استخدام الفيكتور
للتوضيح
لو كان لديك شيدر يحمل قيمة فانت ستستخدم هذا الكود (هذه الحالة الاولى)
set effect constant integer EffectNumber,ConstantString,ConstantValue
set effect constant float EffectNumber,ConstantString,ConstantValue
set effect constant Boolean EffectNumber,ConstantString,ConstantValue
طبعا integer عدد صحيح مثل -5 ,1,2,3... ،float عدد عميق كسري 1.5 ...1.23 ، boolean عدد من 0 الى 1
يوجد ايضا
set effect constant matrix
set effect constant vector
اما الحالة الثانية
عند تغيير لون الضوء فانت ستقوم بتغيير درجات الالوان RGB تحمل 3 قيم نستخدم الفيكتور (4)
null=make vector4(1)
red#=1
green#=1
blue#=1
set vector4 1, red#, green#, blue#, 1.0 `alpha
set effect constant vector 1, "LightColor", 1
آسف على الشرح الركيك والغير منظم كما آمل أن تكون قد وضحت الصورة :)
تحياتي
ملاحظة مهمه كل تأثير مستقل بذاته :) ... مثلا لوكان الشيدر يحمل مصدر واحد للضوء فلن يتأثر بغيره حتى لو طبقت نفس التأثير مع تغيير اللون لمجسم اخر بجانبه... حتى الـ Fog والـ Ambient
الا في حالة ان نفس الشيدر يحمل عدة مصارد للضوء ... ايضاً افولفد كتب شيدر عن الاضاءة المتعددة Multipass Lighting
لن تستطيع فهم الكلام الا اذا جربتها بنفسك :)
شرحك جميل جدا واوضحلي الصورة بشكل كبير
التعامل مع الضوء يحتاج الى تعامل مع الـ Effect اولا
ومن هنا يظهر سؤالان
الاول : كيف يمكن الحصول على قيم الـ constant string
الثاني : ما الفرق بين Vector , vector3 , vector4 ؟
اشكرك ياعزيزي ... نعم فقط خصائص الـ effect ولن يؤثر عليه اي مؤثر خارجياقتباس:
شرحك جميل جدا واوضحلي الصورة بشكل كبيرالتعامل مع الضوء يحتاج الى تعامل مع الـ Effect اولا
حتى make light , set object ambient,set object ambience, fog ,set object light
كأن المجسم في عالم خاص به حتى لو كان خلاف المحيط من حيث اللون او الضباب
بالنسبة للأسئلة
لو حملت الدارك شيدر وفتحت اي مؤثر حتحصل اعدادات المؤثر مثلا لون الضوء ،موقع الضوء ... هذه هي constant stringاقتباس:
الاول : كيف يمكن الحصول على قيم الـ constant string
مثلا الـ constant string للون الضوء هو LightColor
set effect constant vector EffectNumber,ConstantString,VectorNumber
مثال:
set effect constant vector 1, "LightColor", 1
set vector2 VectorResult,X,Yاقتباس:
الثاني : ما الفرق بين Vector , vector3 , vector4 ؟
set vector3 VectorResult,X,Y,Z
set vector4 VectorResult,X,Y,Z,W
المتجه 2 يحمل قيمتان هي لمحور x,y والثالث اضافة z والرابع w "احياناً تكون هناك قيمة اضافية alpha هي لـ "w" "
واحيانا الـ القيمة الااساسية string تحمل متجه لقيمتين او 3 او 4 لهذا توجد المتجهات 1-2-3-4
شكرا جدا ليك يا صديقي العزيز .. تقريبا وصلت الفكرة تمامامش ناقص غير التطبيق العمليولما اكتمل تحميل الدارك شيدر فهمت الفكرة اكترهيبدأ التطبيق العملي والتجاربوالله المستعاناشكرك بشدة مرة اخرى :)
كيف يمكنني صنع قائمة في لعبتي مثل بدء اللعبة و الخروج من اللعبة الخ
ولك جزيل الشكر