Προς το περιεχόμενο

DirectX vs OpenGL


Προτεινόμενες αναρτήσεις

Δημοσ.

Παιδια μπορει κανεις να μου πει τι διαφορες υπαρχουν αναμεσα στο DirectX και OpenGL, τα πλεονεκτηματα και τα μεινοκτηματα απο το καθενα και ποιο ειναι καλυτερο.

Ευχαριστω

Δημοσ.

Καλυτερα να το ψαξεις σε καποιο ξενο site, σε ελληνικο φορουμ ερωτηση "dx vs gl" ειναι... Ναι τα *nix ειναι καλυτερα αλλα ολοι εχουν windows happy.gif

 

Απο τα κυρια χαρακτηριστικα

dx ειναι σε comκαι τρεχει σε win (και xbox ?? )

gl ειναι σε c abi και τρεχει σε win/*nix/mac (το ps3 *nix δεν ειναι; τοτε και ps3)

Δημοσ.

Τα δύο APIs είναι ισοδύναμα.

Ο απλός προγραμματιστής δεν έχει να κερδίσει ή να χάσει από τις ελάχιστες και

εξειδικευμένες δυνατότητες που μπορεί να έχει το ένα και να μην έχει το άλλο.

Ο προχωρημένος που κάνει σοβαρή δουλειά, ξέρει ή θα βρει τρόπο να παρακάμψει

την όποια τυχόν έλλειψη.

 

Ωστόσο, συνιστώ θερμά το openGL κι όχι το το DX.

Αν και τα έχω αναφέρει στο παρελθόν, επαναλαμβάνω εδώ τους (προσωπικούς μου) λόγους :

 

1)

Το opengl είναι κατ' εμένα καλύτερη επένδυνση από το directX διότι διατηρεί σε μεγάλο βαθμό

την συμβατότητα με παλαιότερες εκδόσεις του. Ότι έχω γράψει εκεί, τρέχει χωρίς πρόβλημα και

στην έκδοση 3. Από την έκδοση 3 και εντεύθεν κάποιες παλαιές εντολές (και γενικά όλη η

fixed pipeline) είναι deprecated και θα καταργηθούν μελλοντικά αλλά η μετάβαση είναι ομαλή

και σέβεται τον παλαιό κώδικα.

 

Το directX δεν το έχει αυτό. Κάθε νέα έκδοση έχει σημαντικές ασυμβατότητες με τις προηγούμενες.

Είχα γράψει προγράμματα σε directx 8 που δεν τρέχουν στο 9c και, ακόμη χειρότερα, ένα σωρό

προγράμματα στο 9c που δεν τρέχουν στο 10. Προφανώς το ίδιο θα γίνεται και με τα 10 και 11.

Οι μετατροπές του κώδικα από την μια έκδοση στην άλλη είναι μπελάς και συνήθως δύσκολο να

γίνουν αν πρόκειται για μεγάλο πρόγραμμα.

Γι' αυτούς τους λόγους μετάνοιωσα που το ασχολήθηκα και φυσικά δεν θα το ξαναπιάσω (το DX).

 

2)

Το opengl μπορεί να χρησιμοποιηθεί και μέσω της Qt με απλό τρόπο δίνοντας έτσι την δυνατότητα

για cross platform εφαρμογές. Κάτι τέτοιο δεν γίνεται στο directX διότι αφορά μόνον τα Windows.

Επιπλέον, για τo openGL με τις C/C++ υπάρχει πολύ περισσότερο υλικό διαθέσιμο που μπορείς να

μελετήσεις ή να χρησιμοποιήσεις άμεσα απ΄ οτι για το DX.

Αυτός είναι και ένας λόγος για την χρήση της C++ και όχι της C#.

 

 

Και κάτι άλλο :

αν θέλεις κυρίως οπτικοποίηση δεδομένων (data visualization) η ΑΠΟΛΥΤΗ και ΚΑΛΥΤΕΡΗ λύση

είναι το vtk (Visualization Toolkit).

Είναι ένα εκπληκτικό framework που περιέχει έτοιμο ότι θα μπορoύσες θα χρειαστείς για οπτικοποίηση,

κυριολεκτικώς τα πάντα. Απορώ πώς δεν το ξέρουν όσοι ασχολούνται με γραφικά.

Είναι open source, crossplatform, υποστηρίζεται πολύ καλά εδώ και 15 χρόνια και επίσης δουλεύει

και με την Qt. Το επαγγελματικό του αντίκρυσμα και η χρηστικότητά του είναι σημαντικά υψηλότερα

από αμφότερα των opengl και dx...

 

-

Δημοσ.

Να πω και γω λίγα πραγματάκια μιας και έχω ασχοληθεί λιγάκι με το θέμα.

 

- Feature-wise και τα 2 APIs είναι σχεδόν ισοδύναμα όπως ειπώθηκε πιο πάνω. Το GL βέβαια αργεί λιγάκι να κάνει standard κάποια νέα features.

 

- Το GL πλέων σιγά σιγά τείνει να σπάσει την backwards combatibility και άρα ένα από τα μεγάλα πλεονεκτήματά του. Η προσωπική μου γνώμη είναι ότι καλά κάνει. Κάνοντας deprecated κάποια παμπάλαια features και βοηθάνε εμάς τους προγραμματιστές να χρησιμοποιήσουμε τις νέες τεχνικές αλλά και τους driver developers καθώς δεν μπαίνουν σε αυτό τον Γολγοθά να συντηρούν αρχαία code paths.

 

- Ένα μεγάλο πλεονέκτημα του D3D στα PCs είναι η ταχύτητα. Αυτό οφείλεται σε μεγάλο βαθμό στο γεγονός ότι οι driver developers του δίνουν μεγαλύτερη προσοχή (μην ξεχνάμε το φιάσκο του παιχνιδιού Rage).

 

- Το GL με την έλευση των έξυπνων συσκευών ξαναρχίζει να γίνεται και πάλι σχετικό.

 

- Το GL μαθαίνεται πιο εύκολα.

 

Σε γενικές γραμμές δεν υπάρχει καλύτερο. Εξαρτάται απο το τι θες. Προσωπικά έχω επιλέξει GL είναι παντού, από mainframes σε κινητά.

Δημοσ.

Το openGL αποτέλεσε (και είναι ακόμη) ένα σοβαρό βιομηχανικό πρότυπο.

 

Στον βιομηχανικό χώρο δεν είναι δυνατόν κάθε λίγους μήνες να υπάρχουν ασυμβατότητες

μεταξύ των εκδόσεων, γι' αυτό και οι αλλαγές είναι πολύ πιο δύσκολο να υιοθετηθούν.

Η πολτική που ακολουθείται για μεγάλης κλίμακας αλλαγές είναι να χαρακτηρίζονται κάποιες

λειτουργίες ως deprecated. Aυτές ΔΕΝ πρέπει να χρησιμοποιούνται σε νέο κώδικα.

Θα συνεχίσουν να υποστηρίζονται για ένα διάστημα με διάφορους τρόπους αλλά σταδιακά

θα απαλειφθούν εντελώς. Ολόκληρη σχεδόν η fixed pipeline εμπίπτει εδώ.

Συνεπώς, το σπάσιμο της συμβατότητας στο openGL γίνεται μεν αλλά με τρόπο που δίνει

χρόνο στους προγραμματιστές να προσαρμοστούν. Όλοι οι παλιοί κώδικες τρέχουν αυτούσιοι,

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

εξαιτίας της βιομηχανικής του εξάπλωσης - δεν θα συμβαίνει εσαεί.

 

 

Το DX από αυτή την άποψη έφερε πολλές ψυχρολουσίες στους οπαδούς του.

Σ' αυτό, τα προγράμματα μεταξύ των εκδόσεων (ακόμα και των διαδοχικών),

στις περισσότερες περιπτώσεις δεν κάνουν καν compile - τουλάχιστον χωρίς πολλές αλλαγές.

Σε κάποιες άλλες, με λίγες αλλαγές γίνεται compile σωστά αλλά το πρόγραμμα κρεμάει όταν τρέχει,

ακόμη και αφού αντικατασταθούν τα dllς και τα libς της αντίστοιχης έκδοσης.

 

Το γεγονός είναι ότι ο κώδικας ΔΕΝ τρέχει αυτούσιος από την μιά έκδοση στην άλλη και

συχνά πρέπει να μετατραπεί, άλλοτε περισσότερο και άλλοτε (το πιο συχνό) λιγότερο εύκολα.

Εδώ η MS μας τα χάλασε. Κρίνω ότι τελικά δεν αξίζει τον κόπο το ψάξιμο.

 

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

μεταξύ των εκδόσεων. Δεν είναι χρηστικό να γράφω κάτι και μια ή δυο εκδόσεις μετά να μην

μπορεί να γίνει compiled χωρίς πολλές μετατροπές - σπατάλη χρόνου και κόπου.

Στο οpenGL, τρέχουν με καθόλου ή ελάχιστες αλλαγές προγράμματα γραμμένα από την πρώτη

έκδοση χωρίς να αλλάξω σχεδόν τίποτε.

 

Εν πάση περιπτώση, μιλώ ως ερασιτέχνης.

Θέλω όταν μαθαίνω/φτιάχνω κάτι, όσο το δυνατόν να έχει διάρκεια και να μην απαξιώνεται εύκολα.

Εδώ διαπίστωσα ότι το openGL σαφώς υπερτερεί. Ένας επαγγελματίας ή guru που παρακολουθεί διαρκώς

κάθε νέα έκδοση του DX και έχει στα δάκτυλά του όλες τις διαφορές μεταξύ τους, μπορεί να του είναι

εύκολο να συντηρεί διαρκώς τα προγράμματά του - εγώ δεν ανήκω σε αυτή την κατηγορία.

 

-

Δημοσ.

Ισα ισα που η openGL δεν αργει να βγαλει νεα features , αφου υπαρχει ο μηχανισμος των extensions....

Στο direct3D συμβαινει αυτο που λες, γιατι αργει η MS να βγαλει νεα εκδοση

 

Επισης καλο ειναι να μην συγκρινουμε το directX με την openGL.Πιο σωστη συγκριση ειναι το direct3D/openGL , γιατι το directX προσφερει και αλλες λειτουργιες που δεν συνδεονται αμεσα με τα γραφικα !

Δημοσ.

Σωστά το επησημαίνεις.

 

Το openGL αφορά μόνον τα γραφικά ενώ το DX αφορά επιπλέον και ήχο,

έλεγχο πληκτρολογίου/χειριστηρίων, σύνδεση στο διαδίκτυο κ.α.

Είναι σύνηθες τα γραφικά να γίνονται σε openGL ενώ τα υπόλοιπα με το DX.

Προφανώς, στην συζήτηση εννοείται το D3D, όχι όλο το DX.

 

O μηχανισμός των extensions είναι κάπως αμφιλεγόμενος.

Ωστόσο, χάρη σ' αυτόν, το openGL μπορούσε πάντα να κάνει ότι και το D3D που

έβγαζε εκδόσεις συχνότερα και μερικές φορές καινοτόμησε.

 

 

Αλλά το σπουδαιότερο για τον κοινό προγραμματιστή είναι αυτά που ανάφερα στα post #4 & #6.

Το χειρότερο σενάριο είναι να διαθέσει κάποιος μερικούς μήνες για να μάθει το DX 8 (ή 9)

και να διαπιστώσει ότι αυτά που έμαθε/έφτιαξε έχουν διαφοροποιηθεί στο 9 (ή 10) τόσο ώστε

να πρέπει να τα ξαναψάχνει από την αρχή (την έπαθα δυο φορές)...

 

Ευχαριστώ την MS αλλά το έμαθα το μάθημά μου και ΔΕΝ θα ξαναπάρω.

Θα μείνω στο openGL που σέβεται τον κόπο και τον χρόνο μου.

Κι' αν δεν μπορεί να κάνει εκείνο το σούπερ-ντούπερ ΧΧΧΧ εφέ,

δεν χάθηκε ο κόσμος (που το κάνει αν ξέρεις πώς) !

 

-

Δημοσ.

Το DX από αυτή την άποψη έφερε πολλές ψυχρολουσίες στους οπαδούς του.

Σ' αυτό, τα προγράμματα μεταξύ των εκδόσεων (ακόμα και των διαδοχικών),

στις περισσότερες περιπτώσεις δεν κάνουν καν compile - τουλάχιστον χωρίς πολλές αλλαγές.

Σε κάποιες άλλες, με λίγες αλλαγές γίνεται compile σωστά αλλά το πρόγραμμα κρεμάει όταν τρέχει,

ακόμη και αφού αντικατασταθούν τα dllς και τα libς της αντίστοιχης έκδοσης.

 

Δυο πραγματα θελει.

Για compile θα κατεβασεις την SDK στην οποια θα δουλεψεις (πχ αν θες d3d9 θα κατεβασεις d3d9 και οχι d3d10)

Για runtime μαζι με το προγραμα που εφτιαξες, θα βαλεις και το συγκεκριμενο end user redistributable packet (καμια 100ρια mb). Ουτε dll ουτε lib ουτε τιποτα, εφοσον δεν κανει link.

Δημοσ.

Είχα φτιάξει κάποτε μια ολόκληρη ισομετρική grpahics engine σε DX 7.

Και μια μηχανή ήχου (sound engine) σε DX 8.

ΔΕΝ τρέχουν σε DX9,10,11.

Οι απαιτούμενες μετατροπές είναι τόσες και τέτοιες ώστε πρέπει να ξαναγραφούν από την αρχή.

 

Για να μην αναφερθώ σε ένα πλήθος από δοκιμαστικά παραδείγματα που μελετούσα

και έφτιαχνα για να μάθω. Του 8 ΔΕΝ τρέχουν στο 9 και του 9 ΔΕΝ τρέχουν στο 10.

 

Είναι γελοίο και άκομψο να διατηρώ το SDK του DX 7 ή 8 και ταυτόχρονα το 9 ή/και 10 όταν ήδη

είναι τόσο πεπαλαιωμένα. Όλος ο χρόνος και ο κόπος που έκανα τότε αχρηστεύτηκαν (πολύ δουλειά).

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

Ούτε είναι δυνατόν να ψάχνω κάθε τρεις και λίγο τις διαφορές μεταξύ των εκδόσεων.

 

 

Το σωστό είναι η τελευταία έκδοση να υποστηρίζει κώδικα γραμμένο για τις προηγούμενες (όπως στο openGL)

κι όχι να πρέπει να διατηρούνται πολλαπλά και απαρχαιωμένα SDKs στον υπολογιστή - που ξανακούστηκε αυτό ;

Έτσι υπάρχει η δυνατότητα να χρησιμοποιείς κατά βούληση όποια και όσα νέα χαρακτηριστικά εισάγει η

νεώτερη έκδοση. Ο υπολογιστής είναι ενημερωμένος με τα πιο πρόσφατα και δεν γεμίζει με σαβούρα.

 

Το openGL γενικώς πληρεί αυτές τις προϋποθέσεις, είναι πολύ πιο ξεκάθαρο και δεν έχει κανένα τεχνικό

μειονέκτημα για τον συνήθη προγραμματιστή. Αν είχα γράψει σ' αυτό τα παραπάνω, θα έτρεχαν ακόμη όλα.

 

 

Το κατάλαβα αργά αλλά τώρα ξέρω :

για επένδυση που αντέχει στον χρόνο και δεν απαξιώνεται η επιλογή είναι καθαρά το openGL, πάει και τέρμα...

Παθός και μαθός....

 

-

Δημοσ.

Παιχνιδια τα οποια εχουν φταιχτει με DirectX 8 δεν τρεχουν σε περιβαλλον windows με εγκατεστημενο το το DirectX 9 ή 10;

Γνωριζει κανεις αν τα περισσοτερα παιχνιδια χρησιμοποιουν DirectX (για γραφικα) ή OpenGL;

Δημοσ.

Τα περισσότερα παιχνίδια γράφονται πλέον με το DX, ειδικά αν πρόκειται για windows.

Οι λόγοι σχετίζονται με την πληρότητά του ως framework (είπαμε ότι δεν αφορά μόνον

γραφικά αλλά και ήχο, χειριστήρια, δίκτυο) και την καλή συνεργασία όλων των τμημάτων

του με τα windows.

 

Ωστόσο, σε γενική χρήση (και για τους συνήθεις προγραμματιστές) το openGL υπερτερεί

για τους λειτουργικούς λόγους που ανάφερα πριν.

(Kαι βεβαίως, ούτε από άποψη δυνατοτήτων έχει κάποια σοβαρή έλλειψη.)

 

-

Δημοσ.

Ισα ισα που η openGL δεν αργει να βγαλει νεα features , αφου υπαρχει ο μηχανισμος των extensions....

Στο direct3D συμβαινει αυτο που λες, γιατι αργει η MS να βγαλει νεα εκδοση

 

Επισης καλο ειναι να μην συγκρινουμε το directX με την openGL.Πιο σωστη συγκριση ειναι το direct3D/openGL , γιατι το directX προσφερει και αλλες λειτουργιες που δεν συνδεονται αμεσα με τα γραφικα !

 

Αυτό που ανέφερα είναι ότι παίρνει λίγο παραπάνω χρόνο να γίνουν official (δλδ να γίνουν κομμάτι του ARB). Λάθος μου που δεν το τόνισα. Για παράδειγμα το d3d11 ήταν διαθέσιμο πολύ πιο πριν από το εφάμιλλο GL (δλδ το 4).

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...