שאלה ב-DirectX 8

שאלה ב-DirectX 8

אני עושה כל מיני נסיונות ב-DX8 ונתקלתי בבעיה שאני לא בטוח מאיפה היא נובעת. אולי עוד מישהו נתקל בתופעה.... בניתי פירמידה מ-6 משולשים (4 לדפנות ו-2 ליצירת ריבוע הבסיס) בראשית הצירים. הצבתי POINT LIGHT מעל הפירמידה עם DIFFUSE לבן. הגדרתי MATERIAL עם DIFFUSE אדום והשתמשתי בו ליצירת המשולש. האפליקציה שלי מאפשרת לי להעלות או להוריד את מיקום האור בעזרת החיצים. כאשר אני מזיז את האור, אני רואה שהשינויים בתאורה על הפירמידה אינם "רציפים", כלומר, לפעמים הפירמידה כולה "נכבית" ולפעמים כולה "נדלקת" בגוון אדום (כאשר אני מזיז את האור)... תופעות מוזרות קורות גם כאשר אני מזיז את האור ימינה ושמאלה. עקרונית, רק צד אחד של הפירמידה אמור להחזיר אור במקרה הזה, לא? עלי לציין ש-BACKFACE CULLING מופעל... עוד נסיון שעשיתי, הוא "להשכיב" הרבה משולשים (שטוחים - לא פירמידות) זה לצד זה רק שיווצר מעין "שטיח". ואז העברתי מעליו את מקור האור. שוב - חלק מהמשולשים נדלקו באדום, חלק בלבן וחלק היו כבויים, אבל כל תזוזה - קטנה ככל שתהיה, תמיד גרמה לשינויים לא רציפים! אז איך מקבלים תאורה נורמלית???? הערה: ע"פ המלצה שראיתי, כל VERTEX מוגדר ע"י XYZ ו-XYZ לנורמל, כלומר: D3DFVF_XYZ | D3DFVF_NORMAL. כמו כן, הנורמלים של כל קודקוד פונים "החוצה" מכל משולש, אבל באותו המישור. לדוגמה: הפינה הימנית של בסיס המשולש היא בעלת נורמל שממשיך ימינה (כאילו ממשיך את קו הבסיס של המשולש). תודה!
 

yair24

Member
לא, אני רק רוצה לדעת...

כי גם אני רוצה ללמוד את הנושא הזה... יאיר
 
אה כן

תופעה דומה אני מקבל גם כאשר הנורמלים מאונכים לכל משולש ומשולש. אולי זה מתנהג קצת אחרת, אבל עדיין התאורה אינה רציפה כאשר העצמים (האור או המשולשים) בתנועה. אז יש רעיונות?
 

voguemaster

New member
אני לא מבין מה אתה עושה

אני אומנם לא בקיא בפרטים הקטנים אבל תשאל את עצמך שאלות כמו: 1. באיזה סוג של vertices אני משתמש ? (רגילים, pre-lit או pre-transform), והאם נתתי להם את הערכים הנכונים לפני הרינדור ?? אפשר בתור התחלה לעבור עם החבר´ה ה-pre-lit, זה מקל מאוד בהתחלה. 2. האם הסדר של הוורטקסים בכל פוליגון שאני רוצה שייראו באמת הולך עם כיוון השעון. 3. האם הנורמלים של הוורטקסים פונים לכיוון הנכון. שים לב, לכל הוורטקסים שמרכיבים face אחד צריך להיות אותו נורמל, והוא אמור לפנות החוצה מה-face, כלומר מאונך לצד החיצוני (הנראה) של ה-face. אם הכל בוצע כמו שצריך, לא אמורות להיות בעיות מיוחדות. כנראה שבאיזשהו שלב עשית טעות כלשהי בכיוונים של הנורמלים.
 
אז ככה

