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

Выявление ошибок при работе с библиотекой OpenGL

< Лекция 12 || Лекция 13: 12 || Лекция 14 >

Краткие итоги

Для выявления ошибок, связанных с некорректным использованием команд OpenGL и их параметров, может использоваться команда GetError.

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

Кроме того, для отладки приложений OpenGL могут использоваться дополнительные инструменты, такие как: GLIntercept ( http://glintercept.nutty.org), OpenGL debugging utility ( http://www.4crawler.com/Developer/VisualWorkstation/OpenGLdebug/index.shtml), программы GLExpert и DEBugger, входящие в состав NVPerfKit ( http://developer.nvidia.com/nvidia-perfkit).

Упражнения. Текстура

Пример выполнения задания

Задание: На поверхность изображения цилиндра, созданного в упражнении № 1 набора для практики № 2, наложите изображение текстуры, которое хранится на диске в файле формата BMP. Предварительно данный файл необходимо создать в каком-либо графическом редакторе.

Выполнение задания

Для загрузки изображения текстуры из файла формата BMP можно воспользоваться примерами из "Текстура" . Так же потребуется объявить глобальную переменную для хранения информации и текстуре:

C#:
  Bitmap bmpTex;
Object Pascal:
  var 
    tex: TGLTexture;

Инициализацию текcтуры можно выполнить в обработчике события формы Load в программе на C# и в обработчике события формы OnCreate в программе на Object Pascal:

C#:

bmpTex = new Bitmap("OGL64x64.bmp");
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, 
  (int)TextureMinFilter.Linear);
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMagFilter, 
  (int)TextureMagFilter.Linear);
GLTexture.LoadTexture(bmpTex);
GL.Enable(EnableCap.Texture2D);

Object Pascal:

LoadTextureFromBMP('OGL64x64.bmp ', tex);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, tex.Width, tex.Height,
0, GL_RGB, GL_UNSIGNED_BYTE, @tex.Data[0]);
glEnable(GL_TEXTURE_2D);

В выше приведенном варианте инициализации текстуры выполняется загрузка изображения из файла, определение алгоритмов масштабирования текстуры (TexParameter), определение изображения в качестве текущей текстуры (TexImage2D) и включение режима отображения текстуры (Enable).

Фрагмент программы, формирующий изображение цилиндра, необходимо дополнить заданием координат текстуры для каждой формируемой вершины с помощью команды TexCoord:

C#:
  GL.Color3(0.9f, 0.9f, 0.9f);
  GL.PolygonMode(MaterialFace.FrontAndBack, mode);
  GL.Begin(BeginMode.QuadStrip);
  double r = 0.5;
  int n = 20;
  for (int i = 0; i <= n; ++i)
  {
    double a = 2 * Math.PI/n * i;
    double x = r * Math.Cos(a);
    double y = r * Math.Sin(a);
    GL.TexCoord2((double)i / n, 1); GL.Vertex3(x, y, -0.5);
    GL.TexCoord2((double)i / n, 0); GL.Vertex3(x, y, 0.5);
  }
  GL.End();
  GL.Disable(EnableCap.Texture2D);
Object Pascal:
  glColor3f(0.9, 0.9, 0.9);
  glPolygonMode(GL_FRONT_AND_BACK, mode);
  glBegin(GL_QUAD_STRIP);
  r := 0.5;
  n := 20;
  for i := 0 to n do
  begin
    a := 2*pi/n * i;
    x := r * Cos(a);
    y := r * Sin(a);
    glTexCoord2f(i/n, 1); glVertex3d(x, y, -0.5);
    glTexCoord2f(i/n, 0); glVertex3d(x, y, 0.5);
  end;
  glEnd;

Пример наложения текстуры на поверхность цилиндра приведен на рис. 12.1.

Пример наложения текстуры на цилиндр

Рис. 12.1. Пример наложения текстуры на цилиндр

Задание

На поверхность вращения, полученную при выполнении задания из набора для практики № 2, наложите изображение текстуры, которое хранится на диске в файле формата BMP. Предварительно данный файл необходимо создать в каком-либо графическом редакторе.

< Лекция 12 || Лекция 13: 12 || Лекция 14 >
Владислав Нагорный
Владислав Нагорный

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

Спасибо!

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

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

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

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

 

Александр Сивков
Александр Сивков
Россия, Екатеринбург
Алиса Алиса
Алиса Алиса
Украина