02-04-2005, 17:06
|
|
|
חבר מתאריך: 01.08.02
הודעות: 8,959
|
|
דוגמאות והסברים
שלום לכולם,
מצטער שאני לא יכול להיות יותר פעיל באתגר הזה.
דוגמאות: העלתי לכאן כמה דוגמאות ישנות שמצאתי בגיבויים שלי. רצוי להשתדל להריץ אותן על מחשב איטי ככל האפשר, מאחר שכולן (למיטב זכרוני) נכתבו לפני 10 שנים לפחות, בכל מקרה, אם אתם משתמשים ב 2000\xp נסו להמנע מלהפעיל סאונד כי סביר להניח שהוא לא יעבוד. הדוגמאות מובאות בלא שום אחריות לתוכן, אלו סתם דברים שמצאתי בגיבויים אצלי. דוגמאות נוספות מצאתי באינטרנט כאן וכאן. האפקטים לעיתים בסיסיים, אבל קחו בחשבון שהקודים האלו נכתבו מאפס, למחשבים איטיים פי כמה עשרות עד מאות מהיום ולפני עידן המאיצים הגרפיים ושאר הדברים שלפעמים עושים את התכנות היום למאוד טריוויאלי :-(
תלת מימד:
למי שרוצה ליישם תלת מימד בעצמו, אני מציע להבחין בדברים הבאים:
נניח שאנחנו מתייחסים למערכת קוארדינטות תלת מימדית: x,y,z כאשר z מציין את המרחק בינינו לבין העצם (ערך גבוה מציין עצם מרוחק ונמוך קרוב). אז בסה"כ אם נרצה לדעת איפה נקודה תמצא במערכת קוארדינטות דו מימדית (המסך במקרה שלנו) החישוב יהיה בסגנון:
ScreenX = Constant * X / Z
ScreenY = Constant * Y / Z
כאשר Y,X ו Z הם הקוארדינטות בתלת מימד ו ScreenX ו ScreenY הן הקוארדינטות המתאימות על המסך. שימו לב לא לתת ל Z לקבל ערך אפס אף פעם. הקבוע Constant מיצג משהו ששקול בערך למרחק של העין מהמסך ותלוי בגודל המסך וברזולוציה שאתם מתכננים לעבוד איתה ולכן דורש מעט ניסוי וטעיה. אני ממליץ להתחיל ולנסות עם Constant בין 256 ל 512, אבל זה רק ניחוש (כמובן שבגלל שמדובר בכפל במחשב רצוי ללכת על חזקה של 2, אבל זו כבר בעיה שלכם, היום דרישות ביצועים לקוד הרבה יותר נמוכות מפעם בגלל המהירות הגבוהה של מחשבים).
הערות אחרונות בנושא יישום של תלת מימד:
א. צבע - לעיתים גורמים לצבע של עצם לדהות ככל שהוא מתרחק, זה די קל ומתבסס על נסחה כמו זו:
Color = Base + Z / Color_Const
כאשר color הוא הצבע הרצוי, base הוא איזה קבוע, Z היא קואורדינטת Z במערכת התלת מימדית ו ColorConst קבוע פרופורציונלי לעומק המקסימלי שהחלטתם לאפשר.
ב. קוארדינטות פולריות (גליליות וכדוריות) - ניתן לייצג מיקום ביותר מדרך אחת. דרך אחרת לייצג מיקום היא לדעת את ערך ה Z שלך, הרדיוס מהמרכז, והזוית ביחס לראשית הצירים, אז X ו Y (התלת מימדיים, לא אלו של המסך שהחישוב שלהם לא משתנה) ניתנים לחישוב כ
X=R * Cos(Angle)
Y=R * Sin(Angle
דרך שניה היא לחשוב בקוארדינטות כדוריות שאז צריך לדעת את הזויות של הנקודה שלך ביחס לשניים מהצירים וכן את הרדיוס (מרחק מראשית הצירים).
אם לא יצא לכם להתקל בהצגה כזו, אתם בטח שואלים את עצמכם "למה זה טוב?". התשובה היא שבהצגות כאלו, קל מאוד לסובב עצמים - מאחר ש sin ו cos הן פונקציות מחזוריות, זה גורם לכך שאם נגדיל את הזוית ביחס לציר מסויים ללכל הנקודות שמרכיבות עצם מסויים, אנחנו פשוט מסובבים אותו סביב הציר הנ"ל...
למידע נוסף, חפשו בעצמכם בגוגל קוארדינטות פולריות, גליליות או כדוריות.
אש: העליתי חבילת דוגמאות של קודים לכאן. אני לא טורח לכתוב הסברים, כי נראה לי שהחבילה די מסבירה את עצמה. קחו בחשבון שרצוי לשפר את הרזולוציה בה הקודים האלו עובדים כי הם נכתבו עבור מסכים קטנים עם רזולוציות נמוכות מהמקובל היום.
מוזיקה: אם אתם רוצים לכלול מוזיקה בדמו, אתם צריכים להתבסס על משהו פחות מודרני כמו פורמטים של mod או s3m, לא חסרים קודי מקור לאיך לנגן אותם. כדי לכלול קובץ מידע בתוך קובץ exe מומלץ לקרוא מעט על הפורמט של קובץ exe, בסה"כ זה די קל ודורש שינויים קלים בקובץ exe וידיעה מדוייקת של גודל הקובץ המקומפל שלך. לחילופין, יש שיטות לגרום לקומפיילר לעשות את העבודה השחורה בשבילך.
אפקטים אחרים: כמעט כל דבר שתעלו על הדעת ניתן לביצוע אם תקדישו לו זמן ומחשבה, אם מישהו רוצה לשאול שאלה, הוא מוזמן לפנות אלי כאן ואני אנסה לכוון אותו לפתרון. אפקטים מפורסמים שאפשר להתעניין בהם הם שדות כוכבים (כמו שומר המסך הנדוש), פלזמות, פרקטלים, עדשות, סקרולרים (צורות מעניינות להעביר טקסט על המסך) ועוד הרבה.
_____________________________________
--
גל דיסקין (gal diskin)
עצות והמלצות:
נערך לאחרונה ע"י גל דיסקין בתאריך 02-04-2005 בשעה 17:14.
סיבה: תיקונים
|