IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

> Система координат и примитивы OpenGL
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 48
Пол: Мужской

Репутация: -  0  +


В общем, нужно отобразить простую геометрическую фигуру в пределах нормализованного объема видимости.
Нужно нарисовать пятиугольник с двумя диагоналями, используя геометрические примитивы: треугольник (GL_TRIANGLES) и отрезок (GL_LINES), а также использовать:
Команды инициализации:
auxInitWindowPosition, auxInitWindowSize, glutInitWindowPosition, glutInitWindowSize.
Команды настройки цветов фона и изображения: glClearColor, glClear, glColor.
Команды рисования геометрических примитивов: glVertex, glBegin – glEnd.
Команды задания стиля вычерчивания: glLineWidth, glEnable(GL_LINE_SMOOTH), glEnable(GL_POINT_SMOOTH).
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Новичок
*

Группа: Пользователи
Сообщений: 48
Пол: Мужской

Репутация: -  0  +


TarasBer,
спасибо за помощь!
Насчёт 2-й картинки - там косяк - не нарисована линия вообще, а должна идти вниз - в принципе, обычно координата Z так и ставится в системах координат.
Кому интересно, вот ответ на вопрос, что будет, если задать Z=5:
Если задать координаты z = 5 одной из вершин треугольника (например, верхней вершины левого треугольника), то можно увидеть эффект, обусловленный тем, что точка выходит за границу видимости (проецируется), и часть фигуры при этом отсекается.

Если Z=0...1, то точка находится в границе видимости, и фигура не отсекается при этом.

З.Ы. Программный код задачки на Delphi:

unit Unit1;
interface

uses
Windows, Messages, Forms, Dialogs, Classes, Controls, ExtCtrls, StdCtrls,
OpenGL;

type
TForm1 = class(TForm)
procedure FormPaint(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure FormCreate(Sender: TObject);

private
hrc: HGLRC;
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

{=======================Рисование окна=======================}
procedure TForm1.FormPaint(Sender: TObject); // форма рисования
begin

wglMakeCurrent(Canvas.Handle, hrc); // прорисовка поля
glClearColor(0.9,0.6,0.2,1.0); // цвет фона
glClear(GL_COLOR_BUFFER_BIT); // очистка буфера цвета
glLineWidth(5); // толщина линий
glEnable (GL_LINE_SMOOTH); // сглаживание линий

glPolygonMode(GL_Front_and_Back, GL_LINE);
glBegin (GL_TRIANGLES);
{===== рисуем треугольник слева =====}
glColor3f (0.3,0.4,0.7); // цвет линий треугольника
glVertex3f (-0.4, 0, 0); // средняя вершина
glVertex3f (0, 0.4, 0); // верхняя вершина
glVertex3f (-0.3, -0.4, 0); // нижняя вершина
{===== рисуем треугольник справа =====}
glColor3f (0.3,0.4,0.7); // цвет линий треугольника
glVertex3f (0.4, 0, 0); // средняя вершина
glVertex3f (0, 0.4, 0); // верхняя вершина
glVertex3f (0.3, -0.4, 0); // нижняя вершина
{===== рисуем треугольник в центре =====}
glColor3f (0.3,0.4,0.7); // цвет линий треугольника
glVertex3f (-0.3, -0.4, 0); // средняя вершина
glVertex3f (0, 0.4, 0); // верхняя вершина
glVertex3f (0.3, -0.4, 0); // нижняя вершина
glEnd;

glBegin (GL_LINES);
glColor3f (0.8,0.2,0.6); // цвет линии
glVertex3f (-0.3, -0.4, 0); // координаты нижней вершины левой линии
glVertex3f (0, 0.4, 0); // координаты верхней вершины левой линии
glColor3f (0.8,0.2,0.6); // цвет линии
glVertex3f (0.3, -0.4, 0); // координаты нижней вершины правой линии
glVertex3f (0, 0.4, 0); // координаты верхней вершины правой линии
glEnd;

SwapBuffers(Canvas. Handle); // содержимое буфера - на экран

end;

{=======================Формат пикселя=======================}
procedure SetDCPixelFormat (hdc : HDC);
var
pfd : TPIXELFORMATDESCRIPTOR;
nPixelFormat : Integer;
begin
FillChar(pfd, SizeOf(pfd), 0);
nPixelFormat := ChoosePixelFormat (hdc, @pfd);
SetPixelFormat (hdc, nPixelFormat, @pfd);
end;

{=======================Создание формы=======================}
procedure TForm1.FormCreate(Sender: TObject);
begin
SetDCPixelFormat(Canvas.Handle);
hrc := wglCreateContext(Canvas.Handle);
end;

{==================Конец работы приложения==================}
procedure TForm1.FormDestroy(Sender: TObject);
begin
wglDeleteContext(hrc);
end;

end.


При этом крайне рекомендуется сделать размер выводимого окна с одинаковым разрешением, например, 600Х600, чтобы координаты ложились на окно соответственно заданным координатам, иначе будет искажения.

Сообщение отредактировано: mitz -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
mitz   Система координат и примитивы OpenGL   14.10.2010 17:46
TarasBer   Документация по OpenGL для Delphi есть? Если нет, …   14.10.2010 19:33
mitz   Документация по OpenGL для Delphi есть? Если нет,…   19.10.2010 21:19
mitz   В общем, программу я сделал, только подскажите, по…   20.10.2010 1:08
TarasBer   glBegin (GL_TRIANGLE_FAN); glVertex2f (0, 0); …   20.10.2010 13:34
mitz   А почему 4 точки задаются? Просто у меня при зад…   22.10.2010 0:39
mitz   Ну вот, что-то сделал вроде этого, получилось врод…   22.10.2010 3:57
TarasBer   А, я проглядел лишнее glVertex2f (0, 0); glBegin…   22.10.2010 13:44
TarasBer   http://tfc.duke.free.fr/old/models/images/05.gif …   22.10.2010 15:36
mitz   TarasBer, спасибо за помощь! Вот я нарисовал э…   5.11.2010 2:22
TarasBer   А какой эффект наблюдается? То, что отсекается час…   5.11.2010 2:38
mitz   А какой эффект наблюдается? То, что отсекается ча…   5.11.2010 2:51
TarasBer   > И здесь правосторонняя или левосторонняя (я п…   5.11.2010 2:59
mitz   > И здесь правосторонняя или левосторонняя (я …   5.11.2010 4:24
TarasBer   Ничего не понял. Повтори вопрос с картинками.   5.11.2010 4:29
mitz   Ничего не понял. Повтори вопрос с картинками. Хо…   5.11.2010 5:20
TarasBer   Кхм... Не пугай меня так. Ось z на этой картинке в…   5.11.2010 15:50
mitz   TarasBer, спасибо за помощь! Насчёт 2-й картин…   17.12.2010 17:59


 Ответить  Открыть новую тему 
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 20.05.2024 0:06
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name