Kod: Zaznacz cały
#include <cstdlib>
#include <iostream>
#include <GL/glut.h>
#include "pomoc/glpomoc.h"
#include <time.h>
using namespace std;
enum
{
FULL_WINDOW,
ASPECT_1_1,
ORTHO,
PERSP,
EXIT
};
int skala = ASPECT_1_1;
int rzut = PERSP;
double fovy = 90;
float alfa1 =0.0f;
float alfa2 =0.0f;
int godzina1, minuta1, sekunda1;
char godzina [80];
char minuta [80];
char sekunda[80];
time_t czas;
struct tm *data;
float _alfa1 =0;
float _alfa2 =0;
float _alfa3 =0;
float anglek , angle0 , angle1 ,angle2,angle3, angle4 = 0.0f;
GLPFrame frameCamera;
void TimerFunction (int value)
{
glutPostRedisplay();
glutTimerFunc(10,TimerFunction,1);
}
void Ustawienia()
{
glClearColor(0.0f,0.0f,0.0f,0.5f);
glShadeModel(GL_SMOOTH);
glPolygonMode(GL_FRONT,GL_FILL);
glPolygonMode(GL_BACK,GL_FILL);
glpInitFrame(&frameCamera);
glEnable(GL_DEPTH_TEST);
glpMoveFrameForward(&frameCamera,-100.0);
glpMoveFrameUp(&frameCamera,1.0);
}
void Keyboard (unsigned char key, int x, int y)
{
switch(key)
{
case 'w': alfa1 -=5.0f; break;
case 's': alfa1 +=5.0f; break;
case 'a': alfa2 -=5.0f; break;
case 'd': alfa2 +=5.0f; break;
}
glutPostRedisplay();
}
void SpecialKey(int key, int x, int y)
{
switch(key)
{
case GLUT_KEY_LEFT:
glpRotateFrameLocalY(&frameCamera,0.1); break;
case GLUT_KEY_RIGHT:
glpRotateFrameLocalY(&frameCamera,-0.1); break;
case GLUT_KEY_UP:
glpMoveFrameForward(&frameCamera,0.1); break;
case GLUT_KEY_DOWN:
glpMoveFrameForward(&frameCamera,-0.1); break;
case GLUT_KEY_PAGE_UP:
glpMoveFrameUp(&frameCamera,0.1); break;
case GLUT_KEY_PAGE_DOWN:
glpMoveFrameUp(&frameCamera,-0.1); break;
}
glutPostRedisplay();
}
void RysAktorow()
{
anglek+= 0.01f;
angle0+= 0.01f;
angle1+= 0.003f;
angle2+= 0.007f;
angle3+= 0.008f;
angle4+= 0.004f;
glColor3f(1.0f,1.0f,0.0f);
glRotatef(alfa1,1.0f,0.0f,0.0f);
glRotatef(alfa2,0.0f,1.0f,0.0f);
glutWireSphere(10.0,100,40);
glPushMatrix();
double r=20; //merkury
for(float i=0; i<2*M_PI; i+=0.01)
{
glBegin(GL_POINTS);
double x= r*sin(i);
double y = r*cos(i);
glColor3f(0.0f, 1.0f, 0.0f);
glVertex3f(x, y, 0);
glEnd();
}
glPopMatrix();
glPushMatrix();
double x0= r*sin(angle0);
double z0 = r*cos(angle0);
glTranslatef(x0,z0,0);
glutWireSphere(2.0,100,40);
glPopMatrix();
glPushMatrix();
double r1=30; //wenus
for(float i=0; i<2*M_PI; i+=0.01)
{
glBegin(GL_POINTS);
double x= r1*sin(i);
double y = r1*cos(i);
glColor3f(1.0f, 1.0f, 0.0f);
glVertex3f(x, y, 0);
glEnd();
}
glPopMatrix();
glPushMatrix();
double x1= r1*sin(angle1);
double z1 = r1*cos(angle1);
glTranslatef(x1,z1,0);
glutWireSphere(3.0,100,40);
glPopMatrix();
glPushMatrix();
double r2=40; //ziemia
for(float i=0; i<2*M_PI; i+=0.01)
{
glBegin(GL_POINTS);
double x= r2*sin(i);
double y = r2*cos(i);
glColor3f(0.0f, 1.0f, 1.0f);
glVertex3f(x, y, 0);
glEnd();
}
glPopMatrix();
glPushMatrix();
double x2= r2*sin(angle2);
double z2 = r2*cos(angle2);
glTranslatef(x2,z2,0);
glutWireSphere(4.0,100,40);
double rk=5; //ksieżyc
for(float i=0; i<2*M_PI; i+=0.01)
{
glBegin(GL_POINTS);
double x= rk*sin(i);
double y = rk*cos(i);
glColor3f(1.0f, 1.0f, 1.0f);
glVertex3f(x, 0, y);
glEnd();
}
glPushMatrix();
double xk= rk*sin(anglek);
double zk = rk*cos(anglek);
glTranslatef(xk,0,zk);
glutWireSphere(1.0,100,40);
glPopMatrix();
glPopMatrix();
glPushMatrix();
double r3=50; //mars
for(float i=0; i<2*M_PI; i+=0.01)
{
glBegin(GL_POINTS);
double x= r3*sin(i);
double y = r3*cos(i);
glColor3f(1.0f, 1.0f, 0.0f);
glVertex3f(x, y, 0);
glEnd();
}
glPopMatrix();
glPushMatrix();
double x3= r3*sin(angle3);
double z3 = r3*cos(angle3);
glTranslatef(x3,z3,0);
glutWireSphere(3.0,100,40);
glPopMatrix();
glPushMatrix();
double r4=65; //jowisz
for(float i=0; i<2*M_PI; i+=0.01)
{
glBegin(GL_POINTS);
double x= r4*sin(i);
double y = r4*cos(i);
glColor3f(1.0f, 1.0f, 0.75f);
glVertex3f(x, y, 0);
glEnd();
}
glPopMatrix();
glPushMatrix();
double x4= r4*sin(angle4);
double z4 = r4*cos(angle4);
glTranslatef(x4,z4,0);
glutWireSphere(8.0,100,60);
glPopMatrix();
}
void Display()
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
//glPushMatrix();
//glTranslatef(0.0f,0.0f,-50.0f);
glpApplyCameraTransform(&frameCamera);
glPushMatrix();
RysAktorow();
glPopMatrix();
//glPopMatrix();
glFlush();
glutSwapBuffers();
}
void Reshape (int width, int height)
{
// obszar renderingu - całe okno
glViewport (0,0,width,height);
// wybór macierzy rzutowania
glMatrixMode (GL_PROJECTION);
// macierz rzutowania = macierz jednostkowa
glLoadIdentity ();
// obliczenie aspektu obrazu z uwzględnieniem
// przypadku, gdy wysokość obrazu wynosi 0
GLdouble aspect = 1;
GLfloat zakres = 200.0f;
GLfloat blisko = 1.0f;
GLfloat daleko = 200.0f;
// rzutowanie ortogonalne
if (rzut==ORTHO)
{
// skala 1:1
if (skala==ASPECT_1_1)
{
if (width < height && width > 0)
glOrtho (-zakres,zakres,-zakres*height/width,zakres*height/width,-zakres,zakres);
else
if (width >= height && height > 0)
glOrtho (-zakres*width/height,zakres*width/height,-zakres,zakres,-zakres,zakres);
}
else
glOrtho (-zakres,zakres,-zakres,zakres,-zakres,zakres);
}
// rzutowanie perspektywiczne
if (rzut==PERSP)
{
if (height > 0)
aspect = width/(GLdouble)height;
gluPerspective (fovy,aspect,blisko,daleko);
}
Display ();
}
void Menu (int value)
{
switch (value)
{
// obszar renderingu - całe okno
case FULL_WINDOW:
skala = FULL_WINDOW;
Reshape (glutGet (GLUT_WINDOW_WIDTH),glutGet (GLUT_WINDOW_HEIGHT));
break;
// obszar renderingu - aspekt 1:1
case ASPECT_1_1:
skala = ASPECT_1_1;
Reshape (glutGet (GLUT_WINDOW_WIDTH),glutGet (GLUT_WINDOW_HEIGHT));
break;
// rzutowanie ortogonalne
case ORTHO:
rzut=ORTHO;
Reshape (glutGet (GLUT_WINDOW_WIDTH),glutGet (GLUT_WINDOW_HEIGHT));
break;
// rzutowanie perspektywiczne
case PERSP:
rzut=PERSP;
Reshape (glutGet (GLUT_WINDOW_WIDTH),glutGet (GLUT_WINDOW_HEIGHT));
break;
// wyjście
case EXIT:
exit (0);
}
}
int main(int argc, char *argv[])
{
glutTimerFunc(10,TimerFunction,1);
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
glutInitWindowSize(800,600);
glutCreateWindow("Lab 4");
glutReshapeFunc(Reshape);
glutDisplayFunc(Display);
glutKeyboardFunc(Keyboard);
glutSpecialFunc(SpecialKey);
Ustawienia();
int MenuSkali = glutCreateMenu(Menu);
glutAddMenuEntry("Skalowanie pełne", FULL_WINDOW);
glutAddMenuEntry("Skalowanie 1:1", ASPECT_1_1);
int MenuRzutowania = glutCreateMenu(Menu);
glutAddMenuEntry("Rzutowanie prostokatne", ORTHO);
glutAddMenuEntry("Rzutowanie perspektywiczne", PERSP);
glutCreateMenu(Menu);
glutAddSubMenu("Skalowanie", MenuSkali);
glutAddSubMenu("Rzutowanie", MenuRzutowania);
glutAddMenuEntry("Wyjscie", EXIT);
glutAttachMenu(GLUT_RIGHT_BUTTON);
glutMainLoop();
return 0;
}
Kod: Zaznacz cały
COMPILER = g++
CCFLAGS = -g -lglut
main.o: main.cpp glframe.o glmatrix.o glloadtga.o glvector.o
${COMPILER} ${CCFLAGS} main.cpp glframe.o glmatrix.o glloadtga.o glvector.o -o prog
glframe.o: pomoc/glframe.c
${COMPILER} ${CCFLAGS} pomoc/glframe.c -c main.cpp
glmatrix.o: pomoc/glmatrix.c
${COMPILER} ${CCFLAGS} pomoc/glmatrix.c -c main.cpp
glloadtga.o: pomoc/glloadtga.c
${COMPILER} ${CCFLAGS} pomoc/glloadtga.c -c main.cpp
glvector.o: pomoc/glvector.c
${COMPILER} ${CCFLAGS} pomoc/glvector.c -c main.cpp
clean:
rm -rf *.o prog
Kod: Zaznacz cały
user@user-Latitude-E6410:~/GL FILES$ make
g++ -g -lglut main.cpp glframe.o glmatrix.o glloadtga.o glvector.o -o prog
/tmp/cc4Wb8X6.o: In function `TimerFunction(int)':
/home/user/GL FILES/main.cpp:36: undefined reference to `glutPostRedisplay'
/home/user/GL FILES/main.cpp:37: undefined reference to `glutTimerFunc'
/tmp/cc4Wb8X6.o: In function `Ustawienia()':
/home/user/GL FILES/main.cpp:42: undefined reference to `glClearColor'
/home/user/GL FILES/main.cpp:43: undefined reference to `glShadeModel'
/home/user/GL FILES/main.cpp:44: undefined reference to `glPolygonMode'
/home/user/GL FILES/main.cpp:45: undefined reference to `glPolygonMode'
/home/user/GL FILES/main.cpp:47: undefined reference to `glEnable'
/tmp/cc4Wb8X6.o: In function `Keyboard(unsigned char, int, int)':
/home/user/GL FILES/main.cpp:61: undefined reference to `glutPostRedisplay'
/tmp/cc4Wb8X6.o: In function `SpecialKey(int, int, int)':
/home/user/GL FILES/main.cpp:83: undefined reference to `glutPostRedisplay'
/tmp/cc4Wb8X6.o: In function `RysAktorow()':
/home/user/GL FILES/main.cpp:95: undefined reference to `glColor3f'
/home/user/GL FILES/main.cpp:97: undefined reference to `glRotatef'
/home/user/GL FILES/main.cpp:98: undefined reference to `glRotatef'
/home/user/GL FILES/main.cpp:100: undefined reference to `glutWireSphere'
/home/user/GL FILES/main.cpp:101: undefined reference to `glPushMatrix'
/home/user/GL FILES/main.cpp:105: undefined reference to `glBegin'
/home/user/GL FILES/main.cpp:108: undefined reference to `glColor3f'
/home/user/GL FILES/main.cpp:109: undefined reference to `glVertex3f'
/home/user/GL FILES/main.cpp:110: undefined reference to `glEnd'
/home/user/GL FILES/main.cpp:113: undefined reference to `glPopMatrix'
/home/user/GL FILES/main.cpp:115: undefined reference to `glPushMatrix'
/home/user/GL FILES/main.cpp:118: undefined reference to `glTranslatef'
/home/user/GL FILES/main.cpp:119: undefined reference to `glutWireSphere'
/home/user/GL FILES/main.cpp:120: undefined reference to `glPopMatrix'
/home/user/GL FILES/main.cpp:122: undefined reference to `glPushMatrix'
/home/user/GL FILES/main.cpp:126: undefined reference to `glBegin'
/home/user/GL FILES/main.cpp:129: undefined reference to `glColor3f'
/home/user/GL FILES/main.cpp:130: undefined reference to `glVertex3f'
/home/user/GL FILES/main.cpp:131: undefined reference to `glEnd'
/home/user/GL FILES/main.cpp:134: undefined reference to `glPopMatrix'
/home/user/GL FILES/main.cpp:135: undefined reference to `glPushMatrix'
/home/user/GL FILES/main.cpp:138: undefined reference to `glTranslatef'
/home/user/GL FILES/main.cpp:139: undefined reference to `glutWireSphere'
/home/user/GL FILES/main.cpp:141: undefined reference to `glPopMatrix'
/home/user/GL FILES/main.cpp:143: undefined reference to `glPushMatrix'
/home/user/GL FILES/main.cpp:147: undefined reference to `glBegin'
/home/user/GL FILES/main.cpp:150: undefined reference to `glColor3f'
/home/user/GL FILES/main.cpp:151: undefined reference to `glVertex3f'
/home/user/GL FILES/main.cpp:152: undefined reference to `glEnd'
/home/user/GL FILES/main.cpp:155: undefined reference to `glPopMatrix'
/home/user/GL FILES/main.cpp:156: undefined reference to `glPushMatrix'
/home/user/GL FILES/main.cpp:159: undefined reference to `glTranslatef'
/home/user/GL FILES/main.cpp:160: undefined reference to `glutWireSphere'
/home/user/GL FILES/main.cpp:165: undefined reference to `glBegin'
/home/user/GL FILES/main.cpp:168: undefined reference to `glColor3f'
/home/user/GL FILES/main.cpp:169: undefined reference to `glVertex3f'
/home/user/GL FILES/main.cpp:170: undefined reference to `glEnd'
/home/user/GL FILES/main.cpp:172: undefined reference to `glPushMatrix'
/home/user/GL FILES/main.cpp:175: undefined reference to `glTranslatef'
/home/user/GL FILES/main.cpp:176: undefined reference to `glutWireSphere'
/home/user/GL FILES/main.cpp:177: undefined reference to `glPopMatrix'
/home/user/GL FILES/main.cpp:178: undefined reference to `glPopMatrix'
/home/user/GL FILES/main.cpp:179: undefined reference to `glPushMatrix'
/home/user/GL FILES/main.cpp:183: undefined reference to `glBegin'
/home/user/GL FILES/main.cpp:186: undefined reference to `glColor3f'
/home/user/GL FILES/main.cpp:187: undefined reference to `glVertex3f'
/home/user/GL FILES/main.cpp:188: undefined reference to `glEnd'
/home/user/GL FILES/main.cpp:191: undefined reference to `glPopMatrix'
/home/user/GL FILES/main.cpp:192: undefined reference to `glPushMatrix'
/home/user/GL FILES/main.cpp:195: undefined reference to `glTranslatef'
/home/user/GL FILES/main.cpp:196: undefined reference to `glutWireSphere'
/home/user/GL FILES/main.cpp:198: undefined reference to `glPopMatrix'
/home/user/GL FILES/main.cpp:199: undefined reference to `glPushMatrix'
/home/user/GL FILES/main.cpp:203: undefined reference to `glBegin'
/home/user/GL FILES/main.cpp:206: undefined reference to `glColor3f'
/home/user/GL FILES/main.cpp:207: undefined reference to `glVertex3f'
/home/user/GL FILES/main.cpp:208: undefined reference to `glEnd'
/home/user/GL FILES/main.cpp:211: undefined reference to `glPopMatrix'
/home/user/GL FILES/main.cpp:212: undefined reference to `glPushMatrix'
/home/user/GL FILES/main.cpp:215: undefined reference to `glTranslatef'
/home/user/GL FILES/main.cpp:216: undefined reference to `glutWireSphere'
/home/user/GL FILES/main.cpp:218: undefined reference to `glPopMatrix'
/tmp/cc4Wb8X6.o: In function `Display()':
/home/user/GL FILES/main.cpp:222: undefined reference to `glClear'
/home/user/GL FILES/main.cpp:223: undefined reference to `glMatrixMode'
/home/user/GL FILES/main.cpp:224: undefined reference to `glLoadIdentity'
/home/user/GL FILES/main.cpp:229: undefined reference to `glPushMatrix'
/home/user/GL FILES/main.cpp:231: undefined reference to `glPopMatrix'
/home/user/GL FILES/main.cpp:234: undefined reference to `glFlush'
/home/user/GL FILES/main.cpp:235: undefined reference to `glutSwapBuffers'
/tmp/cc4Wb8X6.o: In function `Reshape(int, int)':
/home/user/GL FILES/main.cpp:241: undefined reference to `glViewport'
/home/user/GL FILES/main.cpp:244: undefined reference to `glMatrixMode'
/home/user/GL FILES/main.cpp:247: undefined reference to `glLoadIdentity'
/home/user/GL FILES/main.cpp:263: undefined reference to `glOrtho'
/home/user/GL FILES/main.cpp:266: undefined reference to `glOrtho'
/home/user/GL FILES/main.cpp:269: undefined reference to `glOrtho'
/home/user/GL FILES/main.cpp:277: undefined reference to `gluPerspective'
/tmp/cc4Wb8X6.o: In function `Menu(int)':
/home/user/GL FILES/main.cpp:290: undefined reference to `glutGet'
/home/user/GL FILES/main.cpp:290: undefined reference to `glutGet'
/home/user/GL FILES/main.cpp:296: undefined reference to `glutGet'
/home/user/GL FILES/main.cpp:296: undefined reference to `glutGet'
/home/user/GL FILES/main.cpp:302: undefined reference to `glutGet'
/tmp/cc4Wb8X6.o:/home/user/GL FILES/main.cpp:302: more undefined references to `glutGet' follow
/tmp/cc4Wb8X6.o: In function `main':
/home/user/GL FILES/main.cpp:320: undefined reference to `glutTimerFunc'
/home/user/GL FILES/main.cpp:321: undefined reference to `glutInit'
/home/user/GL FILES/main.cpp:322: undefined reference to `glutInitDisplayMode'
/home/user/GL FILES/main.cpp:323: undefined reference to `glutInitWindowSize'
/home/user/GL FILES/main.cpp:324: undefined reference to `glutCreateWindow'
/home/user/GL FILES/main.cpp:325: undefined reference to `glutReshapeFunc'
/home/user/GL FILES/main.cpp:326: undefined reference to `glutDisplayFunc'
/home/user/GL FILES/main.cpp:327: undefined reference to `glutKeyboardFunc'
/home/user/GL FILES/main.cpp:328: undefined reference to `glutSpecialFunc'
/home/user/GL FILES/main.cpp:331: undefined reference to `glutCreateMenu'
/home/user/GL FILES/main.cpp:332: undefined reference to `glutAddMenuEntry'
/home/user/GL FILES/main.cpp:333: undefined reference to `glutAddMenuEntry'
/home/user/GL FILES/main.cpp:334: undefined reference to `glutCreateMenu'
/home/user/GL FILES/main.cpp:335: undefined reference to `glutAddMenuEntry'
/home/user/GL FILES/main.cpp:336: undefined reference to `glutAddMenuEntry'
/home/user/GL FILES/main.cpp:338: undefined reference to `glutCreateMenu'
/home/user/GL FILES/main.cpp:339: undefined reference to `glutAddSubMenu'
/home/user/GL FILES/main.cpp:340: undefined reference to `glutAddSubMenu'
/home/user/GL FILES/main.cpp:341: undefined reference to `glutAddMenuEntry'
/home/user/GL FILES/main.cpp:342: undefined reference to `glutAttachMenu'
/home/user/GL FILES/main.cpp:343: undefined reference to `glutMainLoop'
glframe.o: In function `glpApplyActorTransform(GLPFrame*)':
/home/user/GL FILES/pomoc/glframe.c:45: undefined reference to `glMultMatrixf'
glframe.o: In function `glpApplyCameraTransform(GLPFrame*)':
/home/user/GL FILES/pomoc/glframe.c:81: undefined reference to `glMultMatrixf'
/home/user/GL FILES/pomoc/glframe.c:83: undefined reference to `glTranslatef'
collect2: error: ld returned 1 exit status
make: *** [main.o] Błąd 1
user@user-Latitude-E6410:~/GL FILES$