Имеются экранные координаты вершин - как закрасить с нанесением текстуры ( без OpenGL/DirectX )? Или хотя бы дайте ссылки.
Стандартным апи не подходит? Создаешь браш из битмапа и закрашиваешь треугольник (хреново выразился, но, думаю, ты понял).
OverMind Ну что я могу сказать... Берем треугольник, берем bounding box к нему, и, сканируя бокс решаем для каждого пикселя задачу о принадлежности точки треугольнику.
делал давно так: 1. есть три точки - по ним находим уравнения прямой (три коэффициента для каждой пары точек) 2. далее проходим от края до края. находим недостающую координату и выводим. Если заинтересует могу подробней написать
_DEN_ Попиксельно может получиться долго Можно попробовать так: 1.Создать регион равный треугольнику и закрасить его структурой (сделать на основе статика и STM_SETIMAGE) 2.Подвинуть треугольник-регион на то место, где нужно закрасить, и скопировать изображение прямоугольника, включающего регион, в memory DC. 3.Убрать регион (сделать невидимым) и по присылаемому для вышедшего наверх из-под региона окну WM_PAINT, зарисовать его BitBlt из memoryDC. Создание региона, присваивание ему текстуры, позиционирование над нужным местом можно делать для невидимого региона, чтобы не мозолить глаза, и быстрее будет, а когда все готово, показать.
ТАК ПОПЕРЛИ! делается так переходим в проекционные координаты (X,Y,Z)->(x,y,z,w) как переходить - бери opengl32.hlp от борланд Ц 4.5+ и там смотри проекционные матрицы (glPerspective) ` x/w, x/w z/w = координата точки =(X,Y,Z) U,V - координата текстуры(или компоненты цвета) U/w, V/w 1/w = можно интерполировать линейно - ошибка минимальна сперва находим самую верхнюю точку и от нее интерполируем X Y 1/Z (U/Z V/Z ...) по строкам - получим значения X1 X2 1/Z1 1/Z2 (U/Z)1 (U/Z)2 ... для каждой строки пикселов в многоугольнике далее мона прям на краях пощитать (U/Z)/(1/Z) и полученные значения линейно вдоль строки или квадратично(точность достаточная) или точно деля для каждого пикселя.
Зачем закрашивать треугольник? Как минимум, это значит 2 раза вычислять коорлинаты граничных пикселей придётся. Сразу рисуйте закрашенный (горизонталиными линиями).
cresta НА сколько я понял, комрада интересует именно алгоритм, а не средства GDI. Johnikum Для треугольников в пол экрана это может и нормально, но когда треугольников будет пару кило и они будут по 10-100 пикселей, это слишком долго. Narkomanius Во-первых однородные, а не проекционные. А во-вторых однородные координаты ни коим образом не относятся к алготирму растеризации треугольника. OverMind Оптимизируем пост № 6 Каждую строку бокса будем сканировать с двух сторон, прока не найдем начальный и конечный пиксель. После того как нашли - рисуем линию. Искать можно кусерчем Как это сделано в современных видяхах - хрен знает. Но скорее всего граничные отрезки не строятся, потому что в wireframe видяхи работают в 2-3 раза медленнее, чем с обычной заливкой.
Видяхи сразу рисуют треугольники текстурой, потому что рисовать границу, а потом заливать - это слишком долго.
с построчной растеризацией я полностью согласен, но какой смысл рисовать границу? - лишняя трата времени.