Регистрация: 19.09.2010
Сообщений: 5
|
OpenGL
Программа рабочая, но не могу добавить сеточку(дно) и стелочки на концах осей с надписями "X","Y","Z"
Помогите пожалуйста!Прога написанная на Visual Studio C++ 6.0
Код:
#include <iostream>
#include "glut.h"
#include <windows.h>
//#pragma comment(linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"")
using namespace std;
int d=0; float l=40, kKey;
GLint ugolY = -45/2; // Углы поворота вокруг осей
GLint ugolX = -45/2;//
GLint ugolZ = -45/2;//
int flag,n=30,m=20;
GLdouble zoom = 1;// переменная зуммирования
GLUquadricObj* QuadrObj;
int D=0;
GLdouble equation[4] = {0, 0, 0, 0};
void R(int w, int h)
{
glViewport(0,0,(GLsizei) w, (GLsizei) h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-100,100,-100,100,-100,100);// количество точек для каждой оси координат
}
// Рисуем оси
void drawChildren()
{
// толщина осей
glLineWidth(1.0);
glBegin(GL_LINES);
// ось X
glColor3f(0,200,0);
glVertex3d(100,0,0);
glVertex3d(-100,0,0);
// Зарисовка разметки X
GLdouble i;
for( i = 0; i<100;i+=10){
glVertex3d(i,-2,0);
glVertex3d(i,2,0);
}
GLint j;
for( j = 0; i<100;i+=10){
glVertex3d(-j,-2,0);
glVertex3d(-j,2,0);
}
// ось Y
glColor3f(200,0,0);
glVertex3d(0,100,0);
glVertex3d(0,-100,0);
for( i = 0; i<100;i+=10){
glVertex3d(-2,i,0);
glVertex3d(2,i,0);
}
for( i = 0; i<100;i+=10){
glVertex3d(-2,-i,0);
glVertex3d(2,-i,0);
}
// ось Z
glColor3f(0,0,200);
glVertex3d(0,0, 100);
glVertex3d(0,0, -100);
for( i = 0; i<100;i+=10){
glVertex3d(-2,0,i);
glVertex3d(2,0,i);
}
for( j = 0; i<100;i+=10){
glVertex3d(-2,0,-j);
glVertex3d(2,0,-j);
}
glEnd();
}
void display()
{
glClear( GL_COLOR_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
GLdouble e[4] = {0, 0, 1, 0};
QuadrObj=gluNewQuadric();
if (D==0) glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
if (D==1) glPolygonMode(GL_FRONT_AND_BACK,GL_FILL);
if (D==2) glPolygonMode(GL_FRONT_AND_BACK, GL_POINT);
glPushMatrix();
// Задаём масштабирование ( + | -)
glScalef(zoom,zoom,zoom);// масштабировние по осям (равномерное)
// Задаем поворот осей координат
glRotatef(2*ugolY,0,1,0);// поворот вокруг оси OY
glRotated(2*ugolX,1,0,0);// поворот вокруг оси OX
glRotated(2*ugolZ,0,0,1);// поворот вокруг оси OZ
drawChildren();
glEnable(GL_CLIP_PLANE0);
glClipPlane(GL_CLIP_PLANE0, equation);
glPushMatrix();
glColor3f(0,0,255);
glTranslatef (0,0,0);
gluCylinder(QuadrObj,18,36,15,4,n);
glPopMatrix();
glPushMatrix();
glColor3f(0,255,0);
glTranslatef (0,0,15);
gluCylinder(QuadrObj,16,16,20,m,n);
glPopMatrix();
glPushMatrix();
glColor3f(255,0,0);
glTranslatef (0,0,35);
gluCylinder(QuadrObj,15,5,30,m,n);
glPopMatrix();
glPushMatrix();
glColor3f(100,200,0);
glTranslatef (0,0,65);
glEnable(GL_CLIP_PLANE1);
glClipPlane(GL_CLIP_PLANE1, e);
glutSolidSphere(5,m,n);
glDisable(GL_CLIP_PLANE1);
glPopMatrix();
glPopMatrix();
glDisable(GL_CLIP_PLANE0);
glutSwapBuffers();
glFlush();
}
void keyboard(unsigned char key, int x, int y){
// Смена угла координат
#define ESCAPE '\033'
if( key == '4') ugolY --;
if( key == '6') ugolY ++;
if(key == '2') ugolX++;
if(key == '8') ugolX--;
if(key == '1') ugolZ++;
if(key == '3') ugolZ--;
if (key=='9')
{
cout<<"Budet izmeneno kol-vo tochek razbieniya sphericheskih poverhnostei.\nProdoljit'? 1.Yes "<<endl;
cin>>flag;
if (flag==1)
{cout<<"Razbienie po gorizontali ";
cin>>m;
cout<<"Razbienie po verticali ";
cin>>n;
}
}
if (key=='7'){
cout<<"Budet zadana ploskost' otsecheniya urovnem ploskosti vida Ax+By+Cz+D.\n Prodoljit'? 1. Yes"<<endl;
cin>>flag;
if (flag==1){
cout<<"vvedite A ";
cin>>equation[0];
cout<<"vvedite В ";
cin>>equation[1];
cout<<"vvedite С ";
cin>>equation[2];
cout<<"vvedite D ";
cin>>equation[3];
}
}
// выход
if (key == ESCAPE) exit(0);
// Изменение масштаба
if(key == '+') zoom = zoom + 0.1;
if(key == '-') { if(zoom>=0.1) zoom = zoom - 0.1;}
if (key == '0') {ugolX=-45/2;ugolY=-45/2;ugolZ=-45/2;}
glutPostRedisplay ();
}
void mouse(int b,int s,int x,int y)
{
D+=(s==GLUT_DOWN);
D%=2;
glutPostRedisplay();
}
void main(int c, char *v[])
{
setlocale (LC_ALL, "Rus");
cout<<"dlya izmeneniya kol-va tochek razbieniya najmite klavishu 9. \nDlya otsecheniya chasti phiguru ploskost'u najmite 7."<<endl;
glutInit(&c, v);
glutInitWindowSize(500,500);
glutInitWindowPosition(100,100);
glutCreateWindow("Лабораторная работа №4 Степанова А.А. ПО-08б");
glutKeyboardFunc (keyboard);
glutReshapeFunc(R);
glClearColor(0.0, 0.0, 0.0, 0.0);
glutDisplayFunc(display);
glutMouseFunc(mouse);
glutMainLoop();
}
|