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