本文整理汇总了Java中com.jme3.math.Ray.setDirection方法的典型用法代码示例。如果您正苦于以下问题:Java Ray.setDirection方法的具体用法?Java Ray.setDirection怎么用?Java Ray.setDirection使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类com.jme3.math.Ray
的用法示例。
在下文中一共展示了Ray.setDirection方法的8个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Java代码示例。
示例1: doPick
import com.jme3.math.Ray; //导入方法依赖的package包/类
private static CollisionResult doPick(Camera cam, Vector2f mouseLoc, Node node, Spatial exclude) {
CollisionResults results = new CollisionResults();
Ray ray = new Ray();
Vector3f pos = cam.getWorldCoordinates(mouseLoc, 0).clone();
Vector3f dir = cam.getWorldCoordinates(mouseLoc, 0.3f).clone();
dir.subtractLocal(pos).normalizeLocal();
ray.setOrigin(pos);
ray.setDirection(dir);
node.collideWith(ray, results);
CollisionResult result = null;
if (exclude == null) {
result = results.getClosestCollision();
} else {
Iterator<CollisionResult> it = results.iterator();
while (it.hasNext()) {
CollisionResult cr = it.next();
if (isExcluded(cr.getGeometry(), exclude)) {
continue;
} else {
return cr;
}
}
}
return result;
}
示例2: getTerrainCollisionPoint
import com.jme3.math.Ray; //导入方法依赖的package包/类
/**
* Find where on the terrain the mouse intersects.
*/
protected Vector3f getTerrainCollisionPoint() {
if (editorController.getTerrain(null) == null) {
return null;
}
CollisionResults results = new CollisionResults();
Ray ray = new Ray();
Vector3f pos = cam.getWorldCoordinates(new Vector2f(mouseX, mouseY), 0).clone();
Vector3f dir = cam.getWorldCoordinates(new Vector2f(mouseX, mouseY), 0.3f).clone();
dir.subtractLocal(pos).normalizeLocal();
ray.setOrigin(pos);
ray.setDirection(dir);
editorController.getTerrain(null).collideWith(ray, results);
if (results.size() == 0) {
return null;
}
final CollisionResult result = results.getClosestCollision();
return result.getContactPoint();
}
示例3: getTerrainCollisionPoint
import com.jme3.math.Ray; //导入方法依赖的package包/类
/**
* Find where on the terrain the mouse intersects.
*/
protected Vector3f getTerrainCollisionPoint() {
if (editorController.getTerrain(null) == null) {
return null;
}
CollisionResults results = new CollisionResults();
Ray ray = new Ray();
Vector3f pos = cam.getWorldCoordinates(new Vector2f(mouseX, mouseY), 0).clone();
Vector3f dir = cam.getWorldCoordinates(new Vector2f(mouseX, mouseY), 0.3f).clone();
dir.subtractLocal(pos).normalizeLocal();
ray.setOrigin(pos);
ray.setDirection(dir);
editorController.getTerrain(null).collideWith(ray, results);
if (results == null) {
return null;
}
final CollisionResult result = results.getClosestCollision();
if (result == null) {
return null;
}
return result.getContactPoint();
}
示例4: getCollisionFromScreenPos
import com.jme3.math.Ray; //导入方法依赖的package包/类
/**
* Get a collision on spatial from screen position.
*
* @param spatial the spatial.
* @param camera the camera.
* @param screenX the screen X coord.
* @param screenY the screen Y coord.
* @return the collision or null.
*/
@Nullable
public static CollisionResult getCollisionFromScreenPos(@NotNull final Spatial spatial,
@NotNull final Camera camera,
final float screenX,
final float screenY) {
final LocalObjects local = LocalObjects.get();
final Vector2f cursor = local.nextVector(screenX, screenY);
final Vector3f click3d = camera.getWorldCoordinates(cursor, 0f, local.nextVector());
final Vector3f dir = camera.getWorldCoordinates(cursor, 1f, local.nextVector())
.subtractLocal(click3d)
.normalizeLocal();
final Ray ray = local.nextRay();
ray.setOrigin(click3d);
ray.setDirection(dir);
final CollisionResults results = local.nextCollisionResults();
spatial.updateModelBound();
spatial.collideWith(ray, results);
if (results.size() < 1) {
return null;
}
return results.getClosestCollision();
}
示例5: pick
import com.jme3.math.Ray; //导入方法依赖的package包/类
private static CollisionResult pick(Camera cam, Vector2f mouseLoc, Node node) {
CollisionResults results = new CollisionResults();
Ray ray = new Ray();
Vector3f pos = cam.getWorldCoordinates(mouseLoc, 0).clone();
Vector3f dir = cam.getWorldCoordinates(mouseLoc, 0.125f).clone();
dir.subtractLocal(pos).normalizeLocal();
ray.setOrigin(pos);
ray.setDirection(dir);
node.collideWith(ray, results);
CollisionResult result = results.getClosestCollision();
return result;
}
示例6: pickActors
import com.jme3.math.Ray; //导入方法依赖的package包/类
private List<Actor> pickActors(List<Actor> store) {
TempVars tv = TempVars.get();
Vector2f v2d = tv.vect2d.set(app.getInputManager().getCursorPosition());
Vector3f click3d = app.getCamera().getWorldCoordinates(v2d, 0, tv.vect1);
Vector3f dir = app.getCamera().getWorldCoordinates(v2d, 1, tv.vect2)
.subtractLocal(click3d).normalizeLocal();
Ray ray = new Ray();
ray.setOrigin(click3d);
ray.setDirection(dir);
List<Actor> temps = new ArrayList<Actor>();
scene.getEntities(Actor.class, temps);
BoundingVolume bv;
for (Actor a : temps) {
bv = a.getSpatial().getWorldBound();
if (bv == null) {
continue;
}
if (bv.intersects(ray)) {
store.add(a);
}
}
sortEntities(store);
tv.release();
return store;
}
示例7: pick
import com.jme3.math.Ray; //导入方法依赖的package包/类
private CollisionResult pick(Camera cam, Vector2f mouseLoc, Node node) {
CollisionResults results = new CollisionResults();
Ray ray = new Ray();
Vector3f pos = cam.getWorldCoordinates(mouseLoc, 0).clone();
Vector3f dir = cam.getWorldCoordinates(mouseLoc, 0.1f).clone();
dir.subtractLocal(pos).normalizeLocal();
ray.setOrigin(pos);
ray.setDirection(dir);
node.collideWith(ray, results);
CollisionResult result = results.getClosestCollision();
return result;
}
示例8: hasObstacleActor
import com.jme3.math.Ray; //导入方法依赖的package包/类
private boolean hasObstacleActor(Entity self, List<Actor> actors) {
TempVars tv = TempVars.get();
Temp temp = Temp.get();
ActorModule selfActorModule = self.getModule(ActorModule.class);
Vector3f viewDirection;
if (selfActorModule != null) {
viewDirection = selfActorModule.getViewDirection();
} else {
viewDirection = self.getSpatial().getWorldRotation().multLocal(new Vector3f(0,0,1));
}
Vector3f origin = tv.vect1.set(self.getSpatial().getWorldBound().getCenter());
Vector3f dir = tv.vect2.set(viewDirection).normalizeLocal();
float zExtent = GeometryUtils.getBoundingVolumeZExtent(self.getSpatial());
origin.addLocal(dir.mult(zExtent, tv.vect3));
// DebugDynamicUtils.debugArrow(self.toString(), origin, dir, zExtent);
// 检查碰撞
// float checkDistance = zExtent;
float checkDistance = zExtent * 1.5f; // modify20160504, * 1.5f,稍微加大了一点距离
float checkDistanceSquare = checkDistance * checkDistance;
Vector3f targetOrigin = tv.vect4;
boolean obstacle = false;
Ray ray = temp.ray;
ray.setOrigin(origin);
ray.setDirection(dir);
ray.setLimit(checkDistance);
for (Entity a : actors) {
if (a == self) {
continue;
}
// 如果距离跳过checkDistance,则不视为障碍(该判断用于优化性能)
// 减少ray检测
targetOrigin.set(a.getSpatial().getWorldBound().getCenter());
if (targetOrigin.distanceSquared(origin) > checkDistanceSquare) {
continue;
}
// 使用ray也可以,但是使用WorldBound可能性能更好一些。
if (a.getSpatial().getWorldBound().intersects(ray)) {
obstacle = true;
break;
}
}
// 释放缓存
tv.release();
temp.release();
return obstacle;
}