chiona Ответов: 0

Direct2d вершинный затененный треугольник / прямоугольник эквивалент GDI+ graphicspath


Поэтому я работал над неуправляемой системой C++ 2D MFC в Visual Studio 2013 с использованием GDI+ (document View architecture). Мне нужны простые фигуры, затененные от каждой вершины фигуры - либо треугольник с цветом в каждом углу, смешивающий эти цвета с интерьером, либо прямоугольник, делающий то же самое.

В GDI plus это довольно просто:

using namespace Gdiplus;
void DrawGradientTriangle( Graphics &rGraphics )
{
	Gdiplus::GraphicsPath gpath;
	gpath.AddLine( 100, 400, 200, 400 );
	gpath.AddLine( 200, 400, 150, 300 );
	gpath.CloseFigure();

	int nColorCount = 3;
	Color agdiClr[] =
	{
		Color::Red,
		Color::Green,
		Color::Blue
	};

	PathGradientBrush gbrush( &gpath );
	gbrush.SetSurroundColors( agdiClr, &nColorCount );
	gbrush.SetCenterColor( Color::White );
	rGraphics.FillPath( &gbrush, &gpath );
}

Однако у меня достаточно этих форм, чтобы аппаратное ускорение было оценено по достоинству, поэтому я хотел бы перейти на D2D. Windows7-это цель, и я понимаю, что аппаратное ускорение не обязательно обеспечивается GDI+ в более поздних ОС.

Есть ли какой-нибудь эквивалент этому в Direct2D? Я смог заставить большинство аспектов системы хорошо работать в D2D, но не нашел никакого удобного способа имитировать описанное выше поведение. Я знаю, что это можно сделать в Direct3D, но инфраструктура для этого в программе mfc немного одиозна, и я не в восторге от того, чтобы идти в этом направлении.

Любое направление было бы очень ценно.

Что я уже пробовал:

Я просмотрел более актуальные варианты в D2D, особенно рисование градиентной сетки (см. https://github.com/Microsoft/Windows-universal-samples/blob/master/Samples/D2DGradientMesh/README.md) но эти функции, по-видимому, поддерживаются только в Windows10 или более поздней версии.

0 Ответов