THMMY.gr

Ηλεκτρονικοί Υπολογιστές και Τεχνικά Θέματα => Προγραμματισμός (C, VB, Delphi, PHP, ASP...) => Topic started by: Καμένος on February 18, 2007, 23:22:19 pm



Title: Απορίες σε OpenGL
Post by: Καμένος on February 18, 2007, 23:22:19 pm
Προσπαθώ να ξεκινήσω με την openGL αλλά έχω φάει ένα κόλλημα.. Έχω γράψει το εξής:

Code:
#include "iostream"
#include <stdlib.h>

#include <GL/glaux.h>
#include <GL/glu.h>
#include <GL/gl.h>

int main (int argc, char** argv)
{
auxInitDisplayMode (AUX_SINGLE | AUX_RGBA);
auxInitPosition (0, 0, 400, 400);
auxInitWindow(argv[0]);
}

Όπως εχω δει να γράφεται σε πολλές πηγές. Παρόλα αυτά μου βγάζει το εξής λάθος:

Code:
------ Build started: Project: manos1, Configuration: Debug Win32 ------

Compiling...
test1.cpp
Linking...
test1.obj : error LNK2019: unresolved external symbol _auxInitWindowA@4 referenced in function _main
test1.obj : error LNK2019: unresolved external symbol _auxInitPosition@16 referenced in function _main
test1.obj : error LNK2019: unresolved external symbol _auxInitDisplayMode@4 referenced in function _main
Debug/manos1.exe : fatal error LNK1120: 3 unresolved externals

Build log was saved at "file://c:\Documents and Settings\manos\My Documents\Visual Studio Projects\manos1\manos1\Debug\BuildLog.htm"
manos1 - 4 error(s), 0 warning(s)


---------------------- Done ----------------------

    Build: 0 succeeded, 1 failed, 0 skipped


Δεν μπορώ να καταλάβω τι ακριβώς παίρνει ως όρισμα η auxInitWindow... όταν δηλώνω void main(void) μου βγάζει μόνο ότι είναι λάθος το όρισμα της auxInitWindow ότι όρισμα και να δοκίμασα..

Μπορεί να βοηθήσει κανένας??


Title: Re: Απορίες σε OpenGL
Post by: Verminoz on February 19, 2007, 19:13:40 pm
Πωπω, είσαι Καμένος όνομα και πράγμα. Το OpenGL είναι εκπληκτικό όσο είναι και δύσκολο.

Από ότι βλέπω το πρόγραμμα σου είναι συντακτικά σωστό αφού κάνει σωστά compile. Έδωσες στον linker να κάνει link τα απαραίτητα αρχεία? Ποιο IDE χρησιμοποιείς? Συνήθως αυτό πρέπει να το κάνεις χειροκίνητα σε όλα τα IDE. Πρέπει να πας στα Linker Settings και να προσθέσεις τις απαραίτητες Object Libraries για να τις κάνει λινκ όταν θα πάει να χτίσει το executable αρχείο.


Title: Re: Απορίες σε OpenGL
Post by: Καμένος on February 19, 2007, 22:09:00 pm
Πωπω, είσαι Καμένος όνομα και πράγμα. Το OpenGL είναι εκπληκτικό όσο είναι και δύσκολο.

Από ότι βλέπω το πρόγραμμα σου είναι συντακτικά σωστό αφού κάνει σωστά compile. Έδωσες στον linker να κάνει link τα απαραίτητα αρχεία? Ποιο IDE χρησιμοποιείς? Συνήθως αυτό πρέπει να το κάνεις χειροκίνητα σε όλα τα IDE. Πρέπει να πας στα Linker Settings και να προσθέσεις τις απαραίτητες Object Libraries για να τις κάνει λινκ όταν θα πάει να χτίσει το executable αρχείο.

Βασικά το δοκίμασα και με το borland developer Studio και με το microsoft visual studio 2003  καιμου βγάζει παρόμοια πράγματα...

Τις έβαλα τις βιβλιοθήκες ρε συ... Έβαλα τα

C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Lib

και

C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\lib

ως φακέλους που περιέχονται τα lib files.

Επίσης έδωσα και τις συγκεκριμένες βιβλιοθήκες

"C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Lib"
"C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\lib"

στον linker.

πάντως βρήκα ότι πρέπει να δηλώσεις και την windows.h αφού εκεί βρίσκεται δηλωμένος ο τύπος μεταβλητής LPCSTR που παίρνει ως όρισμα η auxInitWindow... Τώρα το θέμα είναι να βρώ τι είναι αυτό το LPCSTR  ακριβώς...!


Title: Re: Απορίες σε OpenGL
Post by: Verminoz on February 19, 2007, 22:21:40 pm
PlatformSDK είναι ο φάκελος όπου υπάρχουν οι βιβλιοθήκες του OpenGL? Πάντως έχω την εντύπωση ότι πρέπει να δώσεις τα αρχεία που πρέπει συγκεκριμένα, όχι γενικώς τον φάκελο.
Είχα ασχοληθεί παλιότερα αρκετά με το OpenGL αλλά για να είμαι ειλικρινής τα έφτυσα μέσα σε κάποιες βδομάδες και δεν θυμάμαι σχεδόν τίποτα...είναι αρκετά φευγάτο...

Καταπληκτική δουλειά με το OpenGL έχει κάνει ο τύπος με το παρατσούκλι Nehe. Τσέκαρε το site του:
http://nehe.gamedev.net/

Έχει και καλά tutorials...


Title: Re: Απορίες σε OpenGL
Post by: Καμένος on February 19, 2007, 22:26:37 pm
θα το δώ!! thanx!!


Title: Re: Απορίες σε OpenGL
Post by: Καμένος on February 20, 2007, 12:08:26 pm
Νέα ενημέρωση... Τελικά δεν φταίει το όρισμα της auxInitWindow... Με αυτόν τον κώδικα:

Code:
#include "iostream"
#include <stdlib.h>
#include <windows.h>
#include <GL/glaux.h>
#include <GL/glu.h>
#include <GL/gl.h>

