DirectX and OpenGL

The MarBar

New member
DirectX and OpenGL

מה המטרות שלהם? במה הם עוזרים? תשובה נרחבת אם אפשר.
 

odstudio

New member
תשובה לגבי DirectX.

DirectX ======= פותחה לראשונה ע"י מייקרוסופט עבור Windows95. פיתוחה נועד לאפשר כתיבת יישומים גרפיים (בעיקר משחקים) הדורשים יכולת גרפית מיטבית. עקב שיטת העבודה של מע´ ההפעלה, כל ביצוע הוראה גרפית בתוכנית כלשהי דורשת פניה לממשק GDI, שהוא המתקשר עם הדרייבר של כרטיס המסך / המדפסת וכד´, ולכן מהירות הביצוע הגרפית מואטת. זו הסיבה שמייקרוסופט פיתחה את DirectX - על מנת לעקוף את הפניות לממשק ה- GDI, ובכך לאפשר כתיבה ישירות לזיכרון כרטיס המסך, וכן לאפשר שימוש ב- Full-Screen במקום בתוך חלונות. יצרני כרטיסי-המסך מספקים בדרייבר שהם מפיצים שרותי Hardwarwe Abstraction Layer או בקיצור: HAL. באופן זה, DirectX משתמשת ב- HAL במקום ב-GDI על-מנת לבצע פעולות גרפיות ישירות על גבי כרטיס המסך. ספריית DirectX מבוססת של מספר Dll-ים שנכתבו עפ"י מתודולוגיית COM, ובכך מאפשרת עידכונם תוך כדי שמירה על פעולת תוכנות ישנות יותר מבלי לפגום בפעולתן, בעוד שתוכנות חדשות יותר המותאמות לגרסאות מעודכנות של DirectX ייהנו מתכונות ואפשרויות רבות חדשות יותר. בהמשך התפתחות הספריות, החלו גם יצרני כרטיסי-המסך לשלב תמיכה בספריות אלה, כאשר הרעיון המרכזי הוא כזה: במידה וכרטיס המסך תומך בפעולה מסויימת, הוא יבצע אותה, ובמידה ולא, DirectX המותקנת על מע´ ההפעלה תבצע אותה, מה שנקרא Software-Emulation Layer. מכיון שביצוע פעולה מסויימת על גבי Hardware מהיר הרבה יותר מביצועה ב- Software, ראוי לו לכרטיס המסך לתמוך בכמה שיותר תכונות תואמות DirectX על מנת שהביצועים הגרפיים יהיו מיטביים. DirectX בעיקר מיועדת לכתיבת משחקים ואפליקציות מולטימדיה. לכן, מלבד ייעודה כספריה לגרפיקה דו-מימדית (שטוחה), היא מיועדת לגרפיקה תלת-מימדית, אשר חלקה בספריה נקרא Direct3D. אין ספק כי כיום, רובן המכריע של תוכנות המשחקים עושה שימוש נרחב ביכולות גרפיות תלת-מימד, ועקב כוח החישוב העצום הדרוש ליישום תכונות אלה, הן מייושמות אך ורק על-גבי ה- Hardware (כרטיס המסך). ספריית DirectX כוללת גם את DirectShow, התומכת באפשרויות הצגת וידאו/אודיו (למשל "נגן המדיה" של מייקרוסופט) מבוסס על DirectShow. הארכיטקטורה של DirectShow מאפשרת טעינת CODECs בזמן-אמיתי בהתאמה למדיה המנוגנת. (CODEC = דוחס/פורס של קובץ מדיה בפורמט מסויים). כמו-כן, DirectShow מנצלת את יכולת כרטיס-המסך להציג וידאו ב- Overlays אם זה תומך ביכולת זו. (אין אמולצייה למצב Overlays בתוכנה). עוד כוללת DirectX את DirectSound, המאפשרת יכולות נגינת אודיו, וכן נגינת אודיו תלת-מימדי. (לדוגמה: עצם רחוק במשחק נשמע חלש יותר מעצם הקרוב יותר לשחקן, וכד´). DirectX כוללת את DirectInput אשר יודעת לעבוד עם כל סוגי הקלט הקיימים (מקלדת, עכבר, ג´ויסטיקים עם/בלי רטט, TrackBalls, Game-Pads ועוד). ולסיום - DirecPlay, המאפשרת פיתוח משחקים רבי-משתתפים באמצעות רשתות וכד´. כיום, נמצאת DirectX בגירסת 8.1, אך היא תמשיך ותתפתח כפי הנראה עוד ועוד, יד ביד עם יצרני כרטיסי החומרה השונים. חסרונות הפיתוח באמצעות DirectX - היא איננה Cross-Platform, כלומר היא מותאמת אך ורק לפיתוח אפליקציות Windows, עקב שימושה בתשתיות מערכת ההפעלה לשם פעולתה. השימוש ב- Direct3D לפעמים מסובך מאוד ודורש ידע ויכולות תכנות גבוהות מאוד. לגבי OpenGL, אשר אין לי הכרות של ממש איתה, אוכל רק לומר שהיא פרי פיתוח של Silicon-Graphics, וייעודה הוא תמיכה בגרפיקה תלת-מימדית, כאשר לעומת Direct3D היא כנראה יותר פשוטה להבנה ויישום מצד המפתחים, וכן היא Cross-Platform, שזהו עוד יתרון מבחינתם של המפתחים. עם זאת, היא תומכת במגוון אפשרויות ויכולות מצומצמות מאלו של DirectX . רוב כרטיסי המסך תומכים בד"כ בגרסאות של DirectX ו- OpenGL במקביל. מקווה שעזרתי.
 

