Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.12.2010, 19:33   #1
fluffi
 
Регистрация: 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();
}
fluffi вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
OpenGL в Qt papos Qt и кроссплатформенное программирование С/С++ 2 13.11.2010 23:16
OpenGL bigory Общие вопросы C/C++ 8 24.06.2010 14:26
OpenGL Paul_AG Общие вопросы C/C++ 3 02.02.2010 20:28
OpenGL Witaliy Gamedev - cоздание игр: Unity, OpenGL, DirectX 1 01.05.2008 21:05
OpenGL prizrak1390 Свободное общение 2 07.04.2008 13:43