我是3D编程的新手,我很难让我的纹理正确填充我的网格。我已经在墙壁上正确选择了尺寸,但是屋顶上的纹理以一定的角度运行并且伸展得太远了。
我有几种创建网格物体的方法,但它们最终都被发送到AddTriangle方法,其中设置了TextureCoordinates。
public static void AddTriangle(this MeshGeometry3D mesh, Point3D[] pts)
{
// Create the points.
int index = mesh.Positions.Count;
foreach (Point3D pt in pts)
{
mesh.Positions.Add(pt);
mesh.TriangleIndices.Add(index++);
mesh.TextureCoordinates.Add(new Point(pt.X + pt.Z, 0 - pt.Y));
}
}
以下是我的资料设置方式。
imageBrush.ImageSource = new BitmapImage(new Uri("pack://application:,,,/Textures/shingles1.jpg"));
imageBrush.TileMode = TileMode.Tile;
imageBrush.ViewportUnits = BrushMappingMode.Absolute;
imageBrush.Viewport = new Rect(0, 0, 25, 25);
SidingColor = new DiffuseMaterial(imageBrush);
SidingColor.Color = RGB(89, 94, 100);
我的纹理看起来像这样:
这是我得到的结果。
在我玩弄数小时和谷歌搜索之后,这就像我能得到的那样接近。
答案 0 :(得分:0)
这比我预想的要困难一些。
以下是帮助我找到解决方案的资源。
How to convert a 3D point on a plane to UV coordinates?
从下面的链接中我意识到上面的公式是正确的,但对于右手坐标系。我转换了它,这是最后一步。
http://www.math.tau.ac.il/~dcor/Graphics/cg-slides/geom3d.pdf
以下是其他人有此问题的代码。
public static void main(String[] args) {
int exitFlag = 0;
int choice = showMenu();
do {
switch (choice) {
case 1:
System.out.println("pythagoraen()");
break;
case 2:
System.out.println("subtraction()");
break;
case 3:
System.out.println("multiplication()");
break;
case 4:
System.out.println("division()");
break;
case 5:
System.out.println("exitprogam()");
exitFlag = 1;
break;
default:
System.out.println("Invalid Option()");
break;
}
if (exitFlag != 1) {
choice = showMenu();
}
}while (choice != 5);
}
private static int showMenu() {
System.out.println("Hello, This is the math program");
System.out.println("Select an application from below: \n");
System.out.println("(1) pythagoraen");
System.out.println("(2) Subtraction");
System.out.println("(3) Multiplication");
System.out.println("(4) Division");
System.out.println("(5) Exit");
System.out.println("What is your Choice? ");
Scanner input = new Scanner(System.in);
int choice = input.nextInt();
return choice;
}