תכנות גרפיקה תלת ממדית בג'אווה, חלק 3: OpenGL

עבר זמן מה מאז הפרק האחרון שלנו בסדרה זו על תכנות גרפיקה תלת ממדית בג'אווה (עוד על כך בסוף טור זה). הנה רענון מהיר על מה שדנו בו לאחרונה ואיפה הפסקנו.

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

כעת, כשיודעים מעט על השימוש בג'אווה תלת מימד, הגיע הזמן להשוות ולהבדיל בין גישת הג'אווה תלת מימדית לגרפיקה תלת מימדית לבין המתמודד המוביל ל- API הגרפי: OpenGL.

שים לב שמאמר זה נועד במקור להיות עתיר קוד, אך ההחלטה המאוחרת של Arcane Technologies בנוגע לכריכת הקוסם (ראה להלן) חייבה את הסרת דוגמאות הקוד. אני מקווה שניתן להתאים את תוכנו של מאמר זה לכריכה עתידית של Java-OpenGL, שעדיין לא זמין מקונסורציום OpenGL.

בכל מקרה, השתדלתי לספק את כל ההפניות וכתובות ה- URL הרלוונטיות והשימושיות הקשורות ל- OpenGL במשאבים בסוף עמודה זו. אם ברצונך לחפור עוד ב- Java-OpenGL, אני ממליץ לך בחום לעיין בהפניות אלה.

השוואה בין Java-OpenGL ל- Java 3D

בתשלומים קודמים ב- Java 3D, הבאתי רשימה של נקודות חוזק וחולשה בשימוש ב- Java 3D ליישומים גרפיים. בואו נציג מחדש את הרשימה הזו, אך נעשה זאת על ידי בחינה של נקודות החוזק והחולשה של פתרונות מבוססי Java-OpenGL במקום פתרונות מבוססי Java 3D.

חוזקות השימוש ב- OpenGL (ובהרחבה ובמקרה שצוין, כריכות Java-OpenGL):

  • OpenGL מספק מודל פרוצדורלי של גרפיקה

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

  • OpenGL מספק גישה ישירה לצינור העיבוד

    זה נכון לגבי כל אחת מכריכות השפה השונות, כולל רוב כריכות הג'אווה. OpenGL מאפשר למתכנתים לציין ישירות כיצד יש להציג גרפיקה. אחת אינו רק לרמוז ואת הבקשה כפי עם 3D Java, אחד קובע.

  • OpenGL מותאם בכל דרך שאפשר להעלות על הדעת

    OpenGL מותאמת בחומרה ותוכנה ובפלטפורמות ממוקדות החל ממחשבים אישיים וקונסולות המשחק הזולות ביותר ועד מחשבי העל הגרפיים המתקדמים ביותר.

  • ספקים מכל סוג של חומרה הקשורה לגרפיקה תלת-ממדית תומכים ב- OpenGL

    OpenGL הוא

    ה

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

מצד שני, שום דבר לא מושלם. ל- OpenGL, ובוודאי ל- Java-OpenGL, יש חסרונות משמעותיים:

  • נקודות החוזק של הגישה הפרוצדוראלית לתכנות גרפיקה הן בו זמנית חולשה עבור מתכנתי Java רבים

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

  • אופטימיזציות OpenGL של ספקים רבים נועדו להקטין את בחירת החומרה

    האינטרס של כל ספק הוא לבנות הרחבות קנייניות ולבצע אופטימיזציות קנייניות כדי למכור יותר חומרה משלה. כמו בכל מיטבי החומרה, עליכם להשתמש באופטימיזציות OpenGL ספציפיות למאיץ מתוך הבנה שכל אופטימיזציה לפלטפורמה אחת מפחיתה את הניידות והביצועים עבור כמה אחרים. האופטימיזציות הכלליות יותר של Java 3D נועדו בעיקר למקסם את הניידות של יישומי Java 3D.

  • בעוד ממשקי C ל- OpenGL נמצאים בכל מקום, ממשקי Java עדיין אינם סטנדרטיים ואינם זמינים באופן נרחב

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

  • החשיפה של OpenGL לפרטים הפנימיים של תהליך העיבוד יכולה לסבך באופן משמעותי תוכניות גרפיקה תלת מימד אחרת

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

כפי שניתן לראות מהיתרונות והחסרונות בגישות מבוססות OpenGL, Java-OpenGL חזקה ברבים מהאזורים בהם Java 3D חלש. OpenGL מעניק למתכנתים גישה ברמה נמוכה לתהליך העיבוד ש- Java 3D נמנע במפורש, ו- OpenGL זמין כיום בפלטפורמות רבות בהרבה מ- Java 3D (קוסם בצד). אך הגמישות הזו כוללת מחיר פוטנציאלי: למתכנתים יש הרבה מקום לייעל, מה שמנגד אומר שיש להם הרבה מקום לפשל את הדברים. ל- Java 3D יש אופטימיזציה מובנית יותר ומודל תכנות קל יותר שעשוי להיות שימושי במיוחד עבור מתכנתים חדשים בעבודת Java, גרפיקה תלת ממדית או תכנות גרפיקה ברשת ומופצת.