bnvdarklord Δημοσ. 27 Φεβρουαρίου 2011 Δημοσ. 27 Φεβρουαρίου 2011 Ξέρετε κανένα καλό tutorial για την χρήση DirectX με C#; (ή και OpenGL δεν εχω πρόβλημα) Ευχαριστώ.
V.I.Smirnov Δημοσ. 27 Φεβρουαρίου 2011 Δημοσ. 27 Φεβρουαρίου 2011 Δες αυτό : http://www.amazon.com/Game-Programming-Serious-Creation/dp/1435455568/ref=sr_1_1?ie=UTF8&s=books&qid=1298794363&sr=1-1 Γενικά πιστεύω ότι ο καλύτερος συνδυασμός είναι C++ και opengl. Να οι λόγοι για μένα : 1) Το opengl είναι κατ' εμένα καλύτερη επένδυνση από το directX διότι διατηρεί σε μεγάλο βαθμό την συμβατότητα με παλαιότερες εκδόσεις του. Ότι έχω γράψει εκεί, τρέχει χωρίς πρόβλημα και στην έκδοση 3 (παρόλο που από την έκδοση 3 και εντεύθεν κάποιες παλαιές εντολές, π.χ. οι display lists, είναι deprecated και θα καταργηθούν μελλοντικά). Το directX δεν το έχει αυτό. Κάθε νέα έκδοση έχει σημαντικές ασυμβατότητες με τις προηγούμενες. Είχα γράψει προγράμματα σε directx 8 που δεν τρέχουν στο 9c και, ακόμη χειρότερα, ένα σωρό προγράμματα του 9c που δεν τρέχουν στο 10. Προφανώς το ίδιο θα γίνεται και με τα 10 και 11. Οι μετατροπές του κώδικα από την μια έκδοση στην άλλη είναι μπελάς και συνήθως δύσκολο να γίνουν αν πρόκεται για μεγάλο πρόγραμμα. Δεν ξαναπιάνω το DX γι' αυτούς τους λόγους. 2) Το opengl μπορεί να χρησιμοποιηθεί και μέσω της Qt με απλό τρόπο ενώ δεν έχω δει κάτι τέτοιο για το directX. Αυτός είναι και ένας λόγος για την χρήση της C++ και όχι της C#. Επιπλέον, για την C++ υπάρχει πολύ περισσότερο υλικό διαθέσιμο, που μπορείς να μελετήσεις ή να χρησιμοποιήσεις άμεσα. Για την C# υπάρχουν πολύ λιγότερα - θα πρέπει να κάνεις μετατροπή του κώδικα από την C++. Και κάτι λιγότερο σχετικό : αν θέλεις κυρίως οπτικοποίηση δεδομένων (data visualization) η ΑΠΟΛΥΤΗ και ΚΑΛΥΤΕΡΗ λύση είναι το vtk (Visualization Toolkit). To vtk που μελετώ αυτή την περίοδο είναι ένα εκπληκτικό framework που περιέχει έτοιμο ότι θα μπορoύσες θα χρειαστείς για οπτικοποίηση. Είναι open source, crossplatform, υποστηρίζεται πολύ καλά εδώ και 15 χρόνια και επίσης δουλεύει και με την Qt. Εφόσον δεν σκέπτεσαι παιχνίδια, το επαγγελματικό του αντίκρυσμα και η χρηστικότητά του είναι σημαντικά υψηλότερα από αμφότερα των opengl και dx... -
Evgenios1 Δημοσ. 27 Φεβρουαρίου 2011 Δημοσ. 27 Φεβρουαρίου 2011 Το directX δεν το έχει αυτό. Κάθε νέα έκδοση έχει σημαντικές ασυμβατότητες με τις προηγούμενες. Είχα γράψει προγράμματα σε directx 8 που δεν τρέχουν στο 9c και, ακόμη χειρότερα, ένα σωρό προγράμματα του 9c που δεν τρέχουν στο 10. Προφανώς το ίδιο θα γίνεται και με τα 10 και 11. Οι μετατροπές του κώδικα από την μια έκδοση στην άλλη είναι μπελάς και συνήθως δύσκολο να γίνουν αν πρόκεται για μεγάλο πρόγραμμα. Δεν ξαναπιάνω το DX γι' αυτούς τους λόγους. Τι λες μωρε!? Εχεις φτιαξει device8 και δεν ετρεχε σε directx9; Ετσι απο περιεργεια, ποσταρε το wm_create.
V.I.Smirnov Δημοσ. 27 Φεβρουαρίου 2011 Δημοσ. 27 Φεβρουαρίου 2011 Δεν είναι ότι δεν τρέχει το wm_create αλλά ότι η φιλοσοφία γραφής έχει υποστεί αλλαγές. Πολλές αλλαγές στη σύνταξη, καταργήσεις εντολών κλπ. Κάποια τρέχουν αλλά πολλά ΔΕΝ τρέχουν. Δεν μπορώ να βαλω κάτι εδώ διότι είναι μεγάλο και πρόκειται και για πολλά αρχεία αλλά αν μου δώσεις το mail σου μπορώ να σου στείλω ένα πλήθος από δοκιμαστικά προγράμματα DX 8 που δεν δουλεύουν σε DX9 ή DX9 που δεν δουλεύουν σε DX10. Στις περισσότερες περιπτώσεις δεν γίνεται καν compile - τουλάχιστον χωρίς πολλές αλλαγές. Σε κάποιες άλλες, με λίγες αλλαγές γίνεται compile σωστά αλλά το πρόγραμμα κρεμάει όταν τρέχει ακόμη και αφού αντικατασταθούν τα dllς και τα libς της αντίστοιχης έκδοσης. Το γεγονός είναι ότι ο κώδικας δεν τρέχει όπως είναι από την μιά έκδοση στην άλλη και συχνά πρέπει να μετατραπεί, άλλοτε περισσότερο και άλλοτε (το πιο συχνό) λιγότερο εύκολα. Εδώ η MS μας τα χάλασε. Κρίνω ότι τελικά δεν αξίζει τον κόπο το ψάξιμο. Το opengl δεν έχει τέτοια προβλήματα ή έχει πολύ λιγότερα. Οι εκδόσεις του από την 3 και εντεύθεν εμφανίζουν ασυμβατότητες αλλά τις εισάγουν με προοδευτικό τρόπο (πρώτα deprecated και μετά κατάργηση). -
Evgenios1 Δημοσ. 27 Φεβρουαρίου 2011 Δημοσ. 27 Φεβρουαρίου 2011 Αφου δεν εχεις ασχοληθει με το θεμα, γιατι το κατακρινεις; Δεν ειναι δυνατον να λες οτι η version 8 ειναι ασυμβατη με την version 9. Το λεω αυτο, επειδη αν εχεις ασχοληθει, θα ηξερες οτι το directx8 και το directx9 ειναι διαφορετικα frameworks. Τωρα για τους τονους κωδικα που εχεις γραψει πανω σε dx.... το codesniper του wm_create σου ζητησα, ή να στο πω αλλιως, το initialization του dx (Direct3DCreateXXXX(version, device))
Directx Δημοσ. 27 Φεβρουαρίου 2011 Δημοσ. 27 Φεβρουαρίου 2011 Από προσωπική εμπειρία με το DirectX/DirectDraw 6 και ύστερα το port του κώδικα σε DirectX 9c παρατήρησα ορισμένα προβλήματα (σκουπίδια στην εικόνα) τα οποία προερχόντουσαν τελικά από ένα λάθος στην αντιγραφή από το off-screen bitmap buffer που χρησιμοποιούσα καθώς αντέγραφα μερικά pixels περισσότερα από τις διαστάσεις (RECT) που έπρεπε ξεφεύγοντας εκτός δεσμευμένης μνήμης (boundary error δηλαδή). Μόλις διόρθωσα αυτό το σφαλματάκι ο κώδικας (το DD Blt) δούλεψε στο νέο DirectX άψογα, φυσικά για το σφάλμα αυτό δεν έφταιγε το DirectX 9c αλλά το DirectX 6 το οποίο για κάποιον λόγο ήταν πιο ανεκτικό στο σφάλμα μνήμης που υπήρχε. Από εκεί και πέρα, κάθε νέα έκδοση DirectX υποστηρίζει διάφορες παλαιότερες εκδόσεις των ίδιων Interfaces σε μια προσπάθεια συμβατότητας με παλαιότερο λογισμικό. Με Direct3D και OpenGL δεν έχω ασχοληθεί οπότε δεν μπορώ να προτείνω κανένα - ακούω όμως ότι το OpenGL είναι πολύ ευκολότερο στην εκμάθηση του από ότι το D3D.
V.I.Smirnov Δημοσ. 27 Φεβρουαρίου 2011 Δημοσ. 27 Φεβρουαρίου 2011 @Evgenios1 Δεν κατάλαβες καλά. Όχι απλώς έχω ασχοληθεί - έχω παραασχοληθεί και με τα δύο. Αυτό που γράφω είναι ότι ο κώδικας δεν γίνεται compiled αυτούσιος από την μια έκδοση στην άλλη. Συχνά δεν τρέχουν ούτε τα έτοιμα exe - π.χ. της 9 στην 10 ακόμα κι' αν θέσεις τα dll και τα lib από την αντίστοιχη έκδοση που φαινομενικά χρειάζονται. Σε κάποιες περιπτώσεις το πρόβλημα διορθώνεται εύκολα, σε άλλες δύσκολα - το πιο συχνό όταν πρόκειται για κάτι μεγαλύτερης έκτασης. Έγραψα ότι για μένα δεν αξίζει το ψάξιμο να λύσεις την ασυμβατότητα, απλή ή όχι. Για την αρχικοποίηση που ζητάς, δεν υπεκφεύγω. Αλλά μια χρηστική αρχικοποίηση δεν είναι τόσο απλή. Συνήθως σ' αυτήν περιλαμβάνεται ο ορισμός-σετάρισμα βοηθητικών παραμέτρων και ρουτινών όπως : έλεγχος του ποντικιού για κίνηση της κάμερας στον χώρο, μετρητής για τα FPS, ορισμός γενικών κλάσεων για τα παραπάνω ώστε να είναι επαναχρησιμοποιήσιμα κλπ. Τα έχω σε τέτοια μορφή και επειδή δεν είναι είναι ένα απλό αρχείο δεν μπορώ να τα θέσω εδώ. Το να αρχικοποιήσεις ξερά ένα παράθυρο χωρίς τέτοια παρελκόμενα είναι μάλλον εύκολο και πολύ εύκολα μπορεί να μεταφερθεί σε όλες τις εκδόσεις (από την 8 μέχρι και την 10 που έχω δει). Αυτό μπορώ να το δώσω αλλά δεν έχει νόημα - δεν είναι εκεί το πρόβλημα. (Aν και υπάρχουν αλλαγές και σ' αυτό, π.χ. η έκδοση 10 τρέχει αν όλες οι λειτουργίες υποστηρίζονται ενώ στην 9 πρέπει να βρεθεί ποιές εξ αυτών είναι διαθέσιμες.) Το ουσιαστικό πρόβλημα για μένα είναι σε πλήθος εντολών που διαφοροποιούνται στην σύνταξη μεταξύ των εκδόσεων. Δεν είναι χρηστικό να γράφω κάτι και μια ή δυο εκδόσεις μετά να μην μπορεί να γίνει compiled χωρίς πολλές μετατροπές. Στο Opengl τρέχουν με καθόλου ή με ελάχιστες αλλαγές προγράμματα γραμμένα από την πρώτη έκδοση χωρίς να αλλάξω τίποτε. Εν πάση περιπτώση εγώ είμαι ερασιτέχνης. Θέλω όταν μαθαίνω/φτιάχνω κάτι, όσο το δυνατόν να έχει διάρκεια και εδώ είδα ότι το opengl υπερτερεί. Ένας επαγγελματίας που παρακολουθεί διαρκώς κάθε νέα έκδοση του DX και έχει στα δάκτυλά του όλες τις διαφορές μεταξύ τους μπορεί να του είναι εύκολο να συντηρεί διαρκώς τα προγράμματά του - εγώ δεν ανήκω σε αυτή την κατηγορία. @DirectX Δεν έχω δει να υπάρχει αυτούσια συμβατότητα σε επίπεδο source κώδικα - τουλάχιστον όπως στο opengl. Aπαιτούνται αρκετές αλλαγές αν το πρόγραμμα είναι σύνθετο και για κάποιον που δεν θέλει να ψάχνει κάθε φορά, το opengl υπερτερεί. Όποιος θέλει, ας μου στείλει το mail του και θα του στείλω προγράμματα που έχω φτιάξει τα οποία δεν τρέχουν μεταξύ διαφόρων εκδόσεων. Πιθανόν το πρόβλημα διορθώνεται αλλά όχι χωρίς επεμβάσεις ή/και ψάξιμο. Αν είμαι λάθος, απλώς θα μάθω τι δεν έκανα σωστά. Το openGL δεν έχει τέτοιο πρόβλημα : ότι είναι γραμμένο εκεί (μέχρι και την έκδοση 2) τρέχει χωρίς καμιά σχεδόν αλλαγή στον κώδικα. Το Opengl είναι αρκετά πιο εύκολο να ξεκινήσεις να το μάθεις αλλά αφορά μόνον γραφικά. Το DX αφορά πολλά άλλα πράγματα όπως IO από χειριστήρια, ήχο, networking κλπ. Επιπλέον, έχει την βιβλιοθήκη dxlib που παρέχει έτοιμη λειτουργικότητα όπως βασικό χειρισμό πινάκων κλπ. Στο OpenGL αυτά πρέπει να φτιαχτούν. Όμως το OpenGL έχει πιο ευδιάκριτη φιλοσοφία για κάποιον που ξεκινά. Συχνά χρησιμοποιείται το opengl για γραφικά και το DX για τα υπόλοιπα (το έχω δει σε βιβλία). -
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.