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

Вход на сайт

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

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

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

Здравствуйте. Спасибо за проект. У меня вопрос, по какой причине определение принадлежности точки многоугольнику работает некорректно, если координаты из больших чисел состоят, например: int[] vertex = new int[] {...
Сейчас проверила нашла причину не запускания // Создание контекста воспроизведения OpenGL и привязка его к панели на форме OpenGLControl1:=TOpenGLControl.Create(Self); with OpenGLControl1 do begin Name:='OpenGLControl1'; //вот тут...
Ну..кажется что то пошло не так http://pp.usera...
Пример, к которому вы оставили комментарий строит именно то самое изображение на языке с#, которое вам необходимо. Отличается только цветовая палитра.

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

Рейтинг@Mail.ru
Скриншот к примеру
Среда программирования: 
Lazarus 1.0.14 win 64

Программа демонстрирует вращение четырехугольной пирамиды в OpenGL.

glTranlsatef() производит перенос объекта, прибавляя к координатам его вершин значения своих параметров.
glRotatef() производит поворот объекта против часовой стрелки на угол angle (измеряется в градусах) вокруг вектора (x,y,z).

Код программы: 

unit Unit1;
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
  ExtCtrls, OpenGLContext, GL, GLU;
 
type
 
  { TForm1 }
 
  TForm1 = class(TForm)
    Button1: TButton;
    OpenGLControl1: TOpenGLControl;
    Timer1: TTimer;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
    tri_rotationx: GLFloat;
    tri_rotationy: GLFloat;
    tri_rotationz: GLFloat;
    Speed:          Double;
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.lfm}
 
{ TForm1 }
 
procedure TForm1.Button1Click(Sender: TObject);
begin
  Timer1.Enabled := true;
end;
 
procedure TForm1.FormCreate(Sender: TObject);
begin
  Timer1.Enabled  := false;
  Timer1.Interval := 100;
  Speed := 1;
end;
 
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  glClearColor(0.6, 0.98, 0.6, 1.0);       // сделали зеленоватый фон
  glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  glEnable(GL_DEPTH_TEST);
 
  glMatrixMode(GL_PROJECTION);
  glLoadIdentity();
  gluPerspective(45.0, double(width) / height, 0.1, 100.0);
  glMatrixMode(GL_MODELVIEW);
  glLoadIdentity();
 
  glTranslatef(0.0, 0.0,-6.0);
  glRotatef(tri_rotationx, tri_rotationy, tri_rotationz, 0.0);
 
  glBegin(GL_TRIANGLES);
          glColor3f(0.52,0.44,1.0);// Сделали боковую сторону фиолетовой
 
          glVertex3f( 1.0, -1.0,-1.0);
          glVertex3f(1.0, -1.0,1.0);
          glVertex3f(0.0, 1.0, 0.0);
  glEnd();
 
  glBegin(GL_TRIANGLES);
          glColor3f(1.0,0.84,0.0);  // Сделали боковую сторону желтой
 
          glVertex3f( 1.0,-1.0, 1.0);
          glVertex3f(-1.0,-1.0, 1.0);
          glVertex3f(0.0,1.0,0.0);
  glEnd();
 
  glBegin(GL_TRIANGLES);
         glColor3f(0.94,0.5,0.5);// Сделали сторону  розовой
 
          glVertex3f(-1.0,-1.0,1.0);
          glVertex3f(-1.0, -1.0,-1.0);
          glVertex3f(0.0,1.0,0.0);
     glEnd();
 
  glBegin(GL_TRIANGLES);
          glColor3f(0.0,1.0,0.0);  // Сделали сторону  светло зеленой
 
          glVertex3f(-1.0,-1.0,-1.0);
          glVertex3f(1.0,-1.0,-1.0);
          glVertex3f(0.0, 1.0,0.0);
  glEnd();
 
  glBegin(GL_QUADS);// основание пирамиды
          glColor3f(1.0,0.51,0.28); // сделали основание рыжим
 
          glVertex3f( 1.0,-1.0, 1.0);
          glVertex3f(-1.0,-1.0, 1.0);
          glVertex3f(-1.0,-1.0,-1.0);
          glVertex3f( 1.0,-1.0,-1.0);
  glEnd();
 
  tri_rotationx += 5.15 * Speed;
  tri_rotationy += 5.15 * Speed;
  tri_rotationz += 20.0 * Speed;
 
  OpenGLControl1.SwapBuffers;
end;
 
end.

Прикрепленный файлРазмер
Piramida.rar607.83 кб