Опубликован: 02.12.2011 | Доступ: свободный | Студентов: 980 / 117 | Оценка: 5.00 / 4.00 | Длительность: 09:26:00
Специальности: Программист
Теги: .net, open source, opengl
Лекция 10:

Текстура

< Лекция 9 || Лекция 10: 123 || Лекция 11 >

Настройка параметров отображения текстуры

Для настройки параметров отображения текстуры, которые используются при изменении её положения в пространстве и масштабировании, используется команда TexParameter. Как и для многих других команд она реализуется в C# набором статических методов класса GL с различными типами параметров, а в Object Pascal – набором процедур с различным постфиксом и соотвествующими типами параметров. Ниже приведен вариант её реализация в C# и в Object Pascal для варианта, когда в качестве параметра передаётся целочисленное значение.

C#:
  void TexParameter(TextureTarget target, TextureParameterName pname, int param);
Object Pascal:
  procedure glTexParameteri (target, pname: GLenum; param: GLint);

Параметры процедуры:

  • target – тип текстуры для которой определяются параметры. На C# параметр должен быть равен значению Texture2D перечисления TextureTarget, в Object Pascal – значению GL_TEXTURE_2D.
  • pname – изменяемый параметр. Возможные значения приведены в таблица 9.1.
  • param – тип функции масштабирования изображения текстуры. Возможные значения приведены в таблица 9.2.
Таблица 9.1. Значения параметра pname команды TexParameter для библиотеки OpenTK (C#) и Object Pascal
Описание OpenTK, C# Object Pascal
Функция увеличения текстуры при масштабировании
TextureParameterName.
TextureMagFilter
GL_TEXTURE_MAG_FILTER
Функция уменьшения текстуры при масштабировании
TextureParameterName.
TextureMinFilter
GL_TEXTURE_MIN_FILTER
Таблица 9.2. Значения параметра param команды TexParameter для библиотеки OpenTK (C#) и Object Pascal
Описание OpenTK, C# Object Pascal
В качестве значения берется точка текстуры с ближайшими координатами TextureMinFilter.Nearest GL_NEAREST
В качестве значения берется среднеарифметическое значение на основе 4 точек рядом с координатами точки TextureMinFilter.Linear GL_LINEAR

В листинге 9.4 приведен пример загрузки и инициализации текстуры на C# с помощью метода LoadTexture из листинга 9.1 .

Bitmap bmpTex;
private void Form1_Load(object sender, EventArgs e)
{
bmpTex = new Bitmap("OGL64x64.bmp");
  
GLTexture.LoadTexture(bmpTex);
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, (int)TextureMinFilter.Nearest);
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMagFilter, (int)TextureMagFilter.Linear);
GL.Enable(EnableCap.Texture2D);
}
Листинг 9.4. Пример загрузки и инициализации текстуры на C# с использованием библиотеки OpenTK

В листинге 9.5 приведен пример загрузки и инициализации текстуры на Object Pascal с помощью процедуры LoadTextureFromBMP из листинга 9.3 .

Var
  Tex1: TGLTexture;
…
procedure TfrmGL.FormCreate(Sender: TObject);
begin
…
  LoadTextureFromBMP('..\OGL64x64.bmp',  Tex1);
  glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, Tex1.Width, Tex1.Height,
              0, GL_RGB, GL_UNSIGNED_BYTE, @Tex1.Data[0]);
  glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST);
  glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST); 
  glEnable(GL_TEXTURE_2D);
…
end;
Листинг 9.5. Пример загрузки и инициализации текстуры на Object Pascal

Для отображения текстуры, кроме загрузки текстуры и её инициализации, так же необходимо включить режим отображения текстуры с помощью команды Enable. Поэтому в листингах 9.4 и 9.5 после загрузки и инициализации текстуры вызывается команда Enable с параметром EnableCap.Texture2D на C# и параметром GL_TEXTURE_2D на Object Pascal для включения режима отображения текстуры. Для отключения режима отображения текстуры используется команда Disable.

При формировании сложной сцены может потребоваться, чтобы одни объекты отображались с текстурой, а другие – без неё. В этом случае необходимо перед формированием одних объектов включать режим отображения текстуры, а перед формированием других объектов отключать формирование текстуры.

< Лекция 9 || Лекция 10: 123 || Лекция 11 >
Владислав Нагорный
Владислав Нагорный

Подскажите, пожалуйста, планируете ли вы возобновление программ высшего образования? Если да, есть ли какие-то примерные сроки?

Спасибо!

Лариса Парфенова
Лариса Парфенова

1) Можно ли экстерном получить второе высшее образование "Программная инженерия" ?

2) Трудоустраиваете ли Вы выпускников?

3) Можно ли с Вашим дипломом поступить в аспирантуру?