VestniK, мне кажется все же, что это маловероятно, скорее проблема в моем коде. Если тебе не сложно, или кому еще, гляньте так сказать "по диагонали". Я лично, думаю, что я чего-то не так накодил в функции main. Хотя в студии на винде все работало. И конечно же код я малесь подправил - заголовочные файлы. Несмотря на громоздкость кода, он очень простой.
//compile g++ hello.cpp -lglut -o hello
#include <GL/glut.h>
#include <GL/gl.h>
#include <GL/glx.h>
#include <X11/Xlib.h>
#include <X11/Xatom.h>
#include <X11/keysym.h>
#include <iostream>
using namespace std;
//---CLASS MAP-----------------------------------------------------------------
class map{
GLdouble pos[16];
public:
map();
void scene();
};
map::map(){
pos[0] = 30.0f; pos[1] = 0.0f; pos[2] = 0.0f;
pos[3] = 0.0f; pos[4] = 30.0f; pos[5] = 0.0f;
pos[6] = -30.0f; pos[7] = 0.0f; pos[8] = 0.0f;
pos[9] = 0.0f; pos[10] = -30.0f; pos[11] = 0.0f;
pos[12] = 0.0f; pos[13] = 0.0f; pos[14] = 60.0f;
}
void map::scene(){
glBegin(GL_LINES);
glColor3f(1.0f, 0.0f, 0.0f);
glVertex3d(-400.0f, 0.0f, 0.0f);
glColor3f(0.1f, 0.1f, 0.1f);
glVertex3d( 400.0f, 0.0f, 0.0f);
glColor3f(0.0f, 1.0f, 0.0f);
glVertex3d(0.0f, -400.0f, 0.0f);
glColor3f(0.1f, 0.1f, 0.1f);
glVertex3d(0.0f, 400.0f, 0.0f);
glColor3f(0.0f, 0.0f, 1.0f);
glVertex3d(0.0f, 0.0f, -400.0f);
glColor3f(0.1f, 0.1f, 0.1f);
glVertex3d(0.0f, 0.0f, 400.0f);
glEnd();
}
class atom:public map{
public:
atom();
};
atom::atom(){
}
atom obj;
GLdouble CirclePoints = 100.0f;
void display() {
glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glColor3f (0.0, 0.0, 0.0);
obj.scene();
glutSwapBuffers();
}
void keyboard (unsigned char key, int x, int y){
switch (key) {
case 'x':
glRotatef(10, 1.0f, 0.0f, 0.0f);
glutPostRedisplay();
break;
case 'X':
glRotatef(-10, 1.0f, 0.0f, 0.0f);
glutPostRedisplay();
break;
case 'y':
glRotatef(10, 0.0f, 1.0f, 0.0f);
glutPostRedisplay();
break;
case 'Y':
glRotatef(-10, 0.0f, 1.0f, 0.0f);
glutPostRedisplay();
break;
case 'z':
glRotatef(10, 0.0f, 0.0f, 1.0f);
glutPostRedisplay();
break;
case 'Z':
glRotatef(-10, 0.0f, 0.0f, 1.0f);
glutPostRedisplay();
break;
case 27:
exit(-1);
break;
default:
break;
}
}
void key_special_listen(int sym, int x, int y) {
switch(sym){
case GLUT_KEY_LEFT:
glRotatef(-10, 0.0f, 0.0f, 1.0f);
glutPostRedisplay();
break;
case GLUT_KEY_RIGHT:
glRotatef(10, 0.0f, 0.0f, 1.0f);
glutPostRedisplay();
break;
case GLUT_KEY_UP:
glRotatef(-10, 1.0f, 0.0f, 0.0f);
glutPostRedisplay();
break;
case GLUT_KEY_DOWN:
glRotatef(10, 1.0f, 0.0f, 0.0f);
glutPostRedisplay();
break;
}
}
//---
void TimerFunction(int value){
glutPostRedisplay();
glutTimerFunc(5, TimerFunction, 1);
}
//---
void MouseFunction(int button, int state, int x, int y){
}
void init () {
float pos[4] = {200,200,0, 0.0f};
float dir[3] = {-1,-1,-1};
glEnable(GL_DEPTH_TEST);
glEnable(GL_COLOR_MATERIAL);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glLightfv(GL_LIGHT0, GL_POSITION, pos);
glLightfv(GL_LIGHT0, GL_SPOT_DIRECTION, dir);
glClearColor (0.0, 0.0, 0.0, 0.0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-400.0, 400.0, -400.0, 400.0, -400.0f, 400.0f);
}
int main(int argc, char** argv){
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
glutInitWindowSize (800, 600);
glutInitWindowPosition (200, 200);
glutCreateWindow ("Karkas");
init ();
glutDisplayFunc(display);
glutTimerFunc(33, TimerFunction, 1);
glutSpecialFunc(key_special_listen);
glutKeyboardFunc(keyboard);
glutMouseFunc(MouseFunction);
glutMainLoop();
return 0;
}