int main (void)
{
auxInitDisplayMode (AUX_SINGLE | AUX_RGBA);
auxInitPosition (0, 0, 400, 400);
auxInitWindow("window1");
return 0;
}

παίρνω τα εξής λάθη:

Code:
------ Build started: Project: manos1, Configuration: Debug Win32 ------

Compiling...
test1.cpp
Linking...
test1.obj : error LNK2019: unresolved external symbol _auxInitWindowA@4 referenced in function _main
test1.obj : error LNK2019: unresolved external symbol _auxInitPosition@16 referenced in function _main
test1.obj : error LNK2019: unresolved external symbol _auxInitDisplayMode@4 referenced in function _main
Debug/manos1.exe : fatal error LNK1120: 3 unresolved externals

Build log was saved at "file://c:\Documents and Settings\manos\My Documents\Visual Studio Projects\manos1\manos1\Debug\BuildLog.htm"
manos1 - 4 error(s), 0 warning(s)


---------------------- Done ----------------------

    Build: 0 succeeded, 1 failed, 0 skipped


Από την άλλη αν γράψω στην κονσόλα του linker την εντολή

Code:
/DEFAULTLIB:"GlAux.lib"

μήπως και δεν κάνει link με αυτήν και μου βγάζει τα εξής λάθη:

Code:
------ Build started: Project: manos1, Configuration: Debug Win32 ------

Linking...
GlAux.lib(glaux.obj) : error LNK2019: unresolved external symbol __imp__glOrtho@48 referenced in function _DefaultHandleReshape@8
GlAux.lib(glaux.obj) : error LNK2019: unresolved external symbol __imp__glLoadIdentity@0 referenced in function _DefaultHandleReshape@8
GlAux.lib(glaux.obj) : error LNK2019: unresolved external symbol __imp__glMatrixMode@4 referenced in function _DefaultHandleReshape@8
GlAux.lib(glaux.obj) : error LNK2019: unresolved external symbol __imp__glViewport@16 referenced in function _DefaultHandleReshape@8
GlAux.lib(glaux.obj) : error LNK2019: unresolved external symbol __imp__glDrawBuffer@4 referenced in function _auxInitWindowAW@8
GlAux.lib(glaux.obj) : error LNK2019: unresolved external symbol __imp__glClearIndex@4 referenced in function _auxInitWindowAW@8
GlAux.lib(glaux.obj) : error LNK2019: unresolved external symbol __imp__glClearColor@16 referenced in function _auxInitWindowAW@8
GlAux.lib(tk.obj) : error LNK2019: unresolved external symbol __imp__wglDeleteContext@4 referenced in function _CleanUp@0
GlAux.lib(tk.obj) : error LNK2019: unresolved external symbol __imp__wglMakeCurrent@8 referenced in function _CleanUp@0
GlAux.lib(tk.obj) : error LNK2019: unresolved external symbol __imp__wglCreateContext@4 referenced in function _tkInitWindowAW@8
Debug/manos1.exe : fatal error LNK1120: 10 unresolved externals

Build log was saved at "file://c:\Documents and Settings\manos\My Documents\Visual Studio Projects\manos1\manos1\Debug\BuildLog.htm"
manos1 - 11 error(s), 0 warning(s)


---------------------- Done ----------------------

    Build: 0 succeeded, 1 failed, 0 skipped

Τι διάολο γίνεται οεο???


Title: Re: Απορίες σε OpenGL
Post by: TheDoctor on February 20, 2007, 14:45:50 pm
Λοιπόν φίλε μου απλά, δεν κάνεις reference συγκεκριμένα την βιβλιοθήκη Opengl32.lib στον linker σου. Εσύ μπορεί να του λες οτι οι βιβλιοθήκες είναι στο c:\μπλα μπλα\PlatformSDK\lib, αλλά αυτό δεν φτάνει. Πρέπει να του πείς από τα project properties να κάνει λινκ στην opeggl32.lib (Αν χρησιμοποιείς Visual Studio δεξί κλίκ στο όνομα του project (όχι του solution), properties, linker από αριστερα, Input και στο πεδίο Additional Dependencies θα γράψεις απλά opengl32.lib . Μετά ο linker θα πάψει να γκρινιάζει.

Κώστας Πανούλας


Title: Re: Απορίες σε OpenGL
Post by: Verminoz on February 20, 2007, 15:17:51 pm
Λοιπόν φίλε μου απλά, δεν κάνεις reference συγκεκριμένα την βιβλιοθήκη Opengl32.lib στον linker σου. Εσύ μπορεί να του λες οτι οι βιβλιοθήκες είναι στο c:\μπλα μπλα\PlatformSDK\lib, αλλά αυτό δεν φτάνει. Πρέπει να του πείς από τα project properties να κάνει λινκ στην opeggl32.lib (Αν χρησιμοποιείς Visual Studio δεξί κλίκ στο όνομα του project (όχι του solution), properties, linker από αριστερα, Input και στο πεδίο Additional Dependencies θα γράψεις απλά opengl32.lib . Μετά ο linker θα πάψει να γκρινιάζει.

Κώστας Πανούλας

Αυτό που εννοούσα κι εγώ δηλαδή! ;)


Title: Re: Απορίες σε OpenGL
Post by: jiraiya on February 20, 2007, 21:57:42 pm
kamene, να σε ρωτήσω κάτι?
Για ποιο λόγο ασχολείσαι με Open Gl Κι όχι με DirectX?

Είναι καθαρά ερώτηση περιέργειας...
Έχω την εντύπωση ότι η ανάπτυξη εφαρμογής στο DirectX σου δίνει διάφορες δυνατότητες.
Άσε που χρησιμοποιώντας και το .ΝΕΤ framework, μπορείς να μπεις και σε linux τώρα πια.


Title: Re: Απορίες σε OpenGL
Post by: poumpa on February 21, 2007, 04:27:14 am
Λοιπόν φίλε μου απλά, δεν κάνεις reference συγκεκριμένα την βιβλιοθήκη Opengl32.lib στον linker σου. Εσύ μπορεί να του λες οτι οι βιβλιοθήκες είναι στο c:\μπλα μπλα\PlatformSDK\lib, αλλά αυτό δεν φτάνει. Πρέπει να του πείς από τα project properties να κάνει λινκ στην opeggl32.lib (Αν χρησιμοποιείς Visual Studio δεξί κλίκ στο όνομα του project (όχι του solution), properties, linker από αριστερα, Input και στο πεδίο Additional Dependencies θα γράψεις απλά opengl32.lib . Μετά ο linker θα πάψει να γκρινιάζει.

Κώστας Πανούλας

Εκτός από τα παραπάνω χρειάζεται να κάνεις link και με τις βιβλιοθήκες GLu32.lib και GLaux.lib
και να μην ξεχάσεις το Project που έχεις δημιουργήσει να είναι Win32 Application και ΟΧΙ Win32 Console Application.

Ο NeHe έχει πιθανόν τα καλύτερα tutorial πάνω σε OpenGL αλλα θα πρέπει να φας στη μάπα και λίγο Win32 API για να καταλάβεις τι παίζει. Δεν είναι αναγκαστικά κακό αυτό αλλά θα χρειαστείς κάποιο χρόνο παραπάνω αν θες να καταλάβεις πως ψιλοδουλεύουν τα πράματα...

Ένα άλλο καλό site σε ίδιο στυλ με του NeHe (hardcore Win32...) είναι το
http://www.gametutorials.com/gtstore/c-1-opengl-tutorials.aspx (http://www.gametutorials.com/gtstore/c-1-opengl-tutorials.aspx)


Αν θές να αποφύγεις το Win32 API δες το επίσημο site της OpenGL
http://www.opengl.org/ (http://www.opengl.org/)

Από αυτά που θυμάμαι χρησιμοποιούσε τη βιβλιοθήκη glut για να δημιουργήσει application, window κτλ

Ένα πολύ καλό forum υπάρχει κ στο
http://www.gamedev.net/ (http://www.gamedev.net/)


kamene, να σε ρωτήσω κάτι?
Για ποιο λόγο ασχολείσαι με Open Gl Κι όχι με DirectX?

Είναι καθαρά ερώτηση περιέργειας...
Έχω την εντύπωση ότι η ανάπτυξη εφαρμογής στο DirectX σου δίνει διάφορες δυνατότητες.
Άσε που χρησιμοποιώντας και το .ΝΕΤ framework, μπορείς να μπεις και σε linux τώρα πια.

Στο internet υπάρχουν άπειρες κ ατέλειωτες συζητήσεις πάνω στη σύγκριση OpenGL/Direct3D (τα DirectX είναι γενικότερο API που εκτός απο τα 3D γραφικά περιέχουν κ χειρισμό εισόδου (DirectInput), ήχου(DirectSound,DirectMusic ή κάπως έτσι..) και άλλα για αυτό δεν μπορεί να γίνει ακριβής σύγκριση μεταξύ των δύο αφού η OpenGL είναι καθαρά για 3D γραφικά)

Κάποια σημεία που είναι κοινώς αποδεκτά είναι:
-Η OpenGL είναι απλούστερη κ πιο κατανοητή (σε αυτό ρόλο παίζει ότι είναι φτιαγμένη σε C-style αντίθετα με τα Direct3D που έχουν interface πάνω σε interface κ δεν συμμαζεύεται...)
-Η OpenGL είναι γενικά ταχύτερη από τα Direct3D (μη βαράτε! μπορείτε εύκολα να δείτε ότι στις περιπτώσεις που δεν ισχύει αυτό είναι γιατί τα Direct3D κ ιδιαίτερα μετά τα DirectX8 μπορούν κ υποστηρίζουν το hardware acceleration περισσότερων καρτών από η OpenGL)
-Η OpenGL έχει φτιαχτεί για να είναι portable (ενώ τα DirectX έχουν φτιαχτεί για τα windows...)

Για τους παραπάνω λόγους τουλάχιστον εγώ πιστεύω ότι είναι καλύτερο για κάποιον να ξεκινήσει από OpenGL.
Κ για να επανέλθω σε κάτι που ειπώθηκε στην αρχή ότι η OpenGL είναι δύσκολη.
Από προσωπική εμπειρία έχω δει ότι το δύσκολο στα 3D γραφικά είναι να καταλάβεις την μαθηματική θεμελίωση κ τον μαθηματικό χειρισμό των πραγμάτων (κάμερα, affine χώρους, γραμμικοί μετασχηματισμοί, projections, clipping, culling, quadrics, curves, Phong lighting model, κ πάει λέγοντας....).
Από εκεί κ πέρα η OpenGL είναι σε γενικές γραμμές μια απλή FSM (Finite State Machine) που υλοποιεί διάφορους αλγόριθμους των 3D γραφικών κ σου επιτρέπει τον χειρισμό τους σύμφωνα με ένα σχετικά απλό API.

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


Title: Re: Απορίες σε OpenGL
Post by: jiraiya on February 21, 2007, 04:36:17 am
Stalin, νομίζω πια πως το ζήτημα του portability είναι μύθος...
Είναι γεγονός ότι όταν ξεκίνησε το OpenGl ήταν χρόνια μπροστά και το DirectX κατηγορήθηκε ότι όλες οι μετέπειτά του εκδόσεις έτειναν να μοιάσουν στο OpenGl, αλλά η ύπαρξη του .NET framework Λύνει νομίζω το ζήτημα του portability.
Τώρα έχεις DirectX που παίζει σε Linux.
Γράφεις και το προγραμματάκι σου σε Managed code και είσαι τζιτζί!

Για όποιον συνάδελφο ενδιαφέρεται να δει το DirectX, μπορεί να βρει Άπειρη βιβλιογραφία σε torrent ή στο μουλάρι!
Υπάρχουν επίσης πολύ όμορφα παραδειγματάκια και μέσα στο DirectX SDK όπως επίσης και στην σελίδα του MSDN.

Όπως και να'χει, είναι ενδιαφέρουσα ενασχόληση!
Καλή συνέχεια!


Title: Re: Απορίες σε OpenGL
Post by: Zarathoustra on February 21, 2007, 05:24:50 am
Quote from: Jiraira
Stalin, νομίζω πια πως το ζήτημα του portability είναι μύθος...
Είναι γεγονός ότι όταν ξεκίνησε το OpenGl ήταν χρόνια μπροστά και το DirectX κατηγορήθηκε ότι όλες οι μετέπειτά του εκδόσεις έτειναν να μοιάσουν στο OpenGl, αλλά η ύπαρξη του .NET framework Λύνει νομίζω το ζήτημα του portability.
Τώρα έχεις DirectX που παίζει σε Linux.
Γράφεις και το προγραμματάκι σου σε Managed code και είσαι τζιτζί!

Η NASA είχε δημιουργήσει ένα open-source project αντίστοιχο του google-erarth με την ονομασία "World Wind".Ήταν γραμμένο εξ´ολοκλήρου σε managed C# και χρησιμοποιούσε το direct3D.ΝΕΤ για απεικόνιση τριδιάστατων γραφικών.H εφαρμογή είχε μεγάλη επιτυχία(μπορείτε να την δοκιμάσετε όσοι έχετε εγκατεστημένο .ΝΕΤ framework ) αλλά υπήρχε ένα σημαντικό (και αξεπέραστο) πρόβλημα:Έτρεχε μόνο σε windows.Τέθηκε λοιπόν ως άμεση προτεραιότητα,η επόμενη λοιπόν έκδοση του World Wind να τρέχει σε όλες τις πλατφόρμες (linux-windows-mac) ,μια και όλοι οι χρήστες έχουν δικαίωμα στην πληροφορία,τα αστρονομικά δεδομένα και τις εντυπωσιακές δορυφορικές φωτογραφίες ενός δημόσιου οργανισμού και όχι μόνο οι πελάτες του Bill Gates,οπότε επιλέχθηκε ως API το openGL και συγκεκριμένα το JOGL(η "έκδοση" του για java).

Αυτά για τον "μύθο" του portability.

(το linux υποστηρίζει μόνο ενα μικρό υποσύνολο από το API του .NET και το Direct3D.NET (ή όπως ονομάζεται) δεν αποτελεί φυσικά  μέρος του.Η κατάσταση δεν νομίζω να αλλάξει δραματικά στο μέλλον,αλλά ακόμα και αν διαψευσθώ είμαι σίγουρος πως η στρατιά δικηγόρων της MS θα αναλάβει την προστασία της πολύτιμης πνευματικής της ιδιοκτησίας και του πατενταρισμένου API.Σε αντιδιαστολή,το openGL δεν ανήκει σε κάποια εταιρεία,είναι ανοιχτό standard και μπορεί οποιοσδήποτε να το υλοποιήσει χωρίς να ανησυχεί για μηνύσεις και εμπλοκή σε (κατά πάσα πιθανότητα άνισους) δικαστικούς αγώνες)


Title: Re: Απορίες σε OpenGL
Post by: Verminoz on February 21, 2007, 14:10:26 pm
Και μόνο που είναι από την Microsoft δεν πρέπει καν να χρησιμοποιήσεις ένα πακέτο σαν το DirectX. :D

Το OpenGL είναι ένα πανίσχυρο πακέτο, portable, για γραφικά! Όχι για τίποτα άλλο! Σου δίνει όλα τα εργαλεία για 2D και 3D γραφικά. Απο εκεί και πέρα αν χρειάζεσαι ήχο υπάρχει η πανίσχυρη OpenAL. Αν θες input υπάρχουν άλλα interfaces (SDL κ.α.) που μπορείς να αξιοποιήσεις.
Όσο πιο μακριά μπορεί να μείνει κανείς από το Win32 ΑPI που είναι ούτως ή άλλως δύστροπο και μη ευέλικτο τόσο το καλύτερο. Αν και όντως στα tuts του NeHe έχει μπλέξει αρκετά με Win32 API αλλά τι να κάνεις.

Όταν είπα ότι το OpenGL είναι δύσκολο δεν το είπα για κακό ούτε για αποτρεπτικό. Απλώς πιστεύω πως είναι κάτι που χρειάζεται σοβαρή ενασχόληση, δεν το μαθαίνεις για πλάκα! O Stalin έχει δίκιο, το μαθηματικό και θεωρητικό (λογικό) κομμάτι είναι το πιο δύσκολο. Από κει και πέρα και εφόσον γνωρίζει κάποιος προγραμματισμό δεν υπάρχει δυσκολία...


Title: Re: Απορίες σε OpenGL
Post by: Καμένος on February 22, 2007, 19:41:02 pm
Εντάξει τώρα... Έφτιαξα win32 και δήλωσα τις βιβλιοθήκες στο cpp που δημιουργήθηκε.. Βασικά τώρα δεν ξερω τι παίζει για να ζωγραφίσω...

Βάζω κατευθείαν τις εντολές για σημεία κτλ ή πρέπει να κάνω κάτι αλλο? Έβαλα την auxInitWindow, την auxInitDisplay και μία άλλη που δεν θυμάμαι και αμέσως μετά έβαλα να ζωγραφίσει κάτι τελείες... αλλά ενώ άνοιγε την φόρμα δεν είχε ζωγραφισμένο τίποτα. Πρέπει να κάνω κάτι συγκεκριμένο πρώτα?


Title: Re: Απορίες σε OpenGL
Post by: Verminoz on February 22, 2007, 19:48:28 pm
Για να ζωγραφίζεις υπάρχη η οικογένεια συναρτήσεων vertex και πρέπει να εξασφαλίσεις στο τέλος ότι όλα έχουν περάσει στο buffer. Γι αυτό κάνεις flush με την αντίστοιχη συνάρτηση...ίσως φταίει αυτό...


Title: Re: Απορίες σε OpenGL
Post by: poumpa on February 22, 2007, 22:14:41 pm
Εντάξει τώρα... Έφτιαξα win32 και δήλωσα τις βιβλιοθήκες στο cpp που δημιουργήθηκε.. Βασικά τώρα δεν ξερω τι παίζει για να ζωγραφίσω...

Βάζω κατευθείαν τις εντολές για σημεία κτλ ή πρέπει να κάνω κάτι αλλο? Έβαλα την auxInitWindow, την auxInitDisplay και μία άλλη που δεν θυμάμαι και αμέσως μετά έβαλα να ζωγραφίσει κάτι τελείες... αλλά ενώ άνοιγε την φόρμα δεν είχε ζωγραφισμένο τίποτα. Πρέπει να κάνω κάτι συγκεκριμένο πρώτα?

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


Title: Re: Απορίες σε OpenGL
Post by: Καμένος on February 22, 2007, 23:51:30 pm
Εντάξει τώρα... Έφτιαξα win32 και δήλωσα τις βιβλιοθήκες στο cpp που δημιουργήθηκε.. Βασικά τώρα δεν ξερω τι παίζει για να ζωγραφίσω...

Βάζω κατευθείαν τις εντολές για σημεία κτλ ή πρέπει να κάνω κάτι αλλο? Έβαλα την auxInitWindow, την auxInitDisplay και μία άλλη που δεν θυμάμαι και αμέσως μετά έβαλα να ζωγραφίσει κάτι τελείες... αλλά ενώ άνοιγε την φόρμα δεν είχε ζωγραφισμένο τίποτα. Πρέπει να κάνω κάτι συγκεκριμένο πρώτα?

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

παλιοκατάσταση... μήπως μπορείς να παραθέσεις ένα απλό προγραμματάκι να καταλάβω τι γίνεται?? (αν δεν είναι κόπος φυσικά...)


Title: Re: Απορίες σε OpenGL
Post by: poumpa on February 23, 2007, 16:52:51 pm
παλιοκατάσταση... μήπως μπορείς να παραθέσεις ένα απλό προγραμματάκι να καταλάβω τι γίνεται?? (αν δεν είναι κόπος φυσικά...)

Α ρε καμμένε...
Τόσα tuts κ βαριέσαι να τα δεις!

Code:
// μετατόπιση προς τον άξονα -z
glTranslatef(0.0f,0.0f,-2.0f);

// ζωγράφισε ένα κόκκινο τρίγωνο (έτσι ώστε το κάθετο διάνυσμα κατα την δεξιόστροφη φορά να κοιτάει "έξω από την οθόνη")
glBegin(GL_TRIANGLES);
     glColor3f(1.0f,0.0f,0.0f);
     glVertex3f(1.0f,0.0f,0.0f);
     glVertex3f(0.0f,1.0f,0.0f);
     glVertex3f(-1.0f,0.0f,0.0f);
glEnd();

// άμεση εκτέλεση των παραπάνω εντολών
glFlush();

Λογικά θα πρέπει να δεις ένα κόκκινο τρίγωνο στην οθόνη
Υπάρχουν αρκετές λεπτομέρειες που δεν τις αναφέρω για αυτό ψάξε τι κάνει κάθε συνάρτηση για να καταλάβεις καλύτερα τι παίζει.
Υπόψιν: Δεν το έχω τρέξει!


Title: Re: Απορίες σε OpenGL
Post by: Καμένος on February 23, 2007, 16:57:46 pm
παλιοκατάσταση... μήπως μπορείς να παραθέσεις ένα απλό προγραμματάκι να καταλάβω τι γίνεται?? (αν δεν είναι κόπος φυσικά...)

Α ρε καμμένε...
Τόσα tuts κ βαριέσαι να τα δεις!

Code:
// μετατόπιση προς τον άξονα -z
glTranslatef(0.0f,0.0f,-2.0f);

// ζωγράφισε ένα κόκκινο τρίγωνο (έτσι ώστε το κάθετο διάνυσμα κατα την δεξιόστροφη φορά να κοιτάει "έξω από την οθόνη")
glBegin(GL_TRIANGLES);
     glColor3f(1.0f,0.0f,0.0f);
     glVertex3f(1.0f,0.0f,0.0f);
     glVertex3f(0.0f,1.0f,0.0f);
     glVertex3f(-1.0f,0.0f,0.0f);
glEnd();

// άμεση εκτέλεση των παραπάνω εντολών
glFlush();

Λογικά θα πρέπει να δεις ένα κόκκινο τρίγωνο στην οθόνη
Υπάρχουν αρκετές λεπτομέρειες που δεν τις αναφέρω για αυτό ψάξε τι κάνει κάθε συνάρτηση για να καταλάβεις καλύτερα τι παίζει.
Υπόψιν: Δεν το έχω τρέξει!

Ευχαριστώ ρε άχρηστε.. Κοίτα ποιος μιλάει για βαρεμάρα!! Τώρα τα κατέβασα τα tutorials, ηρέμησε!!


Title: Re: Απορίες σε OpenGL
Post by: Καμένος on February 24, 2007, 11:44:32 am
Ρε γαμώτο το δοκίμασα το δικό σου και κάποιο άλλο από τον neHe αλλά τίποτα.. Μάλλον φταίει που δεν δημιούργησα κενό project. Ο κώδικας που προκύπτει είναι ο εξής:

Code:
int DrawGLScene(GLvoid)							// Here's Where We Do All The Drawing
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // Clear The Screen And The Depth Buffer
glLoadIdentity(); // Reset The View

glTranslatef(-1.5f,0.0f,-6.0f);
glBegin(GL_TRIANGLES); // Drawing Using Triangles
glVertex3f( 0.0f, 1.0f, 0.0f); // Top
glVertex3f(-1.0f,-1.0f, 0.0f); // Bottom Left
glVertex3f( 1.0f,-1.0f, 0.0f); // Bottom Right
glEnd();
glTranslatef(3.0f,0.0f,0.0f);
glBegin(GL_QUADS); // Draw A Quad
glVertex3f(-1.0f, 1.0f, 0.0f); // Top Left
glVertex3f( 1.0f, 1.0f, 0.0f); // Top Right
glVertex3f( 1.0f,-1.0f, 0.0f); // Bottom Right
glVertex3f(-1.0f,-1.0f, 0.0f); // Bottom Left
glEnd(); // Done Drawing The Quad
return TRUE; // Keep Going
}

To παράθυρο του win32 ανοίγει κανονικά αλλά δεν είναι ζωγραφισμένο τίποτα...

Επίσης όταν έφτιαξα ένα κενό project win32 και έβαλα τον κώδικα του nehe στο 1ο μάθημα μου έβγαζε λάθος ότι δεν έβρισκε precompiled header ή κατί τέτοιο... Έλεος!! Ένα ---------ο τρίγωνο θέλω να ζωγραφίσω!! Πολλά ζητάω???


Title: Re: Απορίες σε OpenGL
Post by: Aurelius on February 26, 2007, 14:35:57 pm
Να ρωτησω και γω το μακρυ μου.

Στα linux χρειαζεται κατι ιδιαιτερο σε σχεση με τα windows; Κατεβασα και εγκατεστησα την Mesa implementation.  Εχω Kdevelop. Επειδη δεν εχω παιξει αρκετα με αυτο, δεν ξερω που ειναι ακριβως τα linkers, αλλα συνεχιζω το ψαξιμο. Αυτο που εχω να ρωτησω ειναι, αν υπαρχει καποια αντιστοιχη της glaux στο linux...
Και αν καποιος ασχολειται με linux και μπορει να βοηθησει με τις επιλογες του kdevelop, ας στειλει ενα πμ.


Title: Re: Απορίες σε OpenGL
Post by: poumpa on February 27, 2007, 15:37:38 pm
Ρε γαμώτο το δοκίμασα το δικό σου και κάποιο άλλο από τον neHe αλλά τίποτα.. Μάλλον φταίει που δεν δημιούργησα κενό project. Ο κώδικας που προκύπτει είναι ο εξής:

Code:
int DrawGLScene(GLvoid)							// Here's Where We Do All The Drawing
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // Clear The Screen And The Depth Buffer
glLoadIdentity(); // Reset The View

glTranslatef(-1.5f,0.0f,-6.0f);
glBegin(GL_TRIANGLES); // Drawing Using Triangles
glVertex3f( 0.0f, 1.0f, 0.0f); // Top
glVertex3f(-1.0f,-1.0f, 0.0f); // Bottom Left
glVertex3f( 1.0f,-1.0f, 0.0f); // Bottom Right
glEnd();
glTranslatef(3.0f,0.0f,0.0f);
glBegin(GL_QUADS); // Draw A Quad
glVertex3f(-1.0f, 1.0f, 0.0f); // Top Left
glVertex3f( 1.0f, 1.0f, 0.0f); // Top Right
glVertex3f( 1.0f,-1.0f, 0.0f); // Bottom Right
glVertex3f(-1.0f,-1.0f, 0.0f); // Bottom Left
glEnd(); // Done Drawing The Quad
return TRUE; // Keep Going
}

