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

γραφικά C++ με glut


sp_steve

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

  • Απαντ. 39
  • Δημ.
  • Τελ. απάντηση
Δημοσ.

Βαλε τις βιβλιοθξκες στο linker (google για το πως μπαινουν στο dev-c++)

Αλλά πρώτα βεβαιώσου πως δεν έχεις αναμίξει βιβλιοθήκες και header files από διαφορετικές εκδόσεις του GLUT (ή όποιου clone χρησιμοποιείς).

 

Π.χ. έχοντας εγκαταστήσει το Freeglut (που αναφέρω παραπάνω) κι έχοντας βάλει τα αρχεία του στους φακέλους που λέει στο readme του, και έχοντας τους συμπεριλάβει στα κατάλληλα environment variables (αναφέρονται επίσης στο readme του) η γραμμή εντολών για compilation με mingw είναι η παρακάτω:

 

>
gcc -Wall -std=c99 my1stglut.c -o my1stglut.exe -lfreeglut -lopengl32 -Wl,--subsystem,windows

Δημοσ.

ρε παιδιά την απάντηση την έδωσα απο χτές το βράδυ.. απλά προσπαθεί να το κάνει compile σαν .cpp ενώ ο κώδικας είναι C... αν φτιάξει το project σαν C project μια χαρά τρέχει ο κώδικας... τουλάχιστον σε μένα :P

 

Kακό αυτο... :devil:

γιατί..?? το πέρασα.. :-D

Δημοσ.

αν πάς στο DevCpp φάκελο στο include/GL τι αρχεία έχει μέσα? εμένα έχει gl.h glu.h glut.h glext.h glutf90.h

 

στο update του devcpp έχει άλλο ενα glut (νομίζω λέγεται freeglut η κάτι παρόμοιο)... μόνο όταν πέρασα αυτό και μετά το έσβησα και μετά ξαναπέρασα το απλό glut μου είχε φτιάξει. δεν έχω ιδέα γιατι έγινε αυτό...

 

Τελικά το πρόβλημα λύθηκε... το έβγαλα και το ξαναέβαλα... ευχαριστώ πολύ...

 

Να σε ρωτήσω και κάτι άλλο που ίσως θα μπορείς να με βοηθήσεις.... Επειδή είμαι σχετικά αρχάριος με τα γραφικά και δεν έχω ξαναχρησιμοποιήσει το glut, μήπως ξέρεις να μου πείς με ποιόν τρόπο θα συνδέσω τα αντίκειμενα του κώδικά μου ( αυτά που θέλω να κινούνται) με τα γραφικά?

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

Δημοσ.

Τι πραμα; Σε αυτο που εχεις ποσταρει εχεις ενα τριγωνο το οποιο σπιναρει στον αξονα χ. Εσυ τι θελεις να κανεις;

Δημοσ.

για να κατανοήσεις το glut, πρέπει να ρίξεις αρκετό διάβασμα...

 

παραδείγματα κώδικα μπορείς να βρείς εδω: http://www.opengl.org/resources/code/samples/glut_examples/examples/examples.html

και νομίζω το manual που χρησιμοποίησα εγώ είναι εδώ: http://fly.cc.fer.hr/~unreal/theredbook/

 

το παιχνίδι θα είναι 2d η 3d? αν δείς το pacman που είναι 2d που σου πόσταρα παραπάνω (η εδώ) βλέπεις κάποια σχήματα. αυτό που έχω κάνει είναι να φτιάξω ένα πίνακα απο 200χ200 στοιχεία (τυχαίο νούμερο) και το κάθε στοιχείο αντιστοιχεί σε ένα τετράγωνο. οπότε αυτό που κάνω είναι να δημιουργήσω ένα πίνακα 16χ16 στοιχείων το οποίο θα γεμίζει ουσιαστικά το κάθε τετράγωνο, κάπως έτσι:

 

"................",

"......xxxxx.....",

"....xxxxxxxxx...",

"...xxxxxxxxxxx..",

"...xxxxxxxxxxx..",

"..xxxxxxxxxx....",

"..xxxxxxx.......",

"..xxxx..........",

"..xxxxxxx.......",

"..xxxxxxxxxx....",

"...xxxxxxxxxxx..",

"...xxxxxxxxxxx..",

"....xxxxxxxxx...",

"......xxxxx.....",

"................",

"................",

(χμ... αν το κάνεις copy σε notepad θα καταλάβεις τι εννοώ)

 

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

 

τώρα αν θέλεις για 3d, καλό θα είναι να χρησιμοποιήσεις τις έτοιμες συναρτήσεις που έχει η glut. μέσω των παραδειγμάτων που σου έγραψα παραπάνω νομίζω θα τα κατανοήσεις πολύ πιο έυκολα...

Δημοσ.

για να κατανοήσεις το glut, πρέπει να ρίξεις αρκετό διάβασμα...

 

παραδείγματα κώδικα μπορείς να βρείς εδω: http://www.opengl.or...s/examples.html

και νομίζω το manual που χρησιμοποίησα εγώ είναι εδώ: http://fly.cc.fer.hr...eal/theredbook/

 

το παιχνίδι θα είναι 2d η 3d? αν δείς το pacman που είναι 2d που σου πόσταρα παραπάνω (η εδώ) βλέπεις κάποια σχήματα. αυτό που έχω κάνει είναι να φτιάξω ένα πίνακα απο 200χ200 στοιχεία (τυχαίο νούμερο) και το κάθε στοιχείο αντιστοιχεί σε ένα τετράγωνο. οπότε αυτό που κάνω είναι να δημιουργήσω ένα πίνακα 16χ16 στοιχείων το οποίο θα γεμίζει ουσιαστικά το κάθε τετράγωνο, κάπως έτσι:

 

 

καλα ρε θηριο, πηγες και εκανες handcoded τα γραφικα; shock.png

 

 

(texture και παλι texture)

Δημοσ.

texture είναι ... αν εννοείς να κάνει load κάποια ετοιμη εικόνα, θέλει άλλο library γιατι η glut δεν υποστηρίζει κάτι τέτοιο. (νομίζω δηλαδή). και δεν ήθελα να τα μπλέξω περισσότερο τα πράγματα .. :P

Δημοσ.

Τι πραμα; Σε αυτο που εχεις ποσταρει εχεις ενα τριγωνο το οποιο σπιναρει στον αξονα χ. Εσυ τι θελεις να κανεις;

 

 

Έχω άλλο κώδικα, αυτό τον βρήκα για να καταλάβω περίπου πώς λειτουργεί το glut.

 

για να κατανοήσεις το glut, πρέπει να ρίξεις αρκετό διάβασμα...

 

παραδείγματα κώδικα μπορείς να βρείς εδω: http://www.opengl.org/resources/code/samples/glut_examples/examples/examples.html

και νομίζω το manual που χρησιμοποίησα εγώ είναι εδώ: http://fly.cc.fer.hr/~unreal/theredbook/

 

το παιχνίδι θα είναι 2d η 3d? αν δείς το pacman που είναι 2d που σου πόσταρα παραπάνω (η εδώ) βλέπεις κάποια σχήματα. αυτό που έχω κάνει είναι να φτιάξω ένα πίνακα απο 200χ200 στοιχεία (τυχαίο νούμερο) και το κάθε στοιχείο αντιστοιχεί σε ένα τετράγωνο. οπότε αυτό που κάνω είναι να δημιουργήσω ένα πίνακα 16χ16 στοιχείων το οποίο θα γεμίζει ουσιαστικά το κάθε τετράγωνο, κάπως έτσι:

 

"................",

"......xxxxx.....",

"....xxxxxxxxx...",

"...xxxxxxxxxxx..",

"...xxxxxxxxxxx..",

"..xxxxxxxxxx....",

"..xxxxxxx.......",

"..xxxx..........",

"..xxxxxxx.......",

"..xxxxxxxxxx....",

"...xxxxxxxxxxx..",

"...xxxxxxxxxxx..",

"....xxxxxxxxx...",

"......xxxxx.....",

"................",

"................",

(χμ... αν το κάνεις copy σε notepad θα καταλάβεις τι εννοώ)

 

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

 

τώρα αν θέλεις για 3d, καλό θα είναι να χρησιμοποιήσεις τις έτοιμες συναρτήσεις που έχει η glut. μέσω των παραδειγμάτων που σου έγραψα παραπάνω νομίζω θα τα κατανοήσεις πολύ πιο έυκολα...

 

Το παιχνίδι είναι 2D. Να σου εξηγήσω λίγο πως είναι η υπόθεση του παιχνιδιού...

Έχουμε 2 ομάδες οι οποίες περιέχουν τοξότες και ξιφομάχους και ένα κάστρο. Στην αρχή του παιχνιδιού μπορώ να δίνω τις διαστάσεις του 2D κόσμου και το πλήθος των στρατιωτών. Οι στρατιώτες στην αρχή ξεκινάνε όλοι μαζί και μετά ανάλογα με τις ενέργειες που γίνονται από μία συνάρτηση random() μπορούν να κινηθούν προς κάθε κατέυθυνση ( δηλ να σκοτώνουν και να σκοτώνονται απο αντίπαλο). Εγώ αυτό που πρέπει να κάνω είναι να βάλω σε κάθε είδος στρατιώτη ένα σχήμα και σε κάθε ομάδα ενα χρώμα...

 

Σόρρυ που ρωτάω τόσα πολλά αλλά δεν έχω ξανασχοληθεί με glut (και πρέπει να το υλοποιήσω μόνο με αυτό).

Δημοσ.

Πολυ απλο ειναι μολις παω σπιτι θα σου απαντησω

 

android.png

 

λοιπόν, δεν ξέρω απο που να αρχίσω και που να τελειώσω...

 

γιατι προφανώς δεν έχεις ασχοληθεί καθόλου με glut και γνώμη μου είναι οτι πρέπει πρώτα να διαβάσεις όλο το manual (και να τρέξεις τα παραδείγματα που έχει μέσα) για να καταλάβεις τι κάνει η κάθε εντολή. και εγώ μην νομίζεις οτι θυμάμαι, πολλά πράγματα κατάλαβα πώς δουλεύουν και τα έκανα copy. αρχικά πρέπει μέσα στο main να δηλώσουμε τις συναρτήσεις τις glut.

 

θα σου κάνω copy κομάτια απο τον κώδικα του pacman που πήγα να φτιάξω, και θα τα εξηγώ.

 

int main(int argc, char** argv)

{

glutInit(&argc, argv);

glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB);

glutInitWindowSize (500, 500);

glutInitWindowPosition (100, 100);

glutCreateWindow ("Welcome to Pacman");

init ();

glutDisplayFunc(display);

glutIdleFunc(idleFunc);

glutReshapeFunc(reshape);

glutKeyboardFunc(keyboard);

glutMainLoop();

return 0;

}

 

λοιπόν, τα παραπάνω ξεκινάνε κάποια πράγματα στο glut. ουσιαστικά πρώτα δημιουργεί το περιβάλλον, το οποίο το έχει ώς double buffer, ώστε να "ετοιμάζει" όλη την εικόνα και να μας την δείχνει έτοιμη, το παράθυρο το κάνει 500χ500 pixel, και το βάζει στην θέση 100,100 της οθόνης. δημιουργεί το παράθυρο με τίτλο "Welcome to Pacman". μετά τρέχει μια συνάρτηση init που ουσιαστικά έχω βάλει τις παρακάτω εντολές:

 

glClearColor (0.0, 0.0, 0.0, 0.0);

glShadeModel (GL_FLAT);

 

για να σβήσει τον πίνακα του χρώματος και να δώσει την τιμή FLAT για το χρώμα, δηλαδή οτι το κάθε σχήμα θα έχει μόνο ένα χρώμα. μπορούμε να το κάνουμε να έχει χρώμα gradient αν αλλάξουμε την εντολή σε GL_SMOOTH και θα γίνει κάπως έτσι:

IC17094.gif

 

 

στην συνέχεια λέμε στην glut οτι οι συναρτήσεις που θα τρέχει όταν θέλει να δείξει μια εικόνα στην οθόνη, είναι η display.

όταν δεν κάνει καμία εντολή, η idleFunc.

όταν αλλάζει το μέγεθος του παραθύρου η όταν δημιουργείται το παράθυρο, η reshape.

και όταν πατάμε κάποιο πλήκτρο απο το πληκτρολόγιο η keyboard.

υπάρχουν και άλλες συναρτήσεις της glut, τις οποίες μπορούμε να αλλάξουμε η να δώσουμε τις δικιές μας εντολές. π.χ η glutMouseFunc που ενεργοποιείται όταν πατάμε κάποιο κουμπί του mouse.

 

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

Δημοσ.

Και εγώ παλιά GLUT χρησιμοποιούσα αλλά σε περιορίζει σε κάποια πράματα (πχ πλήρη έλεγχο του main loop) και για αυτό πήγα σε GLFW (http://www.glfw.org) το βρήκα πιο άνετο και σας το προτείνω να το δοκιμάσετε.

Δημοσ.

Και εγώ παλιά GLUT χρησιμοποιούσα αλλά σε περιορίζει σε κάποια πράματα (πχ πλήρη έλεγχο του main loop) και για αυτό πήγα σε GLFW (http://www.glfw.org) το βρήκα πιο άνετο και σας το προτείνω να το δοκιμάσετε.

Αυτό το πρόβλημα έχει αντιμετωπιστεί εδώ και πολύ καιρό με extensions τόσο στο FreeGlut όσο και στο OpenGlut.

 

ΥΓ. Ωραίο το link!

Δημοσ.

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

 

Σόρρυ που ρωτάω τόσα πολλά αλλά δεν έχω ξανασχοληθεί με glut (και πρέπει να το υλοποιήσω μόνο με αυτό).

Δημοσ.

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

Εμείς δηλαδή δεν έχουμε ψυχή, γιατί να μη μάθουμε και μεις 5 παραπάνω πράγματα; :lol:

 

ΥΓ. Σοβαρά, δεν το ήξερα το GLFW και φαίνεται πολύ ωραίο!

Δημοσ.

Πολυ απλο ειναι μολις παω σπιτι θα σου απαντησω

 

android.png

 

λοιπόν, δεν ξέρω απο που να αρχίσω και που να τελειώσω...

 

γιατι προφανώς δεν έχεις ασχοληθεί καθόλου με glut και γνώμη μου είναι οτι πρέπει πρώτα να διαβάσεις όλο το manual (και να τρέξεις τα παραδείγματα που έχει μέσα) για να καταλάβεις τι κάνει η κάθε εντολή. και εγώ μην νομίζεις οτι θυμάμαι, πολλά πράγματα κατάλαβα πώς δουλεύουν και τα έκανα copy. αρχικά πρέπει μέσα στο main να δηλώσουμε τις συναρτήσεις τις glut.

 

θα σου κάνω copy κομάτια απο τον κώδικα του pacman που πήγα να φτιάξω, και θα τα εξηγώ.

 

int main(int argc, char** argv)

{

glutInit(&argc, argv);

glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB);

glutInitWindowSize (500, 500);

glutInitWindowPosition (100, 100);

glutCreateWindow ("Welcome to Pacman");

init ();

glutDisplayFunc(display);

glutIdleFunc(idleFunc);

glutReshapeFunc(reshape);

glutKeyboardFunc(keyboard);

glutMainLoop();

return 0;

}

 

λοιπόν, τα παραπάνω ξεκινάνε κάποια πράγματα στο glut. ουσιαστικά πρώτα δημιουργεί το περιβάλλον, το οποίο το έχει ώς double buffer, ώστε να "ετοιμάζει" όλη την εικόνα και να μας την δείχνει έτοιμη, το παράθυρο το κάνει 500χ500 pixel, και το βάζει στην θέση 100,100 της οθόνης. δημιουργεί το παράθυρο με τίτλο "Welcome to Pacman". μετά τρέχει μια συνάρτηση init που ουσιαστικά έχω βάλει τις παρακάτω εντολές:

 

glClearColor (0.0, 0.0, 0.0, 0.0);

glShadeModel (GL_FLAT);

 

για να σβήσει τον πίνακα του χρώματος και να δώσει την τιμή FLAT για το χρώμα, δηλαδή οτι το κάθε σχήμα θα έχει μόνο ένα χρώμα. μπορούμε να το κάνουμε να έχει χρώμα gradient αν αλλάξουμε την εντολή σε GL_SMOOTH και θα γίνει κάπως έτσι:

IC17094.gif

 

 

στην συνέχεια λέμε στην glut οτι οι συναρτήσεις που θα τρέχει όταν θέλει να δείξει μια εικόνα στην οθόνη, είναι η display.

όταν δεν κάνει καμία εντολή, η idleFunc.

όταν αλλάζει το μέγεθος του παραθύρου η όταν δημιουργείται το παράθυρο, η reshape.

και όταν πατάμε κάποιο πλήκτρο απο το πληκτρολόγιο η keyboard.

υπάρχουν και άλλες συναρτήσεις της glut, τις οποίες μπορούμε να αλλάξουμε η να δώσουμε τις δικιές μας εντολές. π.χ η glutMouseFunc που ενεργοποιείται όταν πατάμε κάποιο κουμπί του mouse.

 

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

 

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

Αρχειοθετημένο

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

  • Δημιουργία νέου...