Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Мультимедия, OpenGL/DirectX > OpenGl в C++


Автор: xpk 24.8.2006, 17:42
Помогите ! Сделал Книгу в C++ (бонально несколько страниц ) немогу сообразить как сделоть чтоб при нажатии клавиши перелистовалась страница?Как в одну так и в другую сторону помогите 

Автор: xpk 24.8.2006, 22:06
надо чтоб эти страницы могли открываться при нажитии клавиши по одной за оно нажатие как в одну так и в другую сторону помогите или посоветуйте где можно узнать!

Код



#include <windows.h>

#include <GL/gl.h>
#include <GL/glu.h>
#include <GL/glaux.h>


    

  


void CALLBACK resize(int width,int height)
{
   glViewport(0,0,width,height);
   glMatrixMode( GL_PROJECTION );
   glLoadIdentity();
   glOrtho(-5,5, -5,5, 2,12);   
   gluLookAt( 0,0,5, 0,0,0, 0,1,0 );
   glMatrixMode( GL_MODELVIEW );
}    





void CALLBACK display(void)
{



   glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );

glPushMatrix();  



  glLineWidth(40); 
                  
 glBegin(GL_LINES);
 
   glColor3d(1,0,0);  
   glVertex3d(0,0,0);
   glVertex3d(2,0,0);
   
 glEnd();

 glBegin(GL_LINES);
    glColor3d(0,1,0);
    glVertex3d(0,0,0.01);
    glVertex3d(2,0,0.01);
    
 glEnd();

 glBegin(GL_LINES);
     glColor3d(0,0,1);
     glVertex3d(0,0,0.02);
     glVertex3d(2,0,0.02);

 glEnd();
 glBegin(GL_LINES);
      glColor3d(1,1,0);
      glVertex3d(0,0,0.04);
      glVertex3d(2,0,0.04);
 glEnd();

 glBegin(GL_LINES);
       glColor3d(0,1,1);
       glVertex3d(0,0,0.06);
       glVertex3d(2,0,0.06);
glEnd();
  glBegin(GL_LINES);        
        glColor3d(1,0,1);
        glVertex3d(0,0,0.08);
        glVertex3d(2,0,0.08);

   glEnd();

 

 glPushMatrix();

   glTranslated(0,0,0);
   glColor3d(1,1,1);
   auxSolidBox(0.1,1,0.1);

 glPopMatrix();
  
glPopMatrix();



    auxSwapBuffers();
}



void main()
{
float pos[4] = {3,3,3,1};
float dir[3] = {-1,-1,-1};
GLfloat mat_specular[] = {1,1,1,1};


  

  auxInitPosition( 100, 100, 400, 400);
    auxInitDisplayMode( AUX_RGB | AUX_DEPTH | AUX_DOUBLE );
    auxInitWindow( "Книга" );
    auxIdleFunc(display);
    auxReshapeFunc(resize);

  
    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);




    glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, mat_specular);
    glMaterialf(GL_FRONT, GL_SHININESS, 128.0);

    

    



    auxMainLoop(display);
}


Автор: Rickert 25.8.2006, 03:47
Несколько вариантов: делать анимацию и экспортировать её, затем открывать и проигрывать. Либо, если страницы не имею свойства мяться, то бишь, они как литые плиты, то можно просто вращать плоскость страницы относительно оси, находящейся в произвольной точке пространства. 

Автор: xpk 26.8.2006, 23:33
Да мне надо чтобы стараница вращалась при нажатии кнопки до определённого уровня (до поверхности на которой лежит ), а потом начинала вращения следующая страница пока книга не закроется .
И таким же образом в обратную сторону 



вот я и не знаю как это сделать ПОМОГИЕ ,НАПИШИТЕ КАК ЭТО СДЕЛАТЬ

если не сложно по подробней! smile 

Автор: Rickert 27.8.2006, 06:22
Бери в руки учебник для ВУЗов по стереометрии и ищи "вращение плоскости относительно оси" - там расписана вся математика. Учись искать и применять на практике теорию. Это составляет 50% времени программиста.

Автор: xpk 27.8.2006, 11:38
Код

int alpha=0, beta=0;
int i=0;


void CALLBACK Key_LEFT(void)
{
    alpha +=-5;    
}
void CALLBACK Key_RIGHT(void)
{
  beta += 5;
}
.
.
.
glRotated(alpha,1,0,0);
glRotated(beta,1,0,0);




при помощи нажатия кнопок у меня будет крутиться картинка вокруг оси в лево и право,
а я незнаю как сделать чтобы лист останавливался на опр уровне и начинал двигаться другой????

Подскажите КАК

Автор: Rickert 27.8.2006, 12:35
Так у тебя лист будет крутиться относительно оси x, а у тебе крутить надо относительно произвольной оси, которая находиться в произвольной точке пространства и повёрнута на произвольный угол.

Автор: xpk 27.8.2006, 12:43
Да в принцепе мне не важно по какой оси будет поворот. Мне важно понять Как сделать что при повароте на определённый угол страница перестала поварачиваться , и стала поварачиваться следуюЩАЯ вот что для меня НЕ ПОНЯТНО ( если зноаешь напиши как)

Автор: chozen 29.8.2006, 22:32
Я что, скажи мне, тебе мешает мониторить значения alpha и beta в твоем коде???

Все ж прозрачно...

Есть код, рисующий страницы, который рисует их в зависимости от определенных значений (в твоем случае - альфа и бета). Запихиваешь куда-нить в код   smile  их проверку, а при рисовании учитываешь это значение: если надо, ничего не делаешь, если надо - рисуешь страницу и переназначешь эти значения.  Аж сам запутался...  smile 

Автор: xpk 29.8.2006, 22:38
я кажись понял идею посмотри в другой теме я там написал свои идеи

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)