To παράθυρο του win32 ανοίγει κανονικά αλλά δεν είναι ζωγραφισμένο τίποτα...

Επίσης όταν έφτιαξα ένα κενό project win32 και έβαλα τον κώδικα του nehe στο 1ο μάθημα μου έβγαζε λάθος ότι δεν έβρισκε precompiled header ή κατί τέτοιο... Έλεος!! Ένα ---------ο τρίγωνο θέλω να ζωγραφίσω!! Πολλά ζητάω???

Είναι περίεργο γιατί με copy-paste τον κώδικα εγώ τα βλέπω...

MSVS2003 έχεις;
Με το 2005 παίζει να έχει πρόβλημα.
Το precompiled header είναι μια μλκια του VS...

Τεσπα δες αν ζωγραφίζεις με μαύρο χρώμα (καλού κακού βάλε μια glColor3f(1.0f1.0f,1.0f) πριν τα glBegin)
Ή αν έχεις ενεργοποιημένο τον φωτισμό (δεν πρέπει να είναι όταν ζωγραφίζεις έτσι κ πάλι καλού κακού στην InitGL κάλεσε glDisable(GL_LIGHTING) )
Συνήθως τέτοια είναι...

Μόλις έριξα μια ματιά στον κώδικα που δημιουργεί αυτόματα το VS2003 σε ένα Win32 Application κ δεν σου δίνει Rendering Context που χρειάζεται η OpenGL για να ζωγραφίσει. Δλδ δημιουργεί ένα παράθυρο στο οποίο δεν είναι δυνατό να χρησιμοποιήσεις OpenGL...

