Προγραμματισμός

Τρισδιάστατος προγραμματισμός γραφικών σε Java, Μέρος 3: OpenGL

Έχει περάσει αρκετός καιρός από την τελευταία μας δόση σε αυτήν τη σειρά σε τρισδιάστατο προγραμματισμό γραφικών στην Java (περισσότερα σε αυτό στο τέλος αυτής της στήλης). Ακολουθεί μια γρήγορη ανανέωση για το τι συζητήσαμε τελευταία και για το πού σταματήσαμε.

Στις δύο προηγούμενες στήλες (βλ. Πόροι), διερευνήσαμε το Java 3D. Συζητήσαμε στατικό περιεχόμενο και μικρές σκηνές, στη συνέχεια χρησιμοποιήσαμε μεγαλύτερα γραφήματα σκηνής και ενσωματώσαμε διαδραστικότητα σε ορισμένους βασικούς τρισδιάστατους κόσμους.

Τώρα που γνωρίζετε λίγο για τη χρήση του Java 3D, ήρθε η ώρα να συγκρίνετε και να αντιπαραβάλετε την προσέγγιση Java 3D στα γραφικά 3D με τον κορυφαίο υποψήφιο API γραφικών: OpenGL.

Λάβετε υπόψη ότι αυτό το άρθρο προοριζόταν αρχικά να είναι εντατικό στον κώδικα, αλλά η καθυστερημένη απόφαση της Arcane Technologies σχετικά με τη δέσμευση του μάγου (βλ. Παρακάτω) απαιτούσε την κατάργηση των παραδειγμάτων κώδικα. Ελπίζω ότι το περιεχόμενο αυτού του άρθρου μπορεί να προσαρμοστεί για μια μελλοντική δέσμευση Java-OpenGL, η οποία δεν είναι ακόμη διαθέσιμη από το OpenGL Consortium.

Σε κάθε περίπτωση, προσπάθησα να παρέχω όλες τις σχετικές και χρήσιμες αναφορές και διευθύνσεις URL που σχετίζονται με το OpenGL στους πόρους στο τέλος αυτής της στήλης. Εάν θέλετε να ανακαλύψετε περαιτέρω το Java-OpenGL, σας συνιστούμε ανεπιφύλακτα να ελέγξετε αυτές τις αναφορές.

Σύγκριση Java-OpenGL με Java 3D

Σε προηγούμενες δόσεις σε Java 3D, παρείχα μια λίστα με τα πλεονεκτήματα και τις αδυναμίες της χρήσης Java 3D για εφαρμογές γραφικών. Ας επαναλάβουμε αυτήν τη λίστα, αλλά το κάνουμε εξετάζοντας τα πλεονεκτήματα και τις αδυναμίες των λύσεων που βασίζονται σε Java-OpenGL αντί για λύσεις που βασίζονται σε Java 3D.

Πλεονεκτήματα της χρήσης OpenGL (και, κατ 'επέκταση και όπου σημειώνεται, συνδέσεις Java-OpenGL):

  • Το OpenGL παρέχει ένα διαδικαστικό μοντέλο γραφικών

    Αυτό ταιριάζει πολύ με πολλούς από τους αλγόριθμους και μεθόδους που έχουν χρησιμοποιήσει ιστορικά οι προγραμματιστές γραφικών. Το διαδικαστικό μοντέλο είναι ταυτόχρονα διαισθητικό και απλό για πολλά καταξιωμένα λάτρεις των τρισδιάστατων γραφικών.

  • Το OpenGL παρέχει άμεση πρόσβαση στον αγωγό απόδοσης

    Αυτό ισχύει για οποιαδήποτε από τις διάφορες συνδέσεις γλώσσας, συμπεριλαμβανομένων των περισσότερων συνδέσμων Java. Το OpenGL δίνει τη δυνατότητα στους προγραμματιστές να καθορίζουν άμεσα πώς πρέπει να αποδίδονται τα γραφικά. Δεν είναι μόνο ένα ίχνος και αίτηση όπως με το Java 3D, ένα ορίζει.

  • Το OpenGL βελτιστοποιείται με κάθε δυνατό τρόπο

    Το OpenGL έχει βελτιστοποιηθεί σε υλικό και λογισμικό και στοχευμένες πλατφόρμες που κυμαίνονται από τους φθηνότερους υπολογιστές και κονσόλες παιχνιδιών έως τους πιο υπερυπολογιστές γραφικών υψηλών προδιαγραφών.

  • Οι προμηθευτές κάθε είδους υλικού που σχετίζεται με γραφικά 3D υποστηρίζουν OpenGL

    Το OpenGL είναι

    ο

    πρότυπο βάσει του οποίου οι προμηθευτές υλικού μετρούν την τεχνολογία γραφικών τους, χωρίς καμία γραμμή. Καθώς η Microsoft έχει ενταχθεί με την SGI στην πρωτοβουλία Fahrenheit, έχει γίνει ολοένα και πιο προφανές σε πολλούς ότι αυτό ισχύει στην πραγματικότητα την έμμεση αναγνώριση της Microsoft ότι η OpenGL κέρδισε τους πολέμους API για γραφικά 2D και 3D.

Από την άλλη πλευρά, τίποτα δεν είναι τέλειο. Το OpenGL, και σίγουρα οι συνδέσεις Java-OpenGL, έχουν κάποια σημαντικά μειονεκτήματα:

  • Τα πλεονεκτήματα της διαδικαστικής προσέγγισης στον προγραμματισμό γραφικών είναι ταυτόχρονα αδυναμία για πολλούς προγραμματιστές Java

    Για σχετικά νέους προγραμματιστές, πολλοί από τους οποίους μπορεί να έχουν λάβει την πρώτη τους επίσημη οδηγία προγραμματισμού στην Java χρησιμοποιώντας αντικειμενοστρεφείς μεθοδολογίες, η διαδικαστική μέθοδος του OpenGL δεν ταιριάζει καλά με μια αντικειμενοστρεφή προσέγγιση και μια καλή πρακτική μηχανικής.

  • Οι βελτιστοποιήσεις OpenGL πολλών προμηθευτών έχουν ως στόχο τη μείωση της επιλογής υλικού

    Είναι προς το συμφέρον κάθε προμηθευτή να δημιουργήσει ιδιόκτητες επεκτάσεις και να κάνει ιδιόκτητες βελτιστοποιήσεις για να πουλήσει περισσότερο από το δικό του υλικό. Όπως συμβαίνει με όλες τις βελτιστοποιήσεις υλικού, πρέπει να χρησιμοποιήσετε βελτιστοποιήσεις OpenGL ειδικά για επιταχυντές με την κατανόηση ότι κάθε βελτιστοποίηση για μια πλατφόρμα μειώνει τη φορητότητα και την απόδοση για πολλές άλλες. Οι γενικότερες βελτιστοποιήσεις γενικού σκοπού Java 3D στοχεύουν κυρίως στη μεγιστοποίηση της φορητότητας εφαρμογών Java 3D

  • Ενώ οι διεπαφές C στο OpenGL είναι πανταχού παρούσες, οι διεπαφές Java δεν είναι ακόμη τυποποιημένες και δεν είναι ευρέως διαθέσιμες

    Το προϊόν Magician της Arcane Technologies ήταν μέχρι πρόσφατα στην αγορά για να αλλάξει αυτό το ζήτημα φορητότητας, αλλά με την κατάργησή του πηγαίνει μεγάλο μέρος της ιστορίας της πλατφόρμας για το Java-OpenGL, τουλάχιστον προς το παρόν. Περισσότερα για αυτό παρακάτω.

  • Η έκθεση του OpenGL σχετικά με τις εσωτερικές λεπτομέρειες της διαδικασίας απόδοσης μπορεί να περιπλέξει σημαντικά διαφορετικά απλά προγράμματα γραφικών 3D

    Η δύναμη και η ευελιξία έρχονται στην τιμή της πολυπλοκότητας. Στους γρήγορους κύκλους ανάπτυξης του σημερινού τεχνολογικού κόσμου, η πολυπλοκότητα είναι από μόνη της κάτι που πρέπει να αποφεύγεται όπου είναι δυνατόν. Η παλιά παροιμία για τα σφάλματα είναι αλήθεια: όσο περισσότερες γραμμές κώδικα, τόσο περισσότερα σφάλματα (γενικά).

Όπως μπορείτε να δείτε από τα πλεονεκτήματα και τα μειονεκτήματα για προσεγγίσεις που βασίζονται στο OpenGL, το Java-OpenGL είναι ισχυρό σε πολλές από τις περιοχές στις οποίες το Java 3D είναι αδύναμο. Το OpenGL παρέχει στους προγραμματιστές πρόσβαση χαμηλού επιπέδου στη διαδικασία απόδοσης που αποφεύγει ρητά το Java 3D και το OpenGL είναι προς το παρόν διαθέσιμο σε πολύ περισσότερες πλατφόρμες από το Java 3D (εκτός από το Magician). Αλλά αυτή η ευελιξία έρχεται με μια πιθανή τιμή: οι προγραμματιστές έχουν πολύ χώρο για βελτιστοποίηση, πράγμα που αντιστρόφως σημαίνει ότι έχουν πολύ χώρο για να βλάψουν τα πράγματα. Το Java 3D έχει πιο ενσωματωμένη βελτιστοποίηση και ένα ευκολότερο μοντέλο προγραμματισμού που μπορεί να αποδειχθεί ιδιαίτερα χρήσιμο για προγραμματιστές που είναι νέοι στην Java, 3D γραφικές εργασίες ή δικτυακούς και κατανεμημένους προγραμματισμούς γραφικών.