Студопедия — Словарь состоит из отдельных словарных статей, расположенных в алфавитном порядке.
Студопедия Главная Случайная страница Обратная связь

Разделы: Автомобили Астрономия Биология География Дом и сад Другие языки Другое Информатика История Культура Литература Логика Математика Медицина Металлургия Механика Образование Охрана труда Педагогика Политика Право Психология Религия Риторика Социология Спорт Строительство Технология Туризм Физика Философия Финансы Химия Черчение Экология Экономика Электроника

Словарь состоит из отдельных словарных статей, расположенных в алфавитном порядке.






 

Преобразования объектов

 

В OpenGL используются как основные три системы координат: левосторонняя, правосторонняя и оконная. Первые две системы являются трехмерными и отличаются друг от друга направлением оси z: в правосторонней она направлена на наблюдателя, в левосторонней – в глубину экрана. Ось x направлена вправо относительно наблюдателя, ось y – вверх.

 

Левосторонняя система используется для задания значений параметрам команды gluPerspective(), glOrtho(), которые будут рассмотрены в пункте 0. Правосторонняя система координат используется во всех остальных случаях. Отображение трехмерной информации происходит в двумерную оконную систему координат.

 

Рис. 2 Системы координат в OpenGL

 

Строго говоря, OpenGL позволяет путем манипуляций с матрицами моделировать как правую, так и левую систему координат. Но на данном этапе лучше пойти простым путем и запомнить: основной системой координат OpenGL является правосторонняя система.

 

Работа с матрицами

 

Для задания различных преобразований объектов сцены в OpenGL используются операции над матрицами, при этом различают три типа матриц: модельно-видовая, матрица проекций и матрица текстуры. Все они имеют размер 4x4. Видовая матрица определяет преобразования объекта в мировых координатах, такие как параллельный перенос, изменение масштаба и поворот. Матрица проекций определяет, как будут проецироваться трехмерные объекты на плоскость экрана (в оконные координаты), а матрица текстуры определяет наложение текстуры на объект.

 

Умножение координат на матрицы происходит в момент вызова соответствующей команды OpenGL, определяющей координату (как правило, это команда glVertex*)

 

Для того чтобы выбрать, какую матрицу надо изменить, используется команда:void glMatrixMode (GLenum mode)

 

вызов которой со значением параметра mode равным GL_MODELVIEW, GL_PROJECTION, или GL_TEXTURE включает режим работы с модельно-видовой матрицей, матрицей проекций, или матрицей текстуры соответственно. Для вызова команд, задающих матрицы того или иного типа, необходимо сначала установить соответствующий режим.

 

Для определения элементов матрицы текущего типа вызывается командаvoid glLoadMatrix[f d] (GLtype *m)

 

 

где m указывает на массив из 16 элементов типа float или double в соответствии с названием команды, при этом сначала в нем должен быть записан первый столбец матрицы, затем второй, третий и четвертый. Еще раз обратим внимание: в массиве m матрица записана по столбцам.

 

Командаvoid glLoadIdentity (void)

 

заменяет текущую матрицу на единичную.

 

Часто бывает необходимо сохранить содержимое текущей матрицы для дальнейшего использования, для чего применяются команды void glPushMatrix (void)

void glPopMatrix (void)

 

Они записывают и восстанавливают текущую матрицу из стека, причем для каждого типа матриц стек свой. Для модельно-видовых матриц его глубина равна как минимум 32, для остальных – как минимум 2.

 

Для умножения текущей матрицы на другую матрицу используется командаvoid glMultMatrix[f d] (GLtype *m)

 

 

где параметр m должен задавать матрицу размером 4x4. Если обозначить текущую матрицу за М, передаваемую матрицу за T, то в результате выполнения команды glMultMatrix текущей становится матрица M * T. Однако обычно для изменения матрицы того или иного типа удобно использовать специальные команды, которые по значениям своих параметров создают нужную матрицу и умножают ее на текущую.

 

Модельно-Видовые преобразования

 

К модельно-видовым преобразованиям будем относить перенос, поворот и изменение масштаба вдоль координатных осей. Для проведения этих операций достаточно умножить на соответствующую матрицу каждую вершину объекта и получить измененные координаты этой вершины:

 

(x’, y’, z’, 1)T = M * (x, y, z, 1)T

 

где M – матрица модельно-видового преобразования. Перспективное преобразование и проектирование производится аналогично. Сама матрица может быть создана с помощью следующих команд:void glTranslate[f d] (GLtype x, GLtype y, GLtype z)

void glRotate[f d] (GLtype angle, GLtype x, GLtype y,

GLtype z)

void glScale[f d] (GLtype x, GLtype y, GLtype z)

 

 