The MarBar

New member
תודה

עזרת
 

selalerer

New member
תשובה קצרה לגבי OPENGL

<font color=blue> OPENGL זאת יחידה גרפית, תלת מימדית, פתוחה לשימוש הציבור המיועדת לVC++ . ניתן למצוא עליה מידע ב- www.opengl.org </font>
 

חובבן

New member
לא מדויק

OPENGL לא מיועדת ל ++VC, ל VC יש תמיכה ב OPENGL. OPENGL זה סטנדרט שנכתב במקור ע"י SGI ונתמך היום על מספר גדול של פלטפורמות, בינהן: Mac OS, OS/2, UNIX, Windows 95/98, Windows 2000, Windows NT, Linux, OPENStep, and BeOS אם אתה מעונין לפתח ליותר מפלטפורמה אחת, אתה חייב לפתח ב OPENGL.
 

אלדד27

New member
נכון מאוד, וזאת הסיבה העיקרית

(ובערך היחידה) להעדיף את OpenGL על פני DirectX.
 

voguemaster

New member
יש עוד סיבה

OpenGL טובה יותר ברינדור פוליגונים, דברים מבוצעים יותר חכם מאחורי הקלעים. מה שאני בעצם אומר זה של-OpenGL יש ביצועים טובים יותר כל עוד מדובר על רינדור פוליגונים. המחשה לזה אפשר לקבל אם עובדים עם תוכנות 3D כמו MAX. רינדור של View כלשהו על הסצינה כולה או חלקה עובד הרבה הרבה יותר מהר ב-OpenGL מאשר ב-D3D (בהנחה שלא משתמשים באימפלמנטצית OGL של מיקרוסופט)..
 

אלדד27

New member
אני לא מכיר שום השוואה כזו

שקובעת את מה שאתה אומר. לגבי היישום הספציפי ב - MAX, אני לא יודע כמה טוב השימוש שלהם ב - D3D. יכול מאוד להיות שהתוכניתנים לא מכירים את כל הטריקים של D3D, אבל כן את OpenGL, או שלמשל הם לא השקיעו ממש בגרסת ה - D3D...
 

voguemaster

New member
אפשר לראות גם במשחקים

אם ממש שמים לב. משחקים עם מספר פוליגונים גבוה רצים טוב יותר עם OpenGL, במיוחד אם ה-ICD הוא לא של מיקרוסופט
 

אלדד27

New member
אלי, אני לא יודע מה איתך,

אבל אני לא מסוגל לספור FPS בלי debug information. חוץ מזה, שוב. אני מניח שאנשים שכותבים ל - OpenGL יודעים איך להשתמש ב-OpenGL ופחות ב - D3D. אני מדבר על מדידה אובייקטיבית של המהירות - ומהבחינה הזו עד כמה שאני יודע, אין הרבה הבדל. לעומת זאת, D3D הוא חלק מחבילה כוללת ולזה דווקא יש יתרון מאוד גדול בעיניי.
 

voguemaster

New member
אני אתן לך דוגמא

יש משחק מוכר, נקרא Descent 3. הרצתי אותו בזמנו על כרטיס מסך שלא היה מסוגל לתת לי ביצועים מושלמים (כלומר משהו בסדר גודל של 50 או 60 FPS). בשלב הראשון ממש, יש איזור עם הרבה גז שעוברים דרכו. מסתבר שהמתכנתים כתבו את המשחק כך שיש כמה אלפי פוליגונים בסצינה כשאתה עובר דרך הגז (תכפיל בכמות פריימים בשניה ואתה מקבל מספר גדול מאוד שהכרטיס לא יכל לעמוד בו). הרצתי את המשחק גם ב-D3D וגם ב-OGL. תחת D3D הגז רונדר נכון אבל המחשב האט למהירות של צב, כלומר אולי 2 או 3 FPS להערכתי. תחת OGL הגז לא רונדר נכון אלא רק ראו את הפוליגונים (טוב, OGL לא תומכת בהכל..), אבל הסצינה הגיבה בצורה חלקה כמעט לחלוטין. שוב, לעמוד מול הגז ההוא ולהסתכל עליו בעזרת D3D, המחשב לא זז בכלל, תחת OGL זה לא כך. במהלך השנים היו עוד כמה דוגמאות קלות, כבר ברחו לי מהראש, אבל לדעתי יש יתרון מסוים. יכול להיות שאני טועה, אבל it sure feels like it...
 
למעלה