pre-lit vertices היה הניסוי הראשון שלי בעבודה עם DX. כמובן שזה עובד, כי אחרת, לא הייתי צריך לנסות מקורות אור אחרים... pre-transformed??? הרי כל הרעיון הוא להשתמש ב-DX בשביל הטרנספורמציות. קודקודים אחרי טרנספורמציות זה טוב אולי בשביל tutorials... כמו שכתבתי, אני עובד עם FVF של XYZ | NORMAL. הסדר שלהם הוא כמובן בכיוון השעון. אחרת לא הייתי בכלל רואה את ה-FACES. ועובדה, שכאשר אני זז מסביב לפירמידה, אני רואה את כל הצדדים שלה. לגבי הנורמלים: כאן בדיוק העניין. כאשר רוצים להציג גיאומטריה "שטוחה", כלומר, שאינה מעוגלת, משתמשים בנורמלים שהצגת. זוהי לא השיטה המומלצת לאובייקטים מורכבים, שנבנים ע"י TRIANGLE STRIPS. אבל גם כאשר ניסיתי את השיטה הפשוטה יותר (זו שהצגת), קיבלתי את אותה התוצאה... וזה נראה לי נורא מוזר - סה"כ, כאשר אני מזיז את מקור האור (לא את ה-TARGET), משתנה הזווית שלו ביחס ל-FACE. אז למה הגוונים שעל ה-FACE לא משתנים באופן רציף וחלק???? נ.ב. הזזתי את מקור האור בקפיצות של 0.01 לאורך ומעל המשולש.
 

voguemaster

New member
תשמע, עד כאן מגיע הידע שלי ../images/Emo13.gif

בגדול, זה חייב להיות קשור לנורמלים. אני לא יודע איך הם צריכים להיראות באובייקט מורכב כי אכן בדקתי ובספר שלמדתי ממנו יש רק דוגמא של קוביה...
אולי תוכל למצוא מאמרים ב-gamedev ודומיו...
 

odstudio

New member
הימור...

בטכניקה של face-normals, כל ה- face יקבל את אותה עוצמת הארה, משום שכל נקודה על ה- face מתייחסת לאותו normal. לעומת זאת, בטכניקה של vertex-normal, תקבל עוצמות הארה שונות על גבי כל נקודה של ה- face, מה שנקרא gouraud shading (אינטרפולציה של צבע בין vertex ל- vertex). משום שאיני יכול "לראות" ממש את האפקט שאתה מתאר, אולי אתה בעצם לא עובד עם עומק הצבע הנכון, וזה גורם לעיוותי צבע?
 
תיאוריה אחת לפתרון הבעיה...

אז קודם כל, זה לא ממש משנה לי אם אני עובד בשיטה הראשונה או השניה. Gouraud Shading גם לא רלוונטי כרגע, כי אני גם ככה לא מנסה להשיג אינטרפולציה של הצבע. אני רק מנסה להבין למה, בכל שיטה שלא אבחר, השינוי ב-shading לא רציף. זה כאילו למשולש יש רק 3 מצבי shading שבהם הוא יכול להיות: מואר בפינה אחת, מואר לגמרי, או מואר בפינה השניה. אני מקווה שאולי עכשיו אתה יותר "רואה" את הבעיה... התשובה שבסוף קיבלתי ב-FlipCode, היא שככה עובד מנוע ה-T&L בחומרה שלי - מה שלמעשה חששתי מלכתחילה. *אבל*, זו לא תשובה כ"כ מספקת כי ה-Rendering Device שלי הוא אמנם HAL, אבל הגדרתי לבצע Vertex Processing בתוכנה ולא בחומרה. אולי זה קשור ואולי לא - אני לא יודע כרגע. בנוסף, אני הולך להריץ את אותה אפליקציה על GF2, שלו יש מנוע T&L הרבה יותר טוב ממה שיש לי פה במחשב בעבודה
עוד כמה ימים יהיה לי RADEON 9700 ואז בכלל נראה למה הוא מסוגל
כאגיע ל-Shaders אני כבר אטחן לו את הצורה....
 

voguemaster

New member
אם ככה

אולי כדאי שתוסיף קוד שיגלה את כל המצבים המוזרים האלה ויידע במה להשתמש בהתאם לסוג החומרה והיכולות שלה..
 
למעלה