Статьи

3D-возможности в выпуске JavaFX 1.3

На прошлой неделе, 22 апреля 2010 года, JavaFX 1.3 Release был выпущен для широкой публики. Я немедленно отсканировал примечания к выпуску и был заинтригован возможностями 3D . Поздравляем команду SDK с прослушиванием критики и улучшений, включая мою. Я предложил в AudioBoo , что нам нужен Capabilities API для платформы. Теперь он включен там.

Так что если вы используете в качестве графической карты ускоренный чип GPU и запускаете следующее приложение с аргументом JVM -Xtoolkit prism, вы будете удивлены.

import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.text.Text;
import javafx.scene.text.Font;
import javafx.scene.control.Slider;
import javafx.scene.shape.Rectangle;
import javafx.scene.paint.Color;
import javafx.scene.layout.Tile;
import javafx.scene.control.Label;
import javafx.scene.layout.LayoutInfo;
import javafx.scene.PerspectiveCamera;
import javafx.scene.transform.*;
import javafx.scene.paint.LinearGradient;
import javafx.scene.paint.Stop;


var fieldOfView = 200.0 on replace {
println("fieldOfView={fieldOfView}");
};

var rotateX: Number on replace {
println("rotateX={%5.2f rotateX}")
};
var rotateY: Number on replace {
println("rotateY={%5.2f rotateY}")
};
var rotateZ: Number on replace {
println("rotateZ={%5.2f rotateZ}")
};

var scene: Scene;
var rect: Rectangle;


/**
* Research JavaFX 3D with a basic 2D rectangle
* www.xenonique.co.uk
* 27th April 2010
* @author Peter Pilgrim
*/
Stage {
title: "Peter Pilgrim:: Research JavaFX 1.3 Release :: XeNoNiQUe :: London, UK"
scene: scene =Scene {
camera: PerspectiveCamera {
fieldOfView: bind fieldOfView
}

fill: LinearGradient {
startX: 0.0 startY: 0.0
endX: 0.0 endY : 1.0
stops: [
Stop {
color : Color.LIGHTGRAY
offset: 0.0
},
Stop {
color : Color.DARKGRAY
offset: 0.25
},
Stop {
color : Color.GRAY
offset: 1.0
},
]
}


width: 500
height: 500
content: [
Text {
layoutX: 50
layoutY: bind scene.height - 150
font : Font { size : 12 }
content:
"Rectangle rotation in X,Y and Z manipulate with Slider\n"
"No Graphics 3D Primitives in FX 1.3 release!\n"
"You can translate 2D SG object in 3D space\n"
"No yet ready for 3D graphic application then."
},
rect = Rectangle {
translateX: 200
translateY: 200
translateZ: 100
transforms: [
Rotate {
axis: Rotate.Y_AXIS
angle: bind rotateX
},
Rotate {
axis: Rotate.X_AXIS
angle: bind rotateY
},
Rotate {
axis: Rotate.Z_AXIS
angle: bind rotateZ
}
]


x: -100, y: -100
width: 200, height: 200
arcWidth: 10 arcHeight: 10
fill: Color.web("#ff9900")
strokeWidth: 2
stroke: Color.web("#FF0000")
},
Tile {
layoutX: 10
layoutY: 10
columns: 2
hgap: 3
vgap: 6

content: [
Label {
layoutInfo: LayoutInfo { width: 200 }
text: "Rotate X:"
},
Slider {
layoutInfo: LayoutInfo { width: 200 }
min: 0
max: 360
vertical: false
value: bind rotateX with inverse
},
Label {
layoutInfo: LayoutInfo { width: 200 }
text: "Rotate Y:"
},
Slider {
layoutInfo: LayoutInfo { width: 200 }
min: 0
max: 360
vertical: false
value: bind rotateY with inverse
},
Label {
layoutInfo: LayoutInfo { width: 200 }
text: "Rotate Z:"
},
Slider {
layoutInfo: LayoutInfo { width: 200 }
min: 0
max: 360
vertical: false
value: bind rotateZ with inverse
},
Label {
layoutInfo: LayoutInfo { width: 200 }
text: "Field of View:"
},
Slider {
layoutInfo: LayoutInfo { width: 200 }
min: 0
max: 360
vertical: false
value: bind fieldOfView with inverse;
},
]
}


]
}
}

  • В версии JavaFX 1.3 нет примитивов 3D-графики (пока).
  • Существует, однако, javafx.geometry.Point3D, и это, кажется, определяет вращение вокруг произвольной оси в трехмерном пространстве
  • Нет никакого способа узнать трансформацию мировоззрения или даже трансформацию перспективы через API. (Поднимите учебную книгу по компьютерной графике, например, книгу Джеймса Д. Фоули или доктора Алана Уоттса, чтобы понять эти концепции преобразования четырехмерных матриц.)
  • Существует способ перевести 2D формы в 3D декартово пространство, как показано в коде выше.
  • Вращение объектов в трехмерном мире JavaFX на данный момент немного странно. (Из приведенного выше примера кода я не уверен, правильно ли я понял)

Новый стек grahics является достойным доказательством концепции и, что более важно, доказательством предоставления новой архитектуры. Поэтому я беспокоюсь о приобретении Oracle Sun, и я знаю, что моя следующая великолепная космическая 3D-игра не будет написана с JavaFX 1.3, однако скорость и производительность во время работы приветствуются.

Быстро отслеживаемая запись в блоге. Из

PS: я считаю, что динамическое изменение поля зрения не работает в примере. Однако, возможно, я написал это неправильно? Сделай сам.

 

С http://www.jroller.com/peter_pilgrim/entry/3d_capabilities_in_javafx_1