Помощь - Поиск - Пользователи - Календарь
Полная версия: OpenGL C++
Форум «Всё о Паскале» > Delphi, Assembler и другие языки. > Другие языки
ammaximus
Согласно задумке градиентная пирамида должна вращаться относительно y, но этого не происходит. Через час получилось чтото типа пирамиды, но она не движется. В чем моя ошибка?
#include <GL/glut.h>
GLfloat rtri=10;           // gthdsq eujk


void display()
{

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);// Î÷èñòêà ýêðàíà è áóôåðà ãëóáèíû
glLoadIdentity();                               // Ñáðîñ ïðîñìîòðà
//glTranslatef(-1.5f,0.0f,-6.0f);                 // Ñäâèã âëåâî è âãëóáü ýêðàíà
glRotatef(rtri,0.0f,1.0f,0.0f);                 // Âðàùåíèå ïèðàìèäû ïî îñè Y
glBegin(GL_TRIANGLES);                          // Íà÷àëî ðèñîâàíèÿ ïèðàìèäû

glColor3f(1.0f,0.0f,0.0f);                      // Êðàñíûé
        glVertex3f( 0.0f, 1.0f, 0.0f);                  // Âåðõ òðåóãîëüíèêà (Ïåðåäíÿÿ)
        glColor3f(0.0f,1.0f,0.0f);                      // Çåëåííûé
        glVertex3f(-1.0f,-1.0f, 1.0f);                  // Ëåâàÿ òî÷êà
        glColor3f(0.0f,0.0f,1.0f);                      // Ñèíèé
        glVertex3f( 1.0f,-1.0f, 1.0f);                  // Ïðàâàÿ òî÷êà

		 glColor3f(1.0f,0.0f,0.0f);                      // Êðàñíàÿ
        glVertex3f( 0.0f, 1.0f, 0.0f);                  // Âåðõ òðåóãîëüíèêà (Ïðàâàÿ)
        glColor3f(0.0f,0.0f,1.0f);                      // Ñèíèÿ
        glVertex3f( 1.0f,-1.0f, 1.0f);                  // Ëåâî òðåóãîëüíèêà (Ïðàâàÿ)
        glColor3f(0.0f,1.0f,0.0f);                      // Çåëåííàÿ
        glVertex3f( 1.0f,-1.0f, -1.0f);                 // Ïðàâî òðåóãîëüíèêà (Ïðàâàÿ)

		 glColor3f(1.0f,0.0f,0.0f);                      // Êðàñíûé
        glVertex3f( 0.0f, 1.0f, 0.0f);                  // Íèç òðåóãîëüíèêà (Ñçàäè)
        glColor3f(0.0f,1.0f,0.0f);                      // Çåëåííûé
        glVertex3f( 1.0f,-1.0f, -1.0f);                 // Ëåâî òðåóãîëüíèêà (Ñçàäè)
        glColor3f(0.0f,0.0f,1.0f);                      // Ñèíèé
        glVertex3f(-1.0f,-1.0f, -1.0f);                 // Ïðàâî òðåóãîëüíèêà (Ñçàäè)

		 glColor3f(1.0f,0.0f,0.0f);                      // Êðàñíûé
        glVertex3f( 0.0f, 1.0f, 0.0f);                  // Âåðõ òðåóãîëüíèêà (Ëåâî)
        glColor3f(0.0f,0.0f,1.0f);                      // Ñèíèé
        glVertex3f(-1.0f,-1.0f,-1.0f);                  // Ëåâî òðåóãîëüíèêà (Ëåâî)
        glColor3f(0.0f,1.0f,0.0f);                      // Çåëåííûé
        glVertex3f(-1.0f,-1.0f, 1.0f);                  // Ïðàâî òðåóãîëüíèêà (Ëåâî)
glEnd();
rtri+=0.2f;             // Óâåëè÷èì ïåðåìåííóþ âðàùåíèÿ äëÿ òðåóãîëüíèêà           
	glFlush();
}

int main(int argc, char **argv){
  glutInit(&argc, argv);
  glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
  glutInitWindowSize(800, 600);
  glutInitWindowPosition(0, 0);
  glutCreateWindow("Test");
  glClearColor(1.0, 1.0, 1.0, 1.0);
  glMatrixMode(GL_PROJECTION);
  glLoadIdentity();
  glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0);
  glutDisplayFunc(display);
  glutMainLoop();

return 0;
}
volvo
Цитата
В чем моя ошибка?
В том, что ты не заставляешь ее двигаться... Смотри:
#include <GL/glut.h>

GLfloat rtri = 10;

void display()
{
    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
    glPushMatrix();

    glRotatef(rtri,0.0f,1.0f,0.0f);

    glBegin(GL_TRIANGLES);
        glColor3f(1.0f,0.0f,0.0f);
        glVertex3f(0.0f, 1.0f, 0.0f);
        glColor3f(0.0f,1.0f,0.0f);
        glVertex3f(-1.0f,-1.0f, 1.0f);
        glColor3f(0.0f,0.0f,1.0f);
        glVertex3f(1.0f,-1.0f, 1.0f);
        glColor3f(1.0f,0.0f,0.0f);
        glVertex3f(0.0f, 1.0f, 0.0f);
        glColor3f(0.0f,0.0f,1.0f);
        glVertex3f(1.0f,-1.0f, 1.0f);
        glColor3f(0.0f,1.0f,0.0f);
        glVertex3f(1.0f,-1.0f, -1.0f);
        glColor3f(1.0f,0.0f,0.0f);
        glVertex3f(0.0f, 1.0f, 0.0f);
        glColor3f(0.0f,1.0f,0.0f);
        glVertex3f(1.0f,-1.0f, -1.0f);
        glColor3f(0.0f,0.0f,1.0f);
        glVertex3f(-1.0f,-1.0f, -1.0f);
        glColor3f(1.0f,0.0f,0.0f);
        glVertex3f(0.0f, 1.0f, 0.0f);
        glColor3f(0.0f,0.0f,1.0f);
        glVertex3f(-1.0f,-1.0f,-1.0f);
        glColor3f(0.0f,1.0f,0.0f);
        glVertex3f(-1.0f,-1.0f, 1.0f);
    glEnd();

    glPopMatrix();
    glutSwapBuffers();
    glutPostRedisplay(); /* Заставляем сцену перерисоваться */
}

/* Промежуточные вычисления лучше делать здесь, OnIdle */
void idle()
{
    rtri += 0.2f;
}

int main(int argc, char **argv){
    glutInit(&argc, argv);
    glutInitWindowSize(800, 600);
    glutInitWindowPosition(0, 0);

    /* Двойная буферизация, чтобы убрать мерцание при вращении !!! */
    glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB);
    glutCreateWindow("test");

    glClearColor(0, 0, 0, 0);
    glOrtho(-5,5,-5,5,-5,5);
    glEnable(GL_DEPTH_TEST);

    glutDisplayFunc(display);
    glutIdleFunc(idle);
    glutMainLoop();
    return 0;
}
ammaximus
О круто, спасибо.
может посоветуешь что-нибудь из литературы по openGL? А то дергаю отрывки с разных сайтов, такая каша в башке..
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.