Подскажите, пожалуйста, планируете ли вы возобновление программ высшего образования? Если да, есть ли какие-то примерные сроки? Спасибо! |
Текстура
Настройка параметров отображения текстуры
Для настройки параметров отображения текстуры, которые используются при изменении её положения в пространстве и масштабировании, используется команда 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.
Описание | OpenTK, C# | Object Pascal |
---|---|---|
Функция увеличения текстуры при масштабировании |
TextureParameterName. TextureMagFilter |
GL_TEXTURE_MAG_FILTER |
Функция уменьшения текстуры при масштабировании |
TextureParameterName. TextureMinFilter |
GL_TEXTURE_MIN_FILTER |
Описание | 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.
При формировании сложной сцены может потребоваться, чтобы одни объекты отображались с текстурой, а другие – без неё. В этом случае необходимо перед формированием одних объектов включать режим отображения текстуры, а перед формированием других объектов отключать формирование текстуры.