Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Технологии программирования > Программирование графики
Перезагрузить страницу Поворот объекта
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
n@t n@t вне форума
Новичок
 
Сообщений: 3
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 22.03.2011
Question Поворот объекта - 26.09.2011, 00:21

cpp Код:
#include "stdafx.h"
#include <windows.h>
#include <gl/gl.h>
#include "glut.h"
#include <math.h>

float angle = 0;
float x = 0,y = 0,z = 0,q = 1.1;
void init(void){
GLUquadricObj *quadObj;
quadObj = gluNewQuadric();
glNewList(1, GL_COMPILE);

 glColor3d(0,1,0);
 gluQuadricDrawStyle(quadObj, GLU_LINE);
 gluCylinder(quadObj, 0, 15, 40, 10, 10);

 /*glTranslated(-45,0,0);
 glColor3d(0,0,1);
 gluQuadricDrawStyle(quadObj, GLU_SILHOUETTE);
 gluCylinder(quadObj, 0, 15, 40, 10, 10);
 */

 glEndList();

}
void Draw(void){
 glClearColor(1.0, 1.0, 1.0, 0.5);
 glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); // Очистить экран и буфер глубины
 
 glCallList(1);
 glutSwapBuffers();
}

void Keyboard(unsigned char key,int w, int h)
{
        if(key == 43 )
        {
            angle=0;
            angle+=5;
            glutPostRedisplay();
            glRotatef(angle, 0, 0, 1);
           
        }
       
        if(key == 45 )
        {
            angle=0;
            angle-=5;
            glutPostRedisplay();
            glRotatef(angle, 0, 0, 1);
           
        }
        if(key == 120 )
        {
            x=0;
            x+=0.1;
            glutPostRedisplay();
            glTranslated(x,0,0);
           
        }
        if(key == 88 )
        {
            x=0;
            x-=0.1;
            glutPostRedisplay();
            glTranslated(x,0,0);
           
        }
        if(key == 121 )
        {
            y=0;
            y+=0.1;
            glutPostRedisplay();
            glTranslated(0,y,0);
           
        }

        if(key == 89 )
        {
            y=0;
            y-=0.1;
            glutPostRedisplay();
            glTranslated(0,y,0);
           
        }

        if(key == 122 )
        {
            z=0;
            z+=0.1;
            glutPostRedisplay();
            glTranslated(0,0,z);
           
        }
        if(key == 90 )
        {
            z=0;
            z-=0.1;
            glutPostRedisplay();
            glTranslated(0,0,z);
           
        }

        if(key == 113 )
        {      
            q+=0.05;
            glutPostRedisplay();
            glScalef(q,1.0,1.0);
           
           
        }
        if(key == 81 )
        {  
            q-=0.05;
            glutPostRedisplay();
            glScalef(q,1.0,1.0);
           
           
        }
       
}

void Reshape(int w, int h)
{
 glViewport(0, 0, w, h);
 glMatrixMode(GL_PROJECTION);
 glLoadIdentity();
//glFrustum(-100, 100, -100, 100, 1, 1000);
 gluPerspective( 30, w / h, 1, 1000);// угол видимости по у, по х, расстояние от наблюдателя до плоскостей
 //glOrtho(-100,100,-100,100,150,200);
  gluLookAt(0, 0, -200, 0, 0, 0, 0, 1, 0);
 glMatrixMode(GL_MODELVIEW);

}


int _tmain(int argc, char **argv)
{
 glutInit(&argc, argv);
 glutInitDisplayMode(GLUT_DOUBLE);
 glutInitWindowSize(1024,720);
 glutCreateWindow(argv[0]);
 init();
 glutDisplayFunc(Draw);
 glutReshapeFunc(Reshape);
 glutKeyboardFunc(Keyboard);
 
 glutMainLoop();

 return 0;
}
Помогите решить следующие проблемы:
1) Если сначало повернуть объект, а потом сместить по оси х, y или z,то объект будеи смещаться под углом, а если сначало просто сдвигать, то все ок???
2)При увеличении, а потом уменшении размеров объекта или наоборот не совсем правильно просходит действие, почему?
3) glTranslated(-45,0,0);
glColor3d(0,0,1);
gluQuadricDrawStyle(quadObj, GLU_SILHOUETTE);
gluCylinder(quadObj, 0, 15, 40, 10, 10);
если откоментировать нужен код, то нужно, чтобы все дейсвия - сдвиг, поворот и масштабирования происходили с первым объектом, а второй просто стоял в сторонке. Как это сделать?
Большее спасибо ВСЕМ, кто проявит интерес к заданной теме!
Ответить с цитированием
Ads
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нихрена себе поворот!!! Виктор Вайсера Любые вопросы от новичков 6 13.02.2011 16:14
Поворот точки относительно другой monday С/С++ 3 28.03.2008 16:25
Поворот и наложение картинки Алексеев Николай PHP 2 10.02.2007 22:57
Поворот связанных объектов Sleem Программирование графики 1 07.11.2006 17:23
Как сделать поворот объекта NeoSoft Pascal 5 28.03.2006 22:07
Поворот!! Tough Prolog 1 06.12.2005 12:30
Поворот куба как реализовать Maksimus Lisp 4 03.02.2005 19:34
Поворот спрайта как реализовать sashas Программирование графики 2 08.04.2004 20:56
Поворот BITMAPa на 90 градусов Anonymous WinAPI 9 22.12.2003 09:11
Текст - вертикально (поворот на 90) Anonymous Visual Basic 0 05.06.2003 18:16
Поворот скана с текстом Anonymous Delphi 0 07.05.2003 13:14
Поворот текста в VB как реализовать Anonymous Visual Basic 2 14.04.2003 13:02



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов