Vlaaad Δημοσ. 5 Μαΐου 2011 Δημοσ. 5 Μαΐου 2011 Τα ερωτηματα μου ειναι 2.Πρεπει να φτιαξω ενα model viewer στην OpenGL οπου θα παιρνει σαν input ενα file με διαφορα τριγωνα που θα φτιαχνουν ενα σχημα.Μεχρι εδω καλα.Μετα πρεπει καθε πλευρα του σχηματος αυτου να εχει random χρωματα(Προβλημα 1).Επεισης θα πρεπει να μπορω με τν καμερα να πηγαινω αριστερα δεξια πανω κατω ΑΛΛΑ η καμερα να βλεπει παντα το αντικειμενο(Προβλημα 2). Εχω δυσκολευτει πολυ και θα παρακαλουσα οποιον μπορει να με βοηθησει Ευχαριστω
EyeofOne Δημοσ. 5 Μαΐου 2011 Δημοσ. 5 Μαΐου 2011 Εδώ θα βρείς πολύ καλά opengl tutorials που με απλά παραδείγματα σου παρουσιάζουν τις βασικές τεχνικές. Αυτά που ζητάς θα τα βρείς αν ακολουθήσεις τα tutorials. Αν δυσκολευτείς σε κάποιο σημείο πες μου μήπως και μπορέσω να βοηθήσω...
Vlaaad Δημοσ. 5 Μαΐου 2011 Μέλος Δημοσ. 5 Μαΐου 2011 Σε ευχαριστω πολυ φιλε μου.Το εχω τσεκαρει το σιτε και ξερω πανω κατω για τν καμερα θα δουλεψω με το: *translate για να κινηθω αριστερα δεξια κτλ *scale για zoom *τελος για την φαση με το αντικειμενο που πρεπει να το βλεπει η καμερα θελει glulookat αλλα το τελευταιο μου χαλαει ολο το σκηνικο γιατι δεν καταλαβαινω πως και γιατι δουλευει. για το χρωμα σκεφτομαι να κανω μια μεθοδο που θα βαλει διαφορες τιμες των RGB και μετα θα βαζω τς random τιμες στο: >gl.glColor3f(red[],green[],blue[]); καπως ετσι.Θα εχω ετσι 3 random τιμες για καθε ενα απο τα vertex που θα εχω σαν input. Το μεγαλο μου προβλημα παραμενει με τς καμερες
V.I.Smirnov Δημοσ. 5 Μαΐου 2011 Δημοσ. 5 Μαΐου 2011 Έχω φτιάξει ακριβώς αυτό. Εγώ ήθελα να χρωματίζονται τα τρίγωνα ανάλογα με την τιμή του μεγέθους επ' αυτών. Κι εγώ είχα παιδευτεί κάπως με την κάμερα παρόλο που ήξερα πολύ καλά τις ιδιότητες των μετασχηματισμών. Αυτό που ήθελα ήταν να κεντράρω αυτόματα το μοντέλο ώστε να φαίνεται πάντα σωστά και με τις ίδιες περίπου διαστάσεις στην οθόνη ανεξάρτητα από το μέγεθός του. Τελικά βρήκα έναν τρόπο να το κάνω (με την gluLookAt). Το OpenGL programmer's guide (το "κόκκινο βιβλίο") περιγράφει λεπτομερώς την χρήση της gluLookAt και δείχνει σε αδρές γραμμές πώς μπορεί να γίνει με την βοήθειά της το κεντράρισμα. Δυστυχώς δεν μπορώ να την περιγράψω εδώ (και δεν έχει και νόημα αφού εξηγείται εκεί). ( Ας σημειωθεί ότι η gluLookAt είναι πλέον πεπαλαιωμένη (deprecated) οπότε μιλάμε για την έκδοση 2.0 ) Πέραν του ΟpenGL, για προβλήματα οπτικοποίησης κάθε είδους δεδομένων, η απόλυτη λύση εδώ και πολύ καιρό είναι το VTK (visualization toolkit) : http://www.vtk.org/VTK/project/about.html Aπό το τότε που το έπιασα, όλα αυτά τα προβλήματα αποτελούν παρελθόν. Π.χ. αυτό που θέλεις να κάνεις, στο VTK γίνεται πολύ εύκολα σε μισή σελίδα... Μου κάνει εντύπωση ότι προγραμματιστές που έχουν ασχοληθεί με γραφικά και οπτικοποίηση δεδομένων δεν το γνωρίζουν... -
Vlaaad Δημοσ. 5 Μαΐου 2011 Μέλος Δημοσ. 5 Μαΐου 2011 Έχω φτιάξει ακριβώς αυτό. Εγώ ήθελα να χρωματίζονται τα τρίγωνα ανάλογα με την τιμή του μεγέθους επ' αυτών. Κι εγώ είχα παιδευτεί κάπως με την κάμερα παρόλο που ήξερα πολύ καλά τις ιδιότητες των μετασχηματισμών. Αυτό που ήθελα ήταν να κεντράρω αυτόματα το μοντέλο ώστε να φαίνεται πάντα σωστά και με τις ίδιες περίπου διαστάσεις στην οθόνη ανεξάρτητα από το μέγεθός του. Τελικά βρήκα έναν τρόπο να το κάνω (με την gluLookAt). Ωραια.Αμα θελω να πηγαινω πανω κατω αριστερα δεξια και απλα να βλεπω το αντικειμενο καθε στιγμη τι κανω?Χρειαζομαι μονο το Translate?Πως μπορω να εξασφαλισω οτι θα κινουμε και θα μπορω να βλεπω το αντικειμενο χωρις να ειναι κεντραρισμενο? Mε εχετε βοηθησει ηδη αρκετα Ευχαριστω
godlike Δημοσ. 5 Μαΐου 2011 Δημοσ. 5 Μαΐου 2011 Ένας απλός τρόπος για να κάνεις αυτό που θες (αν το κατάλαβα σωστά) είναι ο εξής: - Αντί να κάνεις rotate την camera (θέλει λίγα μαθηματικά αυτό) μπορείς να κάνεις rotate το model (γύρω από το κέντρο του). - Για το zoom μπορείς απλά να μετακινείς την camera πιο πίσω (έστω zz όπου zz > 0.0) Άρα ο τελικός modelview transformation matrix είναι: Mv * Mr όπου Mr η rotation που model και Mv ο view matrix (τον οποίο θα στον δώσει η glyLookAt) Με κώδικα: glMatrixMode(GL_MODELVIEW); glLoadIdenity(); // Mmodelview = I gluLookAt(0.0, 0.0, zz, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0) // Mmodelview = I * Mv = Mv glRotate3f(...); // Mmodelview = Mv * Mr render(); Δεν το τέσταρα και δεν είμαι σίγουρος ότι θα δουλέψει αλλά είναι μια ιδέα
V.I.Smirnov Δημοσ. 5 Μαΐου 2011 Δημοσ. 5 Μαΐου 2011 Υποθέτω ότι θέλεις κάτι όπως αυτό στην επισύναψη. Τρέξε το, φόρτωσε ένα από τα δυο πλέγματα που έβαλα μέσα να δεις τι κάνει και πες μας αν αυτό που θέλεις να φτιάξεις είναι παρόμοιο... (με πατημένο το δεξί κουμπί του mouse το μετακινείς, με πατημένο το αριστερό το στρέφεις, και γυρνώντας την ροδέλα κάνεις zoom. Αν πατάς ταυτόχρονα και το shift ή το control κάνει τα παραπάνω με "μικρομετρικό" τρόπο -περίπου 10 και 100 φορές αντίστοιχα. Έτσι μπορείς να πας πολύ κοντά σε ένα σημείο που ενδιαφέρει χωρίς να το χάνεις. Με τα arrow keys βλέπεις σε ποιό τρίγωνο ή κόμβο τριγώνου βρίσκεσαι και με το ΤΑΒ κάνει full screen.) Σημειωτέον ότι σε αυτό που παραθέτω εδώ δεν χρησιμοποιώ ΠΟΥΘΕΝΑ την gluLookAt. Όπως μπορείς να δεις δουλεύει πολύ καλά και δίχως αυτήν. - TriMeshViewer.zip
kagelos Δημοσ. 5 Μαΐου 2011 Δημοσ. 5 Μαΐου 2011 Αν και έχω λίγο καιρό να γράψω OpenGL και δεν τα θυμάμαι τόσο καλά, να σου πω και γω 1-2 πράγματα. Για να πηγαίνεις πάνω κάτω αλλά πάντα να κοιτάζεις το αντικείμενο, θα πρέπει στην gluLookAt να αλλάζεις μόνο τις 3 πρώτες παραμέτρους και να αφήνεις τις υπόλοιπες ίδιες. Αυτό σημαίνει ότι κινείσαι εσύ, αλλά δεν αλλάζεις το που κοιτάς. Να έχεις πάντα στο νου σου πως η "κάμερα" έχει διεύθυνση. Ουσιαστικά μόνο το χ και το y πρέπει να αλλάζεις (πάνω κάτω, αριστερά δεξιά). Για να κάνεις rotate και πάλι να βλέπεις το αντικείμενο, θα πρέπει να κάνεις rotate το vector της θέσης σου, γύρω από το σημείο όπου κοιτάζεις, και πάλι να το περάσεις στην gluLookAt. Αυτό διαφορετικά γίνεται κάνοντας πρώτα translate στο 0,0,0. Για να ζουμάρεις, εφόσον μιλάμε για perspective κάμερα, δεν θες scale αλλά να αλλάξεις πάλι την θέση σου και να κινηθείς πιο κοντά στο αντικείμενο.
gtroza Δημοσ. 6 Μαΐου 2011 Δημοσ. 6 Μαΐου 2011 @godlike Ένας απλός τρόπος για να κάνεις αυτό που θες (αν το κατάλαβα σωστά) είναι ο εξής: και ο πιό "έξυπνος" ! κατά τη γνώμη μου .
kagelos Δημοσ. 6 Μαΐου 2011 Δημοσ. 6 Μαΐου 2011 @godlike και ο πιό "έξυπνος" ! κατά τη γνώμη μου . Αν θέλει όμως μετά να φορτώσει 2+ αντικείμενα, δεν παίζει αυτό.
Vlaaad Δημοσ. 7 Μαΐου 2011 Μέλος Δημοσ. 7 Μαΐου 2011 Υποθέτω ότι θέλεις κάτι όπως αυτό στην επισύναψη. Τρέξε το, φόρτωσε ένα από τα δυο πλέγματα που έβαλα μέσα να δεις τι κάνει και πες μας αν αυτό που θέλεις να φτιάξεις είναι παρόμοιο... (με πατημένο το δεξί κουμπί του mouse το μετακινείς, με πατημένο το αριστερό το στρέφεις, και γυρνώντας την ροδέλα κάνεις zoom. Αν πατάς ταυτόχρονα και το shift ή το control κάνει τα παραπάνω με "μικρομετρικό" τρόπο -περίπου 10 και 100 φορές αντίστοιχα. Έτσι μπορείς να πας πολύ κοντά σε ένα σημείο που ενδιαφέρει χωρίς να το χάνεις. Με τα arrow keys βλέπεις σε ποιό τρίγωνο ή κόμβο τριγώνου βρίσκεσαι και με το ΤΑΒ κάνει full screen.) Σημειωτέον ότι σε αυτό που παραθέτω εδώ δεν χρησιμοποιώ ΠΟΥΘΕΝΑ την gluLookAt. Όπως μπορείς να δεις δουλεύει πολύ καλά και δίχως αυτήν. - Φιλε μου υπαρχει κατι για linux γτ σπιτι δεν παιζουν windows:p
gtroza Δημοσ. 8 Μαΐου 2011 Δημοσ. 8 Μαΐου 2011 Αν θέλει όμως μετά να φορτώσει 2+ αντικείμενα, δεν παίζει αυτό. θα κάνει τα 2+ αντικείμενα 1 και θα τα περιστρέφει μαζί όλη τη σκηνή δηλαδή .
Vlaaad Δημοσ. 11 Μαΐου 2011 Μέλος Δημοσ. 11 Μαΐου 2011 παιδια το σκηνικο με τς καμερες το κανα οπως μου πατε.Γυρναγα το αντικειμενο γυρω γυρω και οχι την καμερα.Ευχαριστω παρα πολυ. Τωρα προσπαθω να κανω το background με συνεφακια με texture.Εχετε καμια ιδεα πως μπορει να γινει αυτο? Ευχαριστω και παλι
godlike Δημοσ. 11 Μαΐου 2011 Δημοσ. 11 Μαΐου 2011 παιδια το σκηνικο με τς καμερες το κανα οπως μου πατε.Γυρναγα το αντικειμενο γυρω γυρω και οχι την καμερα.Ευχαριστω παρα πολυ. Τωρα προσπαθω να κανω το background με συνεφακια με texture.Εχετε καμια ιδεα πως μπορει να γινει αυτο? Ευχαριστω και παλι Αυτά που μπορείς να κάνεις είναι: να ζωγραφίσεις ενα quad με το texture που θες στατικά (δυστυχώς όσο και να περιστρέφεται η camera δεν θα αλλάζει ο ορίζοντας) ή να κάνεις animate το texture πειράζοντας της texture coordinates του quad (θα φαίνεται πάλι άλλα αντι άλλων) ή φτιάχνεις έναν κανονικό skybox (όπως έχουν τα games). Αναγκαστικά θες όμως κανονική camera. Για το πρώτο που είναι πιο απλό θέτεις τους modelview και projection matrices στους identities και μετά ζωγραφίζεις το quad (και μετά το μοντέλο σου). Δλδ: >// Set the matrices glMatrixMode(GL_PROJECTION); glLoadIdenity(); glMatrixMode(GL_MODELVIEW); glLoadIdenity(); // Render quad float textureCoords[][2] = {{1.0,1.0}, {0.0,1.0}, {0.0,0.0}, {1.0,0.0}}; float quadCoords[][2] = {{1.0,1.0}, {-1.0,1.0}, {-1.0,-1.0}, {1.0,-1.0}}; glDisable(GL_DEPTH_TEST); glBindTexture(texId); // Draw the quad glBegin(GL_QUADS); // απλό, δεν το γράφω glEnd();
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.