в формах Windows вы можете нарисовать изображение с тремя вершинами, указанными для нижних левых, верхних левых и верхних правых вершин, что позволяет вам наклонять или растягивать изображение, но не позволяет указать четвертую вершину, поэтому оно заканчивается вверх выглядит как этот 3D-куб, но боковые текстуры имеют края одинаковой длины, поэтому он не соответствует форме правильно.
Я могу использовать текстурную кисть и матричное преобразование, чтобы правильно заполнить сторону куба, но проблема в том, что текстура по-прежнему имеет одинаковый размер для всего «расстояния Z», поэтому она размещается плиткой, а не соответствует форме «3d», как показано здесь
Заливки текстуры стороны 3D-куба многоугольник правильно и "сжат", но не "сжат", поэтому не дает 3D-эффекта
поэтому мне просто интересно, есть ли какой-нибудь способ "правильно" преобразовать текстуру или изображение, чтобы оно правильно соответствовало форме многоугольника, и дать "3D" эффект без чрезвычайно нелепого, утомительного и требовательного к производительности метода, такого как изменение экземпляра текстуры непосредственно перед рендерингом во время выполнения
Я пытался использовать графику.drawImage({файл изображения}, {3 точки вершины, которым нужно соответствовать}); чтобы нарисовать изображение, чтобы примерно заполнить пробел, и я также преобразовал грани из четырехугольников в треугольники, чтобы разместить их таким образом, но текстура в конечном итоге растягивается и неправильно поворачивается с помощью этого метода, если только нет способа преобразовать изображение так, чтобы рендеринг с помощью треугольников не сжимал визуализируемую текстуру.
Я пытался использовать текстурную кисть и графики.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-модели можно визуализировать изометрически с помощью текстур, в противном случае для их заполнения потребуются плоские цвета, поскольку текстуры не могут трансформироваться в формы, отличные от параллелограммов.
Подробнее здесь: https://stackoverflow.com/questions/797 ... ller-bigge
Мобильная версия