Уроки, алгоритмы, программы, примеры

Вход на сайт

Материалы по разделам

Построения
на плоскости (2D)
Графика
в пространстве (3D)
Вычислительная
геометрия
Физическое
моделирование
Фрактальная
графика

Новые комментарии

Спасибо за реализацию, она действительно быстрая. Но не все линии отрисовывает в нужную сторону... Необходимо добавить проверку для случая X-линии if(y1 "<" y0) grad=-grad; и аналогично для Y-линии if(x1 "<" x0) grad=-grad; P.S. На...
Отличные уроки(учу GL по ним), только в renderScene нужно добавить очистку буфера цвета и буфера глубины. При изменении размеров треугольники размножаются)
как исправить это , сделал все по инструкции
Timer1 - выдает ошибку. Использовал IdleTimer1, работает! unit Unit1; {$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls, ExtCtrls, OpenGLContext, GL, GLU; type { TForm1 } TForm1 =...
в коде присутствуют ошибки! // Считываем координаты procedure TForm1.getCoords(Sender: TObject); var j1:longint; begin n:= StrToInt(Edit2.Text); //число точек s1:=Edit1.Text; s2:=''; i := 1; j:=1; k:=0...

Счетчики и рейтинг

Яндекс.Метрика Рейтинг@Mail.ru
Язык программирования: 
C/C++
Среда программирования: 
Visual Studio 2013

#include <glut.h>
#include <math.h>
#include <stdlib.h>
#include <iostream>
 
using namespace std;
 
float aut, aut2, aut3;//счетчик
float x, y;//координаты
float angle, angle2, angle3, angle4;//параметр отвечающий за движение
float sk = 1;
 
//сохранение пропорций
void proporsion(int w, int h)
{
	if (h == 0)
	{
		h = 1;
	}
	float ratio = float(w) / h;
	glMatrixMode(GL_PROJECTION);
	glLoadIdentity();
	gluPerspective(45, ratio, 500, 500);
	glMatrixMode(GL_MODELVIEW);
}
 
//рисование
void paint(void)
{
	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);// очистка буфера
 
	//четырехугольник
	glPushMatrix();
	glScalef(sk, sk, sk);
	glRotatef(angle2, 0, 0, 1);
 
	glPushMatrix();
	glTranslatef(0, 10 - angle, 0);
	glBegin(GL_QUADS);//рисуем квадрат
	glColor3ub(0, 0, 0);//цвет
	glVertex2f(-2.5, -2.5);
	glVertex2f(-2.5, 2.5);
	glVertex2f(2.5, 2.5);
	glVertex2f(2.5, -2.5);
	glEnd();
	glPopMatrix();
 
 
	glPushMatrix();
	glTranslatef(-10 + angle, 0, 0);
	glRotatef(45, 0, 0, 1);
	glBegin(GL_QUADS);//рисуем квадрат
	glColor3ub(0, 0, 0);//цвет
	glVertex2f(-2.5, -2.5);
	glVertex2f(-2.5, 2.5);
	glVertex2f(2.5, 2.5);
	glVertex2f(2.5, -2.5);
	glEnd();
	glPopMatrix();
 
	glPushMatrix();
	glTranslatef(0, -10 + angle, 0);
	glRotatef(25, 0, 0, 1);
	glBegin(GL_QUADS);//рисуем квадрат
	glColor3ub(0, 0, 0);//цвет
	glVertex2f(-2.5, -2.5);
	glVertex2f(-2.5, 2.5);
	glVertex2f(2.5, 2.5);
	glVertex2f(2.5, -2.5);
	glEnd();
	glPopMatrix();
 
	glPushMatrix();
	glTranslatef(10 - angle, 0, 0);
	glRotatef(65, 0, 0, 1);
	glBegin(GL_QUADS);//рисуем квадрат
	glColor3ub(0, 0, 0);//цвет
	glVertex2f(-2.5, -2.5);
	glVertex2f(-2.5, 2.5);
	glVertex2f(2.5, 2.5);
	glVertex2f(2.5, -2.5);
	glEnd();
	glPopMatrix();
	//glPopMatrix();
 
	glPopMatrix();
	glutSwapBuffers();
 
}
//установка таймера
void Timer(int)
{
	angle += 0.5 - aut;
	if (angle > 9.5)
	{
		aut = 0.5;
		angle2 += 5;
		sk -= 0.05;
		if (sk < 0.05)
		{
			angle = 0;
			sk = 1;
			aut = 0;
		}
	}
	cout << sk << endl;
	glutTimerFunc(50, Timer, 0);//обновлять экран каждые 15мсек
	glutPostRedisplay();
}
 
int main(int argc, char **argv) {
 
	// инициализация
	glutInit(&argc, argv);
	glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA);//double: буфер рисвания и буф сторонних вычислений
	glutInitWindowPosition(100, 100);//позиция окна
	glutInitWindowSize(500, 500);//размеры окна
	glutCreateWindow("Совмещение квадратов");//название окна
	glClearColor(1.0, 1.0, 1.0, 1.0);//цвет окна
	glOrtho(-5.0, 5.0, -5.0, 5.0, -5.0, 5.0);//установка границ
 
	glutDisplayFunc(paint);//вызов функции рисования
	glutReshapeFunc(proporsion);//вызов функции сохранения пропорций
	glutTimerFunc(0, Timer, 0);//вызов таймера
	glutMainLoop();//основной цикл
	return 1;
}

Прикрепленный файлРазмер
Basov-Tishenko_Alexandr_Sovmeshenie_Kvadratov.rar928.16 кб