【发布时间】:2018-05-27 08:36:17
【问题描述】:
我研究了这个question,但我还是不明白。下面的最短代码显示了一个完全灰色的Pyramid,而我尝试给构成pyramid 的6 个triangles 提供不同的颜色。那么......为什么这些颜色不显示?
请注意,我从该问题中借用了getTexCoords().addAll(..) 声明,但显然我仍然做错了什么。是uv mapping 吗?那到底是什么?我看过一个拓扑解释(sphere map),但这与纹理/颜色有什么关系...?
感谢您的帮助 - 迈克尔
public class ColoredPyramid extends Application {
public void start(Stage primaryStage) {
Group root = new Group();
Scene scene = new Scene(root, 200, 200, true);
primaryStage.setTitle("Colored Pyramid");
primaryStage.setScene(scene);
primaryStage.show();
TriangleMesh colouredPyramid = new TriangleMesh();
float height = 100;
float hypotenuse = 150;
colouredPyramid.getPoints().addAll(0, 0, 0); //0-index:: top
colouredPyramid.getPoints().addAll(0, height, -hypotenuse / 2); //1-index:: x=0, z=-hyp/2 ==> Closest to user
colouredPyramid.getPoints().addAll(-hypotenuse / 2, height, 0); //2-index:: x=hyp/2, z=0 ==> Leftest
colouredPyramid.getPoints().addAll(hypotenuse / 2, height, 0); //3-index:: x=hyp/2, z=0 ==> rightest
colouredPyramid.getPoints().addAll(0, height, hypotenuse / 2); ////4-index:: x=0, z=hyp/2 ==> Furthest from user
//Next statement copied from stackoverflow.com/questions/26831871/coloring-individual-triangles-in-a-triangle-mesh-on-javafx
colouredPyramid.getTexCoords().addAll(
0.1f, 0.5f, // 0 red
0.3f, 0.5f, // 1 green
0.5f, 0.5f, // 2 blue
0.7f, 0.5f, // 3 yellow
0.9f, 0.5f // 4 orange
);
colouredPyramid.getFaces().addAll(0, 0, 2, 0, 1, 0); //Left front face ---> RED
colouredPyramid.getFaces().addAll(0, 1, 1, 1, 3, 1); //Right front face ---> GREEN
colouredPyramid.getFaces().addAll(0, 2, 3, 2, 4, 2); //Right back face ---> BLUE
colouredPyramid.getFaces().addAll(0, 3, 4, 3, 2, 3); //Left back face ---> RED
colouredPyramid.getFaces().addAll(4, 4, 1, 4, 2, 4); //Base: left triangle face ---> YELLOW
colouredPyramid.getFaces().addAll(4, 0, 3, 0, 1, 0); //Base: right triangle face ---> ORANGE
MeshView meshView = new MeshView(colouredPyramid);
Group group = new Group(meshView);
group.setTranslateX(100);
group.setTranslateY(80);
root.getChildren().add(group);
}
public static void main(String[] args) {
launch(args);
}
}
【问题讨论】:
-
您必须回答的第一个问题:您将作为纹理应用的图像在哪里?您设置的纹理坐标将查看该图像。提示:您需要一张图片并设置材质漫反射贴图。
-
谢谢 Jose,但是……我不明白你的意思。为什么需要图像来将顶点映射到纹理?
-
顺便说一句,对于建议我“突出显示”文本中的代码位的人:我该怎么做?谢谢...
-
@M.Kemper 该图像具有面部的颜色。请参阅您最初提到的问题。有关您问题中的格式代码,请参阅meta.stackoverflow.com/questions/251361/…