Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Ханойские башни: демонстрация решения - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Оператор = и наследование http://www.cyberforum.ru/cpp-beginners/thread365164.html
Добрый день, вот есть код: class Copier { public: const Copier& operator = (const Copier&) { qDebug() << "In const Copier& Operator = ";
C++ Создание класса Уважаемые программисты...помогите с созданием класса в С++. надо перегрузить основные функции класса...темы: комплексное число, дата, время, стек, массив,строка,многочлен, матрица,очередь,длинное... http://www.cyberforum.ru/cpp-beginners/thread365159.html
В строке удалить слова наибольшей длины... C++
Доброго времени суток всем. Учусь у универе и долго болел. Сейчас дали пару задач, вобще не понимаю как решать) Надеюсь на вашу помощь. Вот задача: В строке удалить слова наибольшей длины....
C++ Что означает команда exit(1) ?
Добрый день. Привожу кусок кода из учебника: Функция добавления элемента в очередь: void Add(int Last, int number) { if (Last==maxqueue) exit(1); //Очередь полна Queue=number;...
C++ Перевод числа в другие системы http://www.cyberforum.ru/cpp-beginners/thread365141.html
int x=0; int bin=0; int in=0; cin >> in; switch (in){ case 1: cout << "Введите число\n"; cin >> bin; cout << endl;
C++ как получить дату в формате как time() есть констант которую я получил с помощью функцией time() (прим. 1318405625) как теперь получить время в такой же формат если у меня есть год, месяц, день, часы, минуты, секунды, неделя года (1-59),... подробнее

Показать сообщение отдельно
alkagolik
Заблокирован
13.10.2011, 00:00
Цитата Сообщение от Kiritler Посмотреть сообщение
а при помощи Xlib-а простеньких примеров рисования нет?
OGL + X11
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
/* A simple program to show how to set up an X window for OpenGL rendering.
 * X86 compilation: gcc -o -L/usr/X11/lib   main main.c -lGL -lX11
 * X64 compilation: gcc -o -L/usr/X11/lib64 main main.c -lGL -lX11
 */
#include <stdio.h>
#include <stdlib.h>
 
#include <GL/glx.h>    /* this includes the necessary X headers */
//#include <GL/gl.h>
 
#include <X11/X.h>    /* X11 constant (e.g. TrueColor) */
#include <X11/keysym.h>
 
static int snglBuf[] = {GLX_RGBA, GLX_DEPTH_SIZE, 16, None};
static int dblBuf[]  = {GLX_RGBA, GLX_DEPTH_SIZE, 16, GLX_DOUBLEBUFFER, None};
 
Display   *dpy;
Window     win;
GLfloat    xAngle = 42.0, yAngle = 82.0, zAngle = 112.0;
GLboolean  doubleBuffer = GL_TRUE;
 
void fatalError(char *message)
{
    fprintf(stderr, "main: %s\n", message);
    exit(1);
}
 
void redraw(void)
{
    static GLboolean   displayListInited = GL_FALSE;
 
    if (displayListInited){
        /* if display list already exists, just execute it */
        glCallList(1);
    }
    else
    {
        /* otherwise compile and execute to create the display list */
        glNewList(1, GL_COMPILE_AND_EXECUTE);
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
 
        /* front face */
        glBegin(GL_QUADS);
            glColor3f(0.0, 0.7, 0.1);  /* green */
            glVertex3f(-1.0, 1.0, 1.0);
            glVertex3f(1.0, 1.0, 1.0);
            glVertex3f(1.0, -1.0, 1.0);
            glVertex3f(-1.0, -1.0, 1.0);
 
            /* back face */
            glColor3f(0.9, 1.0, 0.0);  /* yellow */
            glVertex3f(-1.0, 1.0, -1.0);
            glVertex3f(1.0, 1.0, -1.0);
            glVertex3f(1.0, -1.0, -1.0);
            glVertex3f(-1.0, -1.0, -1.0);
 
            /* top side face */
            glColor3f(0.2, 0.2, 1.0);  /* blue */
            glVertex3f(-1.0, 1.0, 1.0);
            glVertex3f(1.0, 1.0, 1.0);
            glVertex3f(1.0, 1.0, -1.0);
            glVertex3f(-1.0, 1.0, -1.0);
 
            /* bottom side face */
            glColor3f(0.7, 0.0, 0.1);  /* red */
            glVertex3f(-1.0, -1.0, 1.0);
            glVertex3f(1.0, -1.0, 1.0);
            glVertex3f(1.0, -1.0, -1.0);
            glVertex3f(-1.0, -1.0, -1.0);
        glEnd();
        glEndList();
        displayListInited = GL_TRUE;
    }
    if (doubleBuffer)
        glXSwapBuffers(dpy, win);/* buffer swap does implicit glFlush */
    else
        glFlush();  /* explicit flush for single buffered case */
}
 
int main(int argc, char **argv)
{
    XVisualInfo         *vi;
    Colormap             cmap;
    XSetWindowAttributes swa;
    GLXContext           cx;
    XEvent               event;
    GLboolean            needRedraw = GL_FALSE, recalcModelView = GL_TRUE;
    int                  dummy;
 
    /*** (1) open a connection to the X server ***/
    dpy = XOpenDisplay(NULL);
    if (dpy == NULL)
        fatalError("could not open display");
 
    /*** (2) make sure OpenGL's GLX extension supported ***/
    if(!glXQueryExtension(dpy, &dummy, &dummy))
        fatalError("X server has no OpenGL GLX extension");
 
    /*** (3) find an appropriate visual ***/
 
    /* find an OpenGL-capable RGB visual with depth buffer */
    vi = glXChooseVisual(dpy, DefaultScreen(dpy), dblBuf);
    if (vi == NULL){
        vi = glXChooseVisual(dpy, DefaultScreen(dpy), snglBuf);
        if (vi == NULL) fatalError("no RGB visual with depth buffer");
        doubleBuffer = GL_FALSE;
    }
    if(vi->class != TrueColor)
        fatalError("TrueColor visual required for this program");
 
    /*** (4) create an OpenGL rendering context  ***/
 
    /* create an OpenGL rendering context */
    cx = glXCreateContext(dpy, vi, /* no shared dlists */ None,
                          /* direct rendering if possible */ GL_TRUE);
    if (cx == NULL)
        fatalError("could not create rendering context");
 
    /*** (5) create an X window with the selected visual ***/
 
    /* create an X colormap since probably not using default visual */
    cmap = XCreateColormap(dpy, RootWindow(dpy, vi->screen), vi->visual, AllocNone);
    swa.colormap = cmap;
    swa.border_pixel = 0;
    swa.event_mask = KeyPressMask    | ExposureMask
                 | ButtonPressMask | StructureNotifyMask;
    win = XCreateWindow(dpy, RootWindow(dpy, vi->screen), 0, 0,
                        800, 800, 0, vi->depth, InputOutput, vi->visual,
                        CWBorderPixel | CWColormap | CWEventMask, &swa);
    XSetStandardProperties(dpy, win, "main", "main", None,
                           argv, argc, NULL);
 
    /*** (6) bind the rendering context to the window ***/
 
    glXMakeCurrent(dpy, win, cx);
 
    /*** (7) request the X window to be displayed on the screen ***/
 
    XMapWindow(dpy, win);
 
    /*** (8) configure the OpenGL context for rendering ***/
 
    glEnable(GL_DEPTH_TEST); /* enable depth buffering */
    glDepthFunc(GL_LESS);    /* pedantic, GL_LESS is the default */
    glClearDepth(1.0);       /* pedantic, 1.0 is the default */
 
    /* frame buffer clears should be to black */
    glClearColor(0.0, 0.0, 0.0, 0.0);
 
    /* set up projection transform */
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glFrustum(-1.0, 1.0, -1.0, 1.0, 1.0, 10.0);
    /* establish initial viewport */
    /* pedantic, full window size is default viewport */
    //glViewport(0, 0, 300, 300);
 
    //printf( "Press left mouse button to rotate around X axis\n" );
    //printf( "Press middle mouse button to rotate around Y axis\n" );
    //printf( "Press right mouse button to rotate around Z axis\n" );
    //printf( "Press ESC to quit the application\n" );
 
    /*** (9) dispatch X events ***/
 
    while (1){
        do{
            XNextEvent(dpy, &event);
            switch (event.type) {
                case KeyPress:{
                    KeySym     keysym;
                    XKeyEvent *kevent;
                    char       buffer[1];
                    /* It is necessary to convert the keycode to a
                    * keysym before checking if it is an escape */
                    kevent = (XKeyEvent *) &event;
                    if ((XLookupString((XKeyEvent *)&event,buffer,1,&keysym,NULL) == 1)
                        && (keysym == (KeySym)XK_Escape))
                        exit(0);
                    break;
                }
                case ButtonPress:
                    recalcModelView = GL_TRUE;
                    switch (event.xbutton.button){
                        case Button1: xAngle += 10.0; break;
                        case Button2: yAngle += 10.0; break;
                        case Button3: zAngle += 10.0; break;
                    }
                    break;
                case ConfigureNotify:
                    glViewport(0, 0, event.xconfigure.width,
                               event.xconfigure.height);
                               /* fall through... */
                case Expose: needRedraw = GL_TRUE;
                    break;
                case DestroyNotify:
                    exit(0);
                    break;
            }
        } while(XPending(dpy)); /* loop to compress events */
        if (recalcModelView){
            glMatrixMode(GL_MODELVIEW);
 
            /* reset modelview matrix to the identity matrix */
            glLoadIdentity();
 
            /* move the camera back three units */
            glTranslatef(0.0, 0.0, -3.0);
 
            /* rotate by X, Y, and Z angles */
            glRotatef(xAngle, 0.5, 0.0, 0.0);
            glRotatef(yAngle, 0.0, 0.1, 0.0);
            glRotatef(zAngle, 0.0, 0.0, 1.0);
 
            recalcModelView = GL_FALSE;
            needRedraw = GL_TRUE;
        }
        if (needRedraw){
            redraw();
            needRedraw = GL_FALSE;
        }
    }
    return 0;
}
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru