Inglor Μάϊος 24, 2012 #21 Κοινοποίηση Μάϊος 24, 2012 Σε ευχαριστώ ειλικρινά για την βοήθεια σου,όμως δεν δείχνουν κάτι παραπάνω.Μάλλον καλύτερα δεν εξηγούν απ'άυτά που ξέρω.Αν βρω άκρη, μακάρι! ,θα ενημερώσω. Αν υπάρχει κάποιος να βοηθήσει,θα μαι ευγνώμων γιατί είναι μεγάλη ανάγκη. Το OpenGL είναι δύσκολο γενικά και έχει πολλά μαθηματικά. Αυτό δεν θα αλλάξει γιατί όλα τα σχήματα στον σχεδιάζονται από σημεία στον χώρο και όλες οι κινήσεις πραγματοποιούνται με μετασχηματισμούς. Έχεις πολύ θεωρία από πίσω και όπως ανέφεραν ήδη αρκετά μαθηματικά. Γνώμη μου έιναι να αρχίσεις από κάτι απλό όπως ένα τρίγωνο σε 2 διαστάσεις και αγότερα να περάσεις σε 3 για να καταλαβεις τι παίζει. Αν θυμάμαι καλά (έχουν περάσει και 10 χρόνια από τότε) για να κουνήσεις ένα αντικείμενο πρέπει: - Να πάρεις όλα τα σημεία του αντικειμένου και να υπολογίσεις στο buffer το νέο σημείο - Να σχηματίσεις το αντικείμενο στο buffer - Να αντιστρέψεις το master και το background buffer (Συγνώμη για την ορολογία, πραγματικά δεν το θυμάμαι πως λέγονται) Πιθανών μετά από τόσα χρόνια κάτι άλλο να έχει βγει για να σοθ κάνει τη ζωή πιο εύκολη. Επίσης νομίζω ότι μπορείς να σχεδιάσεις με κάποιο άλλο πρόγραμμα το αντικείμενο και μετά να το κάνεις import, διαβασε σχετικά για 'importing 3d objects to openGL' στο internet Ένα βασικό tutorial για OpenGL που φαντάζομαι το ξέρεις είναι: NeHe Productions - Everything OpenGL Εγώ από εκεί έμαθα και έκανα κάτι απλό γενικά (όχι αεροπλάνο) Υ.Γ.: Υπάρχουν και wrappers / libraries που σου δίνουν εύκολα εργαλεία που πατάνε πάνω στην OpenGL. Απλά δεν τα είχα χρησιμοποιήσει τότε (ίσως και να μην υπήρχαν) Link to comment Share on other sites More sharing options...
theoamd Μάϊος 24, 2012 #22 Κοινοποίηση Μάϊος 24, 2012 Εγώ(όντας προφανώ άσχετος από opengl) θα ήθελα να θέσω ένα τελείως αρχάριο ερώτημα:είναι δουλέψουμε opengl σε dev c++?Αν ναι,τι απαιτείται(ποιες βιβλιοθήκες κλπ) και πως τις κατεβάζουμε? :suicide2: Link to comment Share on other sites More sharing options...
nucleus Μάϊος 24, 2012 #23 Κοινοποίηση Μάϊος 24, 2012 Getting Started - OpenGL.org Link to comment Share on other sites More sharing options...
SirDiman Μάϊος 24, 2012 #24 Κοινοποίηση Μάϊος 24, 2012 σε dev c++?Αυτο ειναι για κλαματα, δες codeblocks που ειναι open source Link to comment Share on other sites More sharing options...
theoamd Μάϊος 24, 2012 #25 Κοινοποίηση Μάϊος 24, 2012 Καλά, δίγουρα δεν κάνει πλέον ούτε για εκπαιδευτικούς σκοπούς, είναι πολύ αδύναμο, ειδικά ο compiler του είναι ότι χειρότερο. Μάλλον codeblocks θα συμβεί Link to comment Share on other sites More sharing options...
theoamd Μάϊος 26, 2012 #26 Κοινοποίηση Μάϊος 26, 2012 Μπορούμε να βρούμε ένα tutorial για δημιουργία solar system με κίνηση??? Κάτι τέτοιο έχω στο μυαλό μου Link to comment Share on other sites More sharing options...
mhche Μάϊος 26, 2012 Author #27 Κοινοποίηση Μάϊος 26, 2012 Λοιπόν,μετά απο διάβασμα κατανόησα κάποια και κάποια άλλα όχι βέβαια Βρήκα έναν πολύ ενδιαφέρον κώδικα απο ένα ρολόι,τον οποίο κατάλαβα μερικώς.Μήπως υπάρχει κάποιος να μου εξηγήσει μερικά πράγματα; Είναι σε c++ . Δεν τον ποστάρω γιατί δεν ξέρω αν γίνεται κάτι με δικαιώματα κλπ. Link to comment Share on other sites More sharing options...
nucleus Μάϊος 27, 2012 #28 Κοινοποίηση Μάϊος 27, 2012 oυυυυ C++ ?Post post Link to comment Share on other sites More sharing options...
mhche Μάϊος 27, 2012 Author #29 Κοινοποίηση Μάϊος 27, 2012 Ωραία,παραθέτω τον κώδικα και τις απορίες μου.Ο κώδικας ξαναλέω δεν είναι δικός μου,είναι σχεδόν αυτούσιος εκτός απο μία συνάρτηση μενού που δεν πρόκειτε να χρησιμοποιήσω και την έχω βγάλει.Συγχωρήστε με εκ των προτέρων αν είναι ολίγον τι "χαζές" οι απορίες μου.Τις έχω βάλει σε σχόλια δίπλα σε κάθε γραμμή που δεν καταλαβαίνω.Ευχαριστώ.#include <GL/glut.h> #include <string.h>#include <stdio.h>#include <stdlib.h>#include <math.h>#include <time.h> //προσπερνάμε τα include// define glu objectsint about_int=0; //ποια η χρησιμότητα αυτής της μεταβλητής;GLUquadricObj *Cylinder; //ορίζουμε ένα σχήμα κυλίνδρουGLUquadricObj *Disk; //ορίζουμε ένα σχήμα δίσκουstruct tm *newtime; //απ'ότι ξέρω με αυτόν τον τρόπο ορίζουμε τελεστή για την ώραtime_t ltime; //int M_TWOPI=0; //μια μεταβλητή που χρησιμοποιείται μόνο μια φορά στη συνάρτηση TimeEvent και δεν καταλαβαίνω την χρησιμότητα της και γιατί δεν βάζουμε κατευθίαν =0GLfloat rx, ry, rz, angle; // lighting/*GLfloat LightAmbient[]= { 0.5f, 0.5f, 0.5f, 1.0f };GLfloat LightDiffuse[]= { 0.5f, 0.5f, 0.5f, 1.0f };GLfloat LightPosition[]= { 5.0f, 25.0f, 15.0f, 1.0f };GLfloat mat_specular[] = { 1.0, 1.0, 1.0, 1.0 }; */ ορίζουμε τους φωτισμούςstatic int light_state = 1; // light on = 1, light off = 0 μεταβλητή κατάστασης φωτισμούstatic int view_state = 1; // Ortho view = 1, Perspective = 0 μεταβλητή κατάστασης προβολήςvoid Sprint( float x, float y, char *st) //αυτή η συνάρτηση απ'οτι έχω καταλάβει βάζει κείμενο στην οθόνη μας{ int l,i; l=strlen( st ); glRasterPos3f( x, y, -1); for( i=0; i < l; i++) //εδώ γιατί χρησιμοποιούμε την for αφού είναι για μία φορά; { glutBitmapCharacter(GLUT_BITMAP_TIMES_ROMAN_24, st[i]); }}static void TimeEvent(int te) //εδώ δεν έχω καταλάβει πολλά πράγματα{ rx = 30 * cos( angle ); //τι ακριβώς κάνουν αυτές οι μεταβλητές; ry = 30 * sin( angle ); // rz = 30 * cos( angle ); // angle += 0.01; //γιατί προσθέτουμε 0.01 στην γωνία; if (angle > M_TWOPI) angle = 0; //ποιος ο λόγος της M_TWOPI; και δεν βάζουμε κατευθίαν =0; glutPostRedisplay(); glutTimerFunc( 100, TimeEvent, 1);}void init(void) //εδώ ορίζουμε φωτισμούς και σχήματα{ glClearColor (0.0, 0.0, 0.0, 0.0); glShadeModel (GL_SMOOTH); glEnable(GL_DEPTH_TEST); // Lighting is added to scene glLightfv(GL_LIGHT1 ,GL_AMBIENT, LightAmbient); glLightfv(GL_LIGHT1 ,GL_DIFFUSE, LightDiffuse); glLightfv(GL_LIGHT1 ,GL_POSITION, LightPosition); glEnable(GL_LIGHTING); glEnable(GL_LIGHT1); Cylinder = gluNewQuadric(); gluQuadricDrawStyle( Cylinder, GLU_FILL); gluQuadricNormals( Cylinder, GLU_SMOOTH); gluQuadricOrientation( Cylinder, GLU_OUTSIDE); gluQuadricTexture( Cylinder, GL_TRUE); Disk = gluNewQuadric(); gluQuadricDrawStyle( Disk, GLU_FILL); gluQuadricNormals( Disk, GLU_SMOOTH); gluQuadricOrientation( Disk, GLU_OUTSIDE); gluQuadricTexture( Disk, GL_TRUE);}void Draw_gear( void ) //εδώ σχεδιάζει ένα γρανάζι,αλλά γιατί το κάνουμε αυτο;{ int i; glPushMatrix(); gluCylinder(Cylinder, 2.5, 2.5, 1, 16, 16); gluDisk(Disk, 0, 2.5, 32, 16); glTranslatef(0,0,1); gluDisk(Disk, 0, 2.5, 32, 16); glPopMatrix(); for( i = 0; i < 8; i++) { glPushMatrix(); glTranslatef( 0.0, 0.0, 0.50); glRotatef( (360/8) * i, 0.0, 0.0, 1.0); glTranslatef( 3.0, 0.0, 0.0); glutSolidCube( 1.0 ); glPopMatrix(); }}void Draw_clock( GLfloat cx, GLfloat cy, GLfloat cz ) //εδώ σχεδιάζουμε το ρολοι{ int hour_ticks , sec_ticks; glPushMatrix(); glTranslatef(cx,cy,cz); glRotatef( 180, 1.0, 0.0, 0.0); /*glPushMatrix(); // Draw large wire cube (outside of disk clock) glColor3f(1.0, 1.0, 1.0); glTranslatef( 0.0, 0.0, 6.0); glutWireCube(14.0); glPopMatrix();*/ glPushMatrix(); // Draw clock face glTranslatef( 0, 0, 1.0); gluDisk(Disk, 0, 6.75, 32, 16); glPopMatrix(); glPushMatrix();// Draw hour hand glColor3f(1.0, 0.5, 0.5); glTranslatef( 0, 0, 0.0); glRotatef( (360/12) * newtime->tm_hour + (360/60) * (60 / (newtime->tm_min+1)), 0.0, 0.0, 1.0); glPushMatrix(); glTranslatef(0.0, 0.0, 2.0); Draw_gear(); glPopMatrix(); glRotatef( 90, 1.0, 0.0, 0.0); gluCylinder(Cylinder, 0.75, 0, 4, 16, 16); glPopMatrix(); glPushMatrix();// Draw minute hand glColor3f(1.0, 0.5, 1.0); glTranslatef( 0, 0, 0.0); glRotatef( (360/60) * newtime->tm_min, 0.0, 0.0, 1.0); glPushMatrix(); glTranslatef(0.0, 0.0, 3.0); glScalef(0.5, 0.5, 1.0); Draw_gear(); glPopMatrix(); glRotatef( 90, 1.0, 0.0, 0.0); gluCylinder(Cylinder, 0.5, 0, 6, 16, 16); glPopMatrix(); glPushMatrix();// Draw second hand glColor3f(1.0, 0.0, 0.5); glTranslatef( 0, 0, -0.0); glRotatef( (360/60) * newtime->tm_sec, 0.0, 0.0, 1.0); glPushMatrix(); glTranslatef(0.0, 0.0, 4.0); glScalef(0.25, 0.25, 1.0); Draw_gear(); glPopMatrix(); glRotatef( 90, 1.0, 0.0, 0.0); gluCylinder(Cylinder, 0.25, 0, 6, 16, 16); glPopMatrix(); for(hour_ticks = 0; hour_ticks < 12; hour_ticks++) //δεν νομίζω να δουλεύει γιατί οι δείκτες δεν γυρνάνε { glPushMatrix();// Draw next arm axis. glColor3f(0.0, 1.0, 1.0); // give it a color glTranslatef(0.0, 0.0, 0.0); glRotatef( (360/12) * hour_ticks, 0.0, 0.0, 1.0); glTranslatef( 6.0, 0.0, 0.0); glutSolidCube(1.0); glPopMatrix(); } for(sec_ticks = 0; sec_ticks < 60; sec_ticks++) //ομοίως δεν νομίζω να δουλεύει γιατί οι δείκτες δεν γυρνάνε { glPushMatrix(); glTranslatef(0.0, 0.0, 0.0); glRotatef( (360/60) * sec_ticks, 0.0, 0.0, 1.0); glTranslatef(6.0, 0.0, 0.0); glutSolidCube(0.25); glPopMatrix(); } glPopMatrix();}void num() //εδώ βάζουμε νούμερα στο ρολόι μας{ if(view_state == 1) { glColor3f( 0.0, 0.0, 1.0); Sprint(-6.2,-0.2,"9"); //counting from center Sprint(-0.2,-6.2,"6"); Sprint(-0.4,5.7,"12"); Sprint(5.8,-0.2,"3"); }}void about() //πληροφορίες για το ρολόι μας{ //glClear(GL_COLOR_BUFFER_BIT); glColor3f( 1.0, 1.0, 1.0); Sprint(-5,-2,"This project implements the clock"); Sprint(-5,-2.8," Both Wall clock and digit clock"); Sprint(-5,-3.6," is displayed"); Sprint(-5,-4.4," Clock shows the local time"); Sprint(-5,-5.2," fetching from computer"); //glFlush(); }void display_clock() //απεικόνιση του ρολογιού{ time(<ime); // Get time newtime = localtime(<ime); // Convert to local time glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // easy way to put text on the screen. glMatrixMode (GL_PROJECTION); glLoadIdentity(); glOrtho(-8.0, 8.0, -8.0, 8.0, 1.0, 60.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glDisable(GL_LIGHTING); glDisable(GL_COLOR_MATERIAL); // Put view state on screen glColor3f( 1.0, 1.0, 1.0); if (view_state == 0 && about_int==0) { Sprint(-3, -4, "Perspective view"); } else if (view_state != 0 && about_int==0) { Sprint(-2, -4, "Ortho view"); } else { about(); } Sprint(-4,-7.7, asctime(newtime)); // Turn Perspective mode on/off if (view_state == 0) { glMatrixMode (GL_PROJECTION); glLoadIdentity(); gluPerspective(60.0, 1, 1.0, 60.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); gluLookAt( rx, 0.0, rz, 0.0, 0.0, -14.0, 0, 1, 0); } if (light_state == 1) { glEnable(GL_LIGHTING); glEnable(GL_COLOR_MATERIAL); // Enable for lighing }else { glDisable(GL_LIGHTING); glDisable(GL_COLOR_MATERIAL); // Disable for no lighing }Draw_clock( 0.0, 0.0, -14.0);num();glutSwapBuffers();}void display(void){ glClear(GL_COLOR_BUFFER_BIT); display_clock(); glFlush();}void reshape (int w, int h){ glViewport (0, 0, (GLsizei) w, (GLsizei) h); glMatrixMode (GL_PROJECTION); glLoadIdentity ();}int main(int argc, char** argv){ glutInit(&argc, argv); glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB); glutInitWindowSize (500, 500); glutInitWindowPosition (50, 50); glutCreateWindow (argv[0]); glutSetWindowTitle("GLclock"); init (); glutDisplayFunc(display); glutReshapeFunc(reshape); glutTimerFunc( 10, TimeEvent, 1); glutMainLoop(); return 0;} Link to comment Share on other sites More sharing options...
nucleus Μάϊος 27, 2012 #30 Κοινοποίηση Μάϊος 27, 2012 wall of text incomingggg!!!! void Sprint( float x, float y, char *st) //αυτή η συνάρτηση απ'οτι έχω καταλάβει βάζει κείμενο στην οθόνη μας{ int l,i; l=strlen( st ); glRasterPos3f( x, y, -1); for( i=0; i < l; i++) //εδώ γιατί χρησιμοποιούμε την for αφού είναι για μία φορά; { glutBitmapCharacter(GLUT_BITMAP_TIMES_ROMAN_24, st); } Κάνει for για να πάρει όλους τους χαρακτήρες του string st.Δέχεται σαν όρισμα σε float (δεκαδικός) τις συντεταγμένες x και y και το string st.Το δείχνει με το for χαρακτήρα χαρακτρήρα όμως. Το Μ_ΤWOPI φαίνεται να είναι από εδώ Old Nabble - Graphviz - Interest - need help producing a circular graph with twopi or dot twopi is its own layout program. It is a radial layout. That is, onenode is placed in the center; the nodes connected to the center node are placed on a circle around it; any remaining nodes connected to those nodes are placed on the next circle,; and so on. It can be a very effective layout in certain contexts. It is very fast, and can be used on large graphs. The main problem with the algorithm is that it is very sensitive to the choice of the center node. Choosing one node for the center will produce a beautiful layout. Choosing another node will create a mess. The program uses the same rendering parameters as the rest of Graphviz. The attributes specific to twopi, which affect the layout, can be found by looking for "twopi" in Node, Edge and Graph Attributes ΤimeEvent glutTimerFunc void glutTimerFunc(unsigned int msecs, void (*func)(int value), value); Eσένα την καλεί ως εξής glutTimerFunc( 10, TimeEvent, 1); στην ουσία κάθε 10 msec καλείται η TimeEvent με όρισμα 1 Η timevent υποθέτω ότι είναι για να δει αν πρέπει να αλλάξει τον χρόνο (Δηλαδή να κάνει redraw) επίσης τα rx,ry,rz μου φέρνουν σαν πολικές συντεταγμένες.Από wikipedia Η σχέση μεταξύ πολικών (r,θ) και καρτεσιανών (x,y) συντεταγμένων στο επίπεδο δίνεται από τις παρακάτω σχέσεις μετατροπής: r = 30 θ = angle.Το ρολοί είναι 2d για αυτό χρησιμοποιεί πολικές.Έχεις μια ακτίνα υποθέτω 30 και το angle (γωνία) από ένα σταθερό "δείκτη" πχ από το κέντρο του ρολογιού και στις 12 η ώρα.Το opengl είναι 3d άρα x,y,z. Link to comment Share on other sites More sharing options...
theoamd Μάϊος 27, 2012 #31 Κοινοποίηση Μάϊος 27, 2012 [MENTION=1215]nucleus[/MENTION] Μπορούμε να βρούμε αυτό που αναφέρω παραπάνω?Έχω ψάξει αλλά δεν βρίσκω κάτι αντίστοιχο Link to comment Share on other sites More sharing options...
nucleus Μάϊος 27, 2012 #32 Κοινοποίηση Μάϊος 27, 2012 simulation of solar system using OpenGLOpen Source & Freedom: Simple Solar System in OpenGLαυτα δεν δουλεύουν? Link to comment Share on other sites More sharing options...
theoamd Μάϊος 27, 2012 #33 Κοινοποίηση Μάϊος 27, 2012 Το δεύτερο το βρήκα κι εγώ αλλα δεν μου κάνουν. Θέλω να υπάρχουν αστέρια και τροχιές, κάπως έτσι αν σε βοηθάει περισσότερο: Link to comment Share on other sites More sharing options...
nucleus Μάϊος 27, 2012 #34 Κοινοποίηση Μάϊος 27, 2012 Για τα αστέρια αν είναι στατικά βρες ένα απλό texture και βάλτο σαν "background" στην σκηνή σου.Αν οχι τα προσθέτεις οπως τους πλανήτες αλλά με μικρότερο scale.Για τα orbits απο οτι λέει στο δεύτερο παράδειγμα η void generateCircle() function is doing that... Δεν τα δείχνει καθόλου ή τα βγάζει σε λάθος σημείο?Από οτι βλέπω προσθέτει για 3 μόνο πλανήτες.Για όλους θα πρέπει να βάλεις το loop όσες φορές λείπει. Link to comment Share on other sites More sharing options...
theoamd Μάϊος 27, 2012 #35 Κοινοποίηση Μάϊος 27, 2012 Έψαξα πολύ περισσότερο και τελικά βρήκα κάτι πολύ κοντά σ'αυτό που θέλω, καμία σχέση ηλαδή με το κοινό μας παράδειγμα. Τα αστέρια τα έβαλα σαν απλά GL_POINTS και τις τροχιές κανονικά orbits, με μόνη διαφορά ότι φτιάχνω κάθε φορά καινούριο κύκλο κι αυτό είναι κάπως κουραστικό. Έπρεπε να χρησιμοποιήσω struct, αλλά έχω τελειώσει σχεδόν του 6/8 πλανήτες. Το θέμα είναι πως θα βάλω bitmap textures Link to comment Share on other sites More sharing options...
nucleus Μάϊος 27, 2012 #36 Κοινοποίηση Μάϊος 27, 2012 To πρώτο πράδειγμα απο το ποστ #32 λέει πως. LoadGLTextures(); // Load the textures glEnable(GL_TEXTURE_2D);GLvoid LoadGLTextures(GLvoid) { // Stores the texture Image *imagesun; Image *image[9]; int i; // Allocate space for texture imagesun = (Image *) malloc(sizeof(Image)); for(i=0;i<9;i++) image[i] = (Image *) malloc(sizeof(Image)); if (imagesun==NULL || image[1] == NULL || image[2] == NULL || image[3] == NULL ||image[4] == NULL||image[5] == NULL||image[6] == NULL||image[7] == NULL||image[8] == NULL) { //checking for error while allocating space printf("Error allocating space for image"); exit(0); } if (!ImageLoad("sun.bmp", imagesun)) { //loading images(sun,planets,moons) exit(1); } if (!ImageLoad("mercury.bmp", image[1])) { exit(1); } if (!ImageLoad("venus.bmp", image[2])) { exit(1); } if (!ImageLoad("earth.bmp", image[3])) { exit(1); } if (!ImageLoad("mars.bmp", image[4])) { exit(1); } if (!ImageLoad("jupiter.bmp", image[5])) { exit(1); } if (!ImageLoad("saturn.bmp", image[6])) { exit(1); } if (!ImageLoad("uranus.bmp", image[7])) { exit(1); } if (!ImageLoad("neptune.bmp", image[8])) { exit(1); } glGenTextures(3, &texture[0]); // create Texture glBindTexture(GL_TEXTURE_2D, texture[0]); // 2d texture (x and y size) glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST); // cheap scaling when image bigger than texture glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST); // cheap scaling when image smalled than texture // 2d texture, level of detail 0 (normal), 3 components (red, green, blue), x size from image, y size from image, glTexImage2D(GL_TEXTURE_2D, 0, 3, imagesun->sizeX, imagesun->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, imagesun->data); // border 0 (normal), rgb color data, unsigned byte data, and finally the data itself. for(i=1;i<9;i++) { glGenTextures(3, &texture[i]); // texture 2 (linear scaling) glBindTexture(GL_TEXTURE_2D, texture[i]); // 2d texture (x and y size) glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); // scale linearly when image bigger than texture glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); // scale linearly when image smalled than texture glTexImage2D(GL_TEXTURE_2D, 0, 3, image[i]->sizeX, image[i]->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, image[i]->data); // texture 3 (mipmapped scaling) }}int ImageLoad(char *filename, Image *image) { FILE *file; unsigned long size; // size of the image in bytes. unsigned long i; // standard counter. unsigned short int planes; // number of planes in image (must be 1) unsigned short int bpp; // number of bits per pixel (must be 24) char temp; // used to convert bgr to rgb color. // Checkin for the file exists if ((file = fopen(filename, "rb"))==NULL) { printf("File Not Found : %s\n",filename); return 0; } // Skip to bmp header fseek(file,18, SEEK_CUR); // read width if ((i = fread(&image->sizeX, 4, 1, file)) != 1) { printf("Error reading width from %s.\n", filename); return 0; } printf("Width of %s: %lu\n",filename, image->sizeX); //read the height if ((i = fread(&image->sizeY,4,1,file)) != 1) { printf("Error reading height from %s.\n", filename); return 0; } printf("Height of %s: %lu\n", filename, image->sizeY); size = image->sizeX * image->sizeY * 3; // read the planes if ((fread(&planes, 2, 1, file)) != 1) { printf("Error reading planes from %s. \n", filename); return 0; } if (planes != 1) { printf("Planes from %s is not 1: %u\n", filename, planes); return 0; } // read the bpp if ((i = fread(&bpp, 2, 1, file)) != 1) { printf("Error reading bpp from %s. \n", filename); return 0; } if (bpp != 24) { printf("Bpp from %s is not 24: %u\n", filename, bpp); return 0; } // seek past the rest of the bitmap header fseek(file, 24, SEEK_CUR); // Read the data image->data = (char *) malloc(size); if (image->data == NULL) { printf("Error allocating memory for colour-corrected image data"); return 0; } if ((i = fread(image->data,size,1,file)) != 1) { printf("Error reading image data from %s.\n", filename); return 0; } // reverse all of the colours bgr => rgb) for (i=0;i<size;i+=3) { temp = image->data[i]; image->data[i] = image->data[i+2]; image->data[i+2] = temp; } return 1;} Link to comment Share on other sites More sharing options...
mhche Μάϊος 28, 2012 Author #37 Κοινοποίηση Μάϊος 28, 2012 [MENTION=1215]nucleus[/MENTION] σε ευχαριστώ πολύ.Μήπως μπορείς και να μου εξηγήσεις γιατί κάνουμε το angle += 0.01; Η angle θα είναι πάντα 0;Καμία ιδέα γιατί δεν γυρνάν οι δείκτες; Η βοηθειά σου είναι πολύτιμη και πάλι σε ευχαριστώ. Link to comment Share on other sites More sharing options...
nucleus Μάϊος 28, 2012 #38 Κοινοποίηση Μάϊος 28, 2012 To angle δεν είναι πάντα 0.Η angle καθορίζει την κίνηση των δεικτών.προσθέτει το +0.01 για να δείξει την κίνηση των δευτερολέπτων υποθέτω.Γιατί δεν γυρνάνε οι δείκτες?void display_clock() //απεικόνιση του ρολογιού{ time(<ime); // Get time newtime = localtime(<ime); // Convert to local timeΕδώ παίρνει την ώρα του συστήματος και την δείχνει σίγουρα το κάνει σωστά αυτό?ίσως να χρειάζεται αλλαγές εδώ (δεν έχω ιδέα ποιές συναρτήσεις στην C παίρνουν ώρα συστήματος) Link to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.