в формах Windows вы можете нарисовать изображение с тремя вершинами, указанными для нижних левых, верхних левых и верхних правых вершин, что позволяет вам наклонять или растягивать изображение, но не позволяет указать четвертую вершину, поэтому оно заканчивается выглядит как этот 3D-куб, но боковые текстуры имеют края одинаковой длины, поэтому он не соответствует форме правильно.
Я могу использовать текстурную кисть и матричное преобразование, чтобы он правильно заполнил сторону куба, но проблема в том, что текстура по-прежнему имеет одинаковый размер для всего «расстояния Z», поэтому она размещается плиткой, а не соответствует форме «3D», как показано здесь
Текстура стороны 3D-куба правильно заполняет многоугольник и «сжимается», но не "сжатый", поэтому не дает 3D-эффекта
поэтому мне просто интересно, есть ли какой-нибудь способ "правильно" преобразовать текстуру или изображение, чтобы оно правильно соответствовало форме многоугольника, и дать "3D"-эффект без чрезвычайно нелепого, утомительного и требовательного к производительности метода, такого как изменение экземпляра текстуры непосредственно перед рендерингом во время выполнения
Я пытался использовать графику.drawImage({image file}, {3 точки вершин, которым нужно соответствовать}); чтобы нарисовать изображение, чтобы примерно заполнить пробел, и я также преобразовал грани из четырехугольников в треугольники, чтобы разместить их таким образом, но текстура в конечном итоге растягивается и поворачивается неправильно с помощью этого метода, если только я не могу преобразовать нарисованное изображение так, чтобы рендеринг с помощью треугольников не сжимал визуализируемую текстуру.
Я пытался использовать текстурную кисть и Graphics.fillpolygon({текстурная кисть}, {все 4 точки вершины лица}); с примененным к нему матричным преобразованием, хотя оно немного более трудоемко, чем рисование изображения, оно полностью заполняет многоугольник, но также не дает желаемого эффекта «сжатия» на текстуре изображения, матричные преобразования форм Windows имеют масштаб x, вращение x, вращение y, масштабирование y, перевод x и перевод y для справки.
Редактировать: «истинное 3d» довольно неразумно достигать в winforms без внешних библиотек или размещения DirectX/WPF в формах, поэтому на данный момент я остановился на изометрическом 3D, основываясь на ответе dr.null,

Я вычисляю положения вершин с помощью следующего уравнения изометрической проекции
Код: Выделить всё
public PointF CalculateIsometricProjection(double[] Position)
{
return new PointF(Globals.width / 2 + (float)(((Globals.CameraX + X + Position[0]) * 0.5) + ((Globals.CameraZ + Z + Position[1]) * -0.5)),
Globals.height / 2 + (float)(((Globals.CameraX + X + Position[0]) * 0.25f) + ((Globals.CameraZ + Z + Position[1]) * 0.25f) - (((Globals.CameraY + Position[2]) + (Y / 3) * 2))));
}
Y — это высота в данном случае, если каждая грань представляет собой прямоугольник или какой-либо параллелограмм, 3D-модели можно визуализировать изометрически с помощью текстур, в противном случае для заливки потребуются плоские цвета, поскольку текстуры не могут трансформироваться в формы, отличные от параллелограммов.