glTranlsate*() производит перенос объекта, прибавляя к координатам его вершин значения своих параметров.

 

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

 

glScale*() производит масштабирование объекта (сжатие или растяжение) вдоль вектора (x,y,z), умножая соответствующие координаты его вершин на значения своих параметров.

 

Все эти преобразования изменяют текущую матрицу, а поэтому применяются к примитивам, которые определяются позже. В случае, если надо, например, повернуть один объект сцены, а другой оставить неподвижным, удобно сначала сохранить текущую видовую матрицу в стеке командой glPushMatrix(), затем вызвать glRotate() с нужными параметрами, описать примитивы, из которых состоит этот объект, а затем восстановить текущую матрицу командой glPopMatrix().

 

Кроме изменения положения самого объекта, часто бывает необходимо изменить положение наблюдателя, что также приводит к изменению модельно-видовой матрицы. Это можно сделать с помощью командыvoid gluLookAt

(GLdouble eyex, GLdouble eyey, GLdouble eyez,

GLdouble centerx, GLdouble centery, GLdouble centerz,

GLdouble upx, GLdouble upy, GLdouble upz)

 

 

где точка (eyex,eyey,eyez) определяет точку наблюдения, (centerx, centery, centerz) задает центр сцены, который будет проектироваться в центр области вывода, а вектор (upx,upy,upz) задает положительное направление оси у, определяя поворот камеры. Если, например, камеру не надо поворачивать, то задается значение (0,1,0), а со значением (0,-1,0) сцена будет перевернута.

 

Строго говоря, эта команда совершает перенос и поворот объектов сцены, но в таком виде задавать параметры бывает удобнее. Следует отметить, что вызывать команду gluLookAt() имеет смысл перед определением преобразований объектов, когда модельно-видовая матрица равна единичной.

 

Запомните: В общем случае матричные преобразования в OpenGL нужно записывать в обратном порядке. Например, если вы хотите сначала повернуть объект, а затем передвинуть его, сначала вызовите команду glTranslate(), а только потом – glRotate(). Ну а после этого определяйте сам объект.

 

Исходный код программы:

 

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

using System.OpenGL;

 

namespace Furniture

{

public partial class Form1: Form

{

public Form1()

{

InitializeComponent();

}

 

private void openGLControl1_PrimaryPaint(object sender, EventArgs e)

{

GL.glDisable(GL.GL_LIGHTING);

GL.glColor3ub(100,100,0);

 

GL.glMatrixMode(GL.GL_MODELVIEW);

var d = new double[] { 1, 0, 0, 0,

0, 1, 0, 0,

0, 0, 1, 0,

0, 0, 500,1 };

GL.glPushMatrix();

GL.glMultMatrixd(d);

 

GL.glBegin(GL.GL_QUADS);

//полотно

//GL.glVertex3d(-2000, 0, -2000);

//GL.glVertex3d(-2000, 0, 2000);

//GL.glVertex3d(2000, 0, 2000);

//GL.glVertex3d(2000, 0, -2000);

 

 

GL.glColor3ub(100, 200, 0);

//шифер

GL.glVertex3d(250, 300, 250);

GL.glVertex3d(750, 300, 250);

GL.glVertex3d(750, 500, 500);

GL.glVertex3d(250, 500, 500);

 

GL.glVertex3d(250, 500, 500);

GL.glVertex3d(750, 500, 500);

GL.glVertex3d(750, 300, 750);

GL.glVertex3d(250, 300, 750);

 

GL.glColor3ub(100, 200, 100);

//Лаги(бревна)

GL.glVertex3d(250, 300, 250);

GL.glVertex3d(750, 300, 250);

GL.glVertex3d(750, 300, 750);

GL.glVertex3d(250, 300, 750);

 

GL.glColor3ub(50, 99, 50);

//Стены ==========================>

GL.glVertex3d(250, 0, 300);

GL.glVertex3d(250, 300, 300);

GL.glVertex3d(750, 300, 300);

GL.glVertex3d(750, 0, 300);

 

GL.glVertex3d(250, 0, 700);

GL.glVertex3d(250, 300, 700);

GL.glVertex3d(750, 300, 700);

GL.glVertex3d(750, 0, 700);

 

GL.glVertex3d(250, 0, 300);

GL.glVertex3d(250, 300, 300);

GL.glVertex3d(250, 300, 700);

GL.glVertex3d(250, 0, 700);

 

GL.glVertex3d(750, 0, 300);

GL.glVertex3d(750, 300, 300);

GL.glVertex3d(750, 300, 350);

GL.glVertex3d(750, 0, 350);

 

GL.glVertex3d(750, 0, 650);

GL.glVertex3d(750, 300, 650);

GL.glVertex3d(750, 300, 700);

GL.glVertex3d(750, 0, 700);

 

GL.glVertex3d(750, 255, 350);

GL.glVertex3d(750, 300, 350);

GL.glVertex3d(750, 300, 650);

GL.glVertex3d(750, 255, 650);

//Стены ==========================<

 

GL.glEnd();

//треугольники

GL.glColor3ub(100, 100, 100);

GL.glBegin(GL.GL_TRIANGLES);

 

GL.glVertex3d(250, 300, 250);

GL.glVertex3d(250, 300, 750);

GL.glColor3ub(0, 0, 0);

GL.glVertex3d(250, 500, 500);

 

GL.glColor3ub(100, 100, 100);

GL.glVertex3d(750, 300, 250);

GL.glVertex3d(750, 300, 750);

GL.glColor3ub(0, 0, 0);

GL.glVertex3d(750, 500, 500);

 

GL.glEnd();

 

GL.glPopMatrix();

 

GL.glBegin(GL.GL_QUADS);

//полотно

//GL.glVertex3d(-2000, 0, -2000);

//GL.glVertex3d(-2000, 0, 2000);

//GL.glVertex3d(2000, 0, 2000);

//GL.glVertex3d(2000, 0, -2000);

 

 

GL.glColor3ub(100, 200, 0);

//шифер

GL.glVertex3d(250, 300, 250);

GL.glVertex3d(750, 300, 250);

GL.glVertex3d(750, 500, 500);

GL.glVertex3d(250, 500, 500);

 

GL.glVertex3d(250, 500, 500);

GL.glVertex3d(750, 500, 500);

GL.glVertex3d(750, 300, 750);

GL.glVertex3d(250, 300, 750);

 

GL.glColor3ub(100, 200, 100);

//Лаги(бревна)

GL.glVertex3d(250, 300, 250);

GL.glVertex3d(750, 300, 250);

GL.glVertex3d(750, 300, 750);

GL.glVertex3d(250, 300, 750);

 

GL.glColor3ub(50, 99, 50);

//Стены ==========================>

GL.glVertex3d(250, 0, 300);

GL.glVertex3d(250, 300, 300);

GL.glVertex3d(750, 300, 300);

GL.glVertex3d(750, 0, 300);

 

GL.glVertex3d(250, 0, 700);

GL.glVertex3d(250, 300, 700);

GL.glVertex3d(750, 300, 700);

GL.glVertex3d(750, 0, 700);

 

GL.glVertex3d(250, 0, 300);

GL.glVertex3d(250, 300, 300);

GL.glVertex3d(250, 300, 700);

GL.glVertex3d(250, 0, 700);

 

GL.glVertex3d(750, 0, 300);

GL.glVertex3d(750, 300, 300);

GL.glVertex3d(750, 300, 350);

GL.glVertex3d(750, 0, 350);

 

GL.glVertex3d(750, 0, 650);

GL.glVertex3d(750, 300, 650);

GL.glVertex3d(750, 300, 700);

GL.glVertex3d(750, 0, 700);

 

GL.glVertex3d(750, 255, 350);

GL.glVertex3d(750, 300, 350);

GL.glVertex3d(750, 300, 650);

GL.glVertex3d(750, 255, 650);

//Стены ==========================<

 

GL.glEnd();

//треугольники

GL.glColor3ub(100, 100, 100);

GL.glBegin(GL.GL_TRIANGLES);

 

GL.glVertex3d(250, 300, 250);

GL.glVertex3d(250, 300, 750);

GL.glColor3ub(0, 0, 0);

GL.glVertex3d(250, 500, 500);

 

GL.glColor3ub(100, 100, 100);

GL.glVertex3d(750, 300, 250);

GL.glVertex3d(750, 300, 750);

GL.glColor3ub(0, 0, 0);

GL.glVertex3d(750, 500, 500);

 

GL.glEnd();

 

 

}

 

private void выходToolStripMenuItem_Click(object sender, EventArgs e)

{

this.Close();

}

 

private void оПрограммеToolStripMenuItem_Click(object sender, EventArgs e)

{

MessageBox.Show("HELLO OpenGL!!!:)", "HELLO!!!");

}

}

}

 

 

Скриншот программы:

 

 

 

Словарь состоит из отдельных словарных статей, расположенных в алфавитном порядке.

Омонимы маркируются стоящими перед ними римскими цифрами. Например,

I comparo - приготавливать; II comparo – сравнивать. Слова, различающиеся только количеством гласного, не рассматриваются как омонимы.

В отличие от книжных словарей в данном словаре для всех глаголов приведены развёрнутые, а не сокращенные, формы перфекта, супина и инфекта. Аналогично для прила-гательных и местоимений приведены полностью формы для все родов. Все приставки не отделены дефисом, а написаны слитно.

Словарь составлен на базе 3 словарей, приложенных к следующим учебникам для студентов вузов и гимназий:

1. Н.Л.Кацман, З.А. Покровская. Латинский язык. 6-ое издание, М., Владос, 2003.

2. Латинский язык (под редакцией В.Н.Ярхо, В.И.Лободы). 7-ое издание, М.,

Высшая школа, 2004.

3. Я.М.Боровский, А.В.Болдырев. Учебник латинского языка для гуманитарных факультетов университетов. 4-ое издание, М., Высшая школа, 1975.

4. А.В.Подосинов, Н.И.Щавелева. Введение в латинский язык и античную культуру. Учебное пособие для гимназий, лицеев и школ с гуманитарным профилем (в 5 частях), М., Издательская группа «Прогресс», 1994.

Кроме того, словарь дополнен словами, приведенными в самих учебниках, но отсутствующими в их словарях. При корректировке словаря также использованы:

1. «Латинско-русский словарь» (около 20 000 слов), составленный А.М.Малининым,

Государственное издательство иностранных и национальных словарей, М., 1952.

2. И.Х. Дворецкий. Латинско-русский словарь (около 50 000 слов),

Издание 3-ье, исправленное, М., Русский язык, 1986.

Словарь предназначен для учащихся и студентов, изучающих латинский язык.

Поиск наобходимого слова производится с помощью команды «Найти» (запускается кнопкой «Правка»). Данная версия словаря позволяет найти латинское слово, введя русское слово или словосочетание, например, «сила духа», «упорное молчание». Для поиска перевода латинского слова на русский следует пользоваться второй версией словаря (без указания количества слога). При вводе словосочетаний не допускаются дополнительные пробелы между словами.

Составитель словаря может выслать бесплатно по отдельному запросу некоторые грамматические материалы, которые можно потом распечатать и использовать для более быстрого усвоения грамматики латинского языка.

Составитель просит все замечания направлять по E-mail: [email protected]. На обе версии словаря не поставлена защита с той целью, чтобы пользователь мог сам исправить замеченные опечатки и внести необходимые, на его взгляд, дополнения или изменения.

Поярков Евгений Петрович, г. Северск Томской области, тел. 8 (3823) 56-42-80.

 

ā ă ē ĕ ī ĭ ō ŏ ū ŭ;







Дата добавления: 2015-10-19; просмотров: 433. Нарушение авторских прав; Мы поможем в написании вашей работы!



Практические расчеты на срез и смятие При изучении темы обратите внимание на основные расчетные предпосылки и условности расчета...

Функция спроса населения на данный товар Функция спроса населения на данный товар: Qd=7-Р. Функция предложения: Qs= -5+2Р,где...

Аальтернативная стоимость. Кривая производственных возможностей В экономике Буридании есть 100 ед. труда с производительностью 4 м ткани или 2 кг мяса...

Вычисление основной дактилоскопической формулы Вычислением основной дактоформулы обычно занимается следователь. Для этого все десять пальцев разбиваются на пять пар...

Хронометражно-табличная методика определения суточного расхода энергии студента Цель: познакомиться с хронометражно-табличным методом опреде­ления суточного расхода энергии...

ОЧАГОВЫЕ ТЕНИ В ЛЕГКОМ Очаговыми легочными инфильтратами проявляют себя различные по этиологии заболевания, в основе которых лежит бронхо-нодулярный процесс, который при рентгенологическом исследовании дает очагового характера тень, размерами не более 1 см в диаметре...

Примеры решения типовых задач. Пример 1.Степень диссоциации уксусной кислоты в 0,1 М растворе равна 1,32∙10-2   Пример 1.Степень диссоциации уксусной кислоты в 0,1 М растворе равна 1,32∙10-2. Найдите константу диссоциации кислоты и значение рК. Решение. Подставим данные задачи в уравнение закона разбавления К = a2См/(1 –a) =...

Огоньки» в основной период В основной период смены могут проводиться три вида «огоньков»: «огонек-анализ», тематический «огонек» и «конфликтный» огонек...

Упражнение Джеффа. Это список вопросов или утверждений, отвечая на которые участник может раскрыть свой внутренний мир перед другими участниками и узнать о других участниках больше...

Влияние первой русской революции 1905-1907 гг. на Казахстан. Революция в России (1905-1907 гг.), дала первый толчок политическому пробуждению трудящихся Казахстана, развитию национально-освободительного рабочего движения против гнета. В Казахстане, находившемся далеко от политических центров Российской империи...

Studopedia.info - Студопедия - 2014-2024 год . (0.011 сек.) русская версия | украинская версия