Για αυτό:
Πάρε ένα ολόκληρο project από τα tuts του NeHe, κάντο σε VS2003 (είναι σε VS6 κανονικά), βάλτο να δεις αν τρέχει (που λογικά θα τρέχει ΟΚ) κ τουλάχιστον για να λίγο χρησιμοποιήσε αυτό...


Να ρωτησω και γω το μακρυ μου.

Στα linux χρειαζεται κατι ιδιαιτερο σε σχεση με τα windows; Κατεβασα και εγκατεστησα την Mesa implementation.  Εχω Kdevelop. Επειδη δεν εχω παιξει αρκετα με αυτο, δεν ξερω που ειναι ακριβως τα linkers, αλλα συνεχιζω το ψαξιμο. Αυτο που εχω να ρωτησω ειναι, αν υπαρχει καποια αντιστοιχη της glaux στο linux...
Και αν καποιος ασχολειται με linux και μπορει να βοηθησει με τις επιλογες του kdevelop, ας στειλει ενα πμ.

glaux.lib δεν νομίζω να υπάρχει. Ούτε OpenGL32.lib, Glu32.lib κτλ
Αυτά είναι για windows :P
Για τα Linux υπάρχει καλή υποστήριξη στο official site www.opengl.org (http://www.opengl.org)
Νομίζω πρέπει να ψάξεις για βιβλιοθήκες του X-Window system.
Πρέπει να υπάρχει XGL.lib ή κάτι τέτοιο αλλά καλύτερα πιάσε τα tuts από το site για να είσαι πιο σίγουρος


Title: Re: Απορίες σε OpenGL
Post by: Aurelius on February 27, 2007, 17:11:57 pm
Τελικα βρηκα κατι αλλες, παλι με Mesa Implementation. Τωρα ειναι καθαρα θεμα προγραμματιστικου περιβαλλοντος. Τωρα βρηκα που βαζω τις βιβλιοθηκες, αλλα μου βγαζει αλλα errors


Title: Re: Απορίες σε OpenGL
Post by: Aurelius on November 27, 2007, 13:19:23 pm
Νεος κυκλος Αποριων....

Ξεκινησα να δουλευω με OpenGL σε Ubuntu, με την πολυτιμη βοηθεια του συντροφου Kenny. Θα γραψω εδω τα γραφειοκρατικα βηματα, για να μπορεσει και κανεις αλλος να την δουλεψει, τουλαχιστον σε linux.

Κατ αρχην πρεπει να εχεις εγκατεστημενους 3D drivers.  Στα Ubuntu αυτο γινεται σχεδον αυτοματα. Στην τελικη βαζεις το compiz και τα εγκαθιστα παραλληλα.

Απο βιβλιοθηκες χρειαζεται:

- libgl1-mesa-dev
- libgl1-mesa-dri
- libgl1-mesa-glx
- libglu1-mesa
- libglu1-mesa-dev
- libwxgtk2.6-0
- libwxgtk2.8-0
- libwxgtk2.8-dev
- mesa-common-dev
- mesa-utils

Απλα γραψτε mesa στο search στο synaptic, και θα τα δειτε. Εγκαταστηστε τα. Δεν ξερω αν ολα ειναι απαραιτητα, αλλα και με την συνδρομη του Kenny, τα εβαλα αυτα και μου δουλεψε.

Μετα, πατε στο Kdevelop, ανοιγεται ενα Simple Hello Project.

Προσθετετε
#include <GL/glut.h>

Μετα πατε στο Automake Manager, που ειναι ενα συρταρωτο παραθυρο στο δεξι μερος του Kdevelop.
Πατε στο κατω παραθυρακι του, που λεει τα header και source files, πατατε στο εικονιδιο με το γαλλικο κλειδακι, που ειναι το options. Αφου ανοιξει πατε στο Tab <Libraries> και στο παραθυρο που λεει για link libraries outside project πατατε <Add> και γραφετε -lglut.

Θεωρητικα αυτα ειναι αρκετα για να σας δουλευει η OpenGL.

Συμβουλες:

Τα πιο πολλα βιβλια που θα ανοιξετε θα λενε πως να προγραμματισεις σε OpenGL. Δεν λενε πως να κανεις το παραθυρο να εμφανιστει, να δειξει κατι βασικο και να μενει ανοικτο. Για αυτο θα το γραψω εδω, για να μην φατε τζαμπα ταλαιπώρια, ξοδεψετε τζαμπα χρονο και ξενερωσετε επειδη δεν θα δειχνει τιποτα.

1) Γραφετε μια main οπως η παρακατω:

