Народный учебник по OpenGL


Урок 8. Смешивание - часть 2


Комментарий Rui Martins: более правильный путь состоит в том, чтобы вывести все прозрачные (с альфой < 1.0) полигоны после того, как Вы вывели полную сцену, и выводить их в обратном порядке глубины (сначала – дальние).

 

Это оттого, что смешивание двух полигонов (1 и 2) в различном порядке дает различные результаты, то есть если полигон 1 - самый близкий к наблюдателю, то нужно вывести полигон 2 и затем 1. Если провести аналогию с реальностью, то свет, проходящий сквозь эти два полигона (которые являются прозрачными), должен пройти сначала 2-й полигон и затем полигон 1 до того как достигнет глаза наблюдателя.

 

Вы должны СОРТИРОВАТЬ ПРОЗРАЧНЫЕ ПОЛИГОНЫ ПО ГЛУБИНЕ и выводить их ПОСЛЕ ТОГО, КАК БЫЛА ОТРИСОВАНА ПОЛНАЯ СЦЕНА с ВЫКЛЮЧЕННЫМ БУФЕРОМ ГЛУБИНЫ, или получится неправильно. Я знаю, что это иногда трудно, но это - правильный способ делать это.

Мы будем использовать код от урока семь. Мы начинаем, прибавляя две новых переменных в начало кода. Я приведу повторно полный раздел кода для ясности.

 

#include <windows.h>    // Заголовочный файл для Windows

#include <stdio.h>      // Заголовочный файл для стандартного ввода/вывода

#include <gl\gl.h>      // Заголовочный файл для библиотеки OpenGL32

#include <gl\glu.h>     // Заголовочный файл для для библиотеки GLu32

#include <gl\glaux.h>   // Заголовочный файл для библиотеки GLaux

 

 

HDC          hDC=NULL;  // приватный контекст устройства GDI

HGLRC        hRC=NULL;  // постоянный контекст рендеринга

HWND         hWnd=NULL; // содержит дискриптор нашего окна

HINSTANCE    hInstance; // содержит экземпляр нашего приложения

 

 

bool        keys[256];       // массив для процедуры обработки клавиатуры

bool        active=TRUE;     // флаг активности окна, по умолчанию TRUE

bool        fullscreen=TRUE; // флаг полноэкранного режима, по умолчанию полный экран

 

bool  blend; // Смешивание НЕТ/ДА? (НОВОЕ)

bool  light; // Освещение Вкл./Выкл.

bool  lp;    // L Нажата?




Начало  Назад  Вперед



Книжный магазин