int main(int argc, char *argv[])
{
// Εδω θετουμε κατι σαν αρχικες συνθηκες για την αρχικοποιηση του παραθυρου
// Κοινως, στα αρχιδια μας, αφου δουλευει δεν μας ενδιαφερει. Για αργοτερα το ψαχνουμε τι κανει
// ακριβως

   glutInit(&argc, argv);
// Εδω οριζουμε καποια δεδομενα για το παραθυρο. Το πρωτο θετει την default τιμη στο depth, το δευτερο οριζει single
// buffering(ή κατι τετοιο) που ειναι για εικονες χωρις animation και το τριτο οριζει την εικονα ως RGB.

   glutInitDisplayMode(GLUT_DEPTH | GLUT_SINGLE | GLUT_RGBA);
// Εδω καθοριζουμε την θεση του παραθυρου μας σε pixel απο την πανω αριστερα γωνια
   glutInitWindowPosition(100,100);
// Εδω οριζουμε το μεγεθος του παραθυρου
   glutInitWindowSize(600,600);
// Και εδω το φτιαχνουμε, οριζοντας το ονομα που θα εχει πανω το παραθυρο
   glutCreateWindow("3D Cube - GLUT Tutorial");

// SOS : Αυτη εδω η συναρτηση μας ειναι απαραιτητη και ειναι βασικη για εμας. Ειναι η συναρτηση που θα καλει την οποια
// συναρτηση εχουμε φτιαξει για να κανει render τα γραφικα που εχουμε προγραμματισε// Αυτη ειναι η συναρτηση που θετει το προγραμμα σε εναν αεναο βρογχο, για να μενει το παραθυρο ανοικτ

2) Παραδειγμα της συναρτηση renderScene

void renderScene(void) {
   glClearColor(0.0, 0.0, 0.0, 0.0);   
   glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
   float colorVector[3];
   colorVector[0]=0.65;colorVector[1]=0.65;colorVector[2]=0.65;
   
   glBegin(GL_TRIANGLES);               // Start Drawing A Triangle
   glColor3f(1.0f,0.0f,0.0f);         // Set Top Point Of Triangle To Red
   glVertex3f( 0.0f, 1.0f, 0.0f);         // First Point Of The Triangle
   glColor3f(0.0f,1.0f,0.0f);         // Set Left Point Of Triangle To Green
   glVertex3f(-1.0f,-1.0f, 0.0f);         // Second Point Of The Triangle
   glColor3f(0.0f,0.0f,1.0f);         // Set Right Point Of Triangle To Blue
   glVertex3f( 1.0f,-1.0f, 0.0f);         // Third Point Of The Triangle
   glEnd();   
   
   glFlush();
}

Αυτη ειναι η συναρτηση, η οποια χρησιμοποιει-καλει η glutDisplayFunc(renderScene). Μεσα εδω κανουμε οτι θελουμε. Στην περιπτωση μας ζωγραφιζουμε ενα τριγωνο

3) Προσοχη και SOS: Επειδη εφαγα μια πικρα μεχρι να καταλαβω τι γινεται, γραφω τα παρακατω τα οποια ειναι εμπειρικα και δεν ξερω αν ισχυουν π.χ. στα win, η αν αλλαζουν πολυ απλα με τιποτα εντολες.

Οταν ανοιγεις ενα παραθυρο σε OpenGL, το σημειο (0,0) θεωρειται το ΚΕΝΤΡΙΚΟ ΣΗΜΕΙΟ της εικονας. Επισης οι αποστασεις ειναι κανονικοποιημενες. Αρα ολο το παραθυρο εχει μεγεθος [-1,1]. Αν γραψετε ενα σημειο
glVertex3(4.0, 3.0, 0.3) ή καποιο σχήμα που το περιεχει δεν θα σας το απεικονισει. Θα πρεπει να το κανονικοποιησετε.

4) Επισης SOS: στο τελος καθε μπλοκ εντολων που σχεδιαζουν κατι
π.χ.
glBEGIN(GL_TRIANGLES)
...
glEnd();
αμεσως μετα βαζεις την εντολη glFlush(). Αυτη η εντολη δινει σημα, οτι εχει σχεδιαστει αν εμφανιστει, ακομη και αν δεν ειανι ολοκληρωμενο. Απ οσο διαβασα ενναλακτικη ειναι η glFinalize(), που περιμενει πρωτα σημα οτι εχει ολοκληρωθει και μετα το εμφανιζει.


Title: Re: Απορίες σε OpenGL
Post by: Aurelius on November 27, 2007, 13:22:33 pm
Τωρα οι αποριες μου:

1) Αν δεν θελω το σημειο (0,0) να ειναι το κεντρικο σημειο του παραθυρου, αλλα το πανω αριστερα για παραδειγμα(ή οποιοδηποτε αλλο), αυτο αλλαζει? Μηπως αλλαζει με την glTranslateF(...) ή αυτη απλα μετακινει σχήματα???

2) Αν θελω να σχηματισω ένα τετραγωνο(ή οποιοδηποτε σχημα), που να εχει π.χ. κοκκινο περιγραμμα και πρασινο περιεχομενο πρεπει να κανω render 3 φορες τα γραφικα. Μια για να σχεδιασω το τετραγωνο με ορισμα GL_FILL και μια με GL_LINE ???


Title: Re: Απορίες σε OpenGL
Post by: Verminoz on November 27, 2007, 13:34:33 pm
Λοιπόν, όποιος ασχοληθεί με OpenGL αυτό πρέπει να είναι μία από τις βίβλους του:
http://www.opengl.org/sdk/docs/man/

Η glTranslate πολλαπλασιάζει τον "τρέχοντα" πίνακα με τους συντελεστές που του δίνεις! Τρέχοντας πίνακας είναι ο πίνακας που έχεις φορτώσει για επεξεργασία. Στο OpenGL υπάρχει ο Projection Matrix και ο Modelview Matrix. Ο ένας αφορά την προβολή του 3D σκηνικού και ο δεύτερος το ίδιο το σκηνικό. Αλλάζουν με αυτές τις εντολές:
----
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
-----
glMatrixMode(GL_PROJECTION);
glLoadIdentity();


Το σχήμα που λες πως το φτιάχνεις? Με τις εντολές?


Title: Re: Απορίες σε OpenGL
Post by: Aurelius on November 27, 2007, 13:39:53 pm
Ποιο σχημα εννοεις??? Το τετραγωνο?? Ναι με εντολες το κανω.

Αλλες ερωτησεις...

1)Αν θες να ειναι κανονικοποημενες οι αποστασεις γινεται κατι???

2) Και ακομη μια ερωτηση: Η εντολη glPolygonMode δουλευει για ολα τα πολυγωνα, δηλ και ας γραφουμε

glBegin(GL_TRIANGLES), glBegin(GL_QUAD_STRIP) ...

η μονο αν βαζουμε

glBegin(GL_POLYGON)???



Title: Re: Απορίες σε OpenGL
Post by: Γιώργος on May 16, 2009, 21:01:02 pm
Θα μπορούσε κάποιος που "το 'χει το αντικείμενο" να με δώσει κάποιο σοβαρό παράδειγμα πώς λειτουργεί η $#&$^&#$&#^#$^@#*$%#%$@($@#(*&!@#@&$#(*!$^@#!$# ortho2d; :-\

Στο google δεν βρίσκω ΑΠΟΛΥΤΩΣ τίποτα χρήσιμο, εκτός από το "gluOrtho2D sets up a two-dimensional orthographic viewing region." το οποίο τι να πω... τώρα με φώτισε. :P

Προσπαθώ να αναπαραστήσω ένα χώρο με τετραγωνικά cells (ας πούμε να φτιάξω έναν maze) και κάπου πήρε το μάτι μου ότι αυτή είναι που θα μου κάνει τη δουλειά.

Ευχαριστώ. :)



ps: utter n00b here, so handle with care :P

ps2: εκλιπαρώ την όποια βοήθεια γιατί είμαι σε στάδιο απόγνωσης :'( :P


Title: Re: Απορίες σε OpenGL
Post by: pmousoul on May 16, 2009, 21:09:33 pm

ε πάρε και 'συ κανένα βιβλίο από την βιβλιοθήκη του πανεπιστημίου να ξεστραβωθείς.. :)


Title: Re: Απορίες σε OpenGL
Post by: Γιώργος on May 16, 2009, 21:10:57 pm
Έχεις κάτι στα υπόψην; :)


Title: Re: Απορίες σε OpenGL
Post by: pmousoul on May 17, 2009, 01:55:58 am
Έχεις κάτι στα υπόψην; :)

Βασικά είχε πάρει το μάτι μου πρόσφατα ένα κόκκινο βιβλίο στην βιβλιοθήκη του τμήματος.. αλλά δεν θυμάμαι τίτλο. :(

Ρίξε και ένα βλέφαρο στην Αλεξάνδρεια. :)


Title: Re: Απορίες σε OpenGL
Post by: Γιώργος on May 17, 2009, 02:11:09 am
Correct. ;)
Με το συγκεκριμένο πάντως βρήκα άκρη. Βασικά είχα κολλήσει σε κάποια πολύ trivial matters... τώρα βρίσκω το δρόμο μου. :P


Τώρα θα χρωματίσουμε τον κύκλο. ^cool^


Title: Re: Απορίες σε OpenGL
Post by: pmousoul on May 17, 2009, 02:12:11 am

ωχ.. :P