Java 类javax.vecmath.Vector3f 实例源码
项目:pnc-repressurized
文件:ModelProgrammingPuzzle.java
@Override
public IBakedModel bake(IModelState state, VertexFormat format, Function<ResourceLocation, TextureAtlasSprite> bakedTextureGetter) {
ImmutableMap<TransformType, TRSRTransformation> transformMap = PerspectiveMapWrapper.getTransforms(state);
TRSRTransformation transform = state.apply(Optional.empty()).orElse(TRSRTransformation.identity());
TextureAtlasSprite widgetSprite = bakedTextureGetter.apply(getWidgetTexture(widget));
ImmutableList.Builder<BakedQuad> builder = ImmutableList.builder();
int width = widget.getWidth() + (widget.getParameters() != null && widget.getParameters().length > 0 ? 10 : 0);
int height = widget.getHeight() + (widget.hasStepOutput() ? 5 : 0);
Pair<Double, Double> maxUV = widget.getMaxUV();
int textureSize = widget.getTextureSize();
float scale = 1F / (float) Math.max(maxUV.getLeft(), maxUV.getRight());
float transX = 0;//maxUV.getLeft().floatValue();
float transY = -1 + maxUV.getRight().floatValue();
transform = transform.compose(new TRSRTransformation(new Vector3f(0, 0, 0), null, new Vector3f(scale, scale, 1), null));
transform = transform.compose(new TRSRTransformation(new Vector3f(transX, transY, 0), null, new Vector3f(1, 1, 1), null));
builder.add(ItemTextureQuadConverter.genQuad(format, transform, 0, 0, 16 * maxUV.getLeft().floatValue(), 16 * maxUV.getRight().floatValue(), NORTH_Z_BASE, widgetSprite, EnumFacing.NORTH, 0xffffffff));
builder.add(ItemTextureQuadConverter.genQuad(format, transform, 0, 0, 16 * maxUV.getLeft().floatValue(), 16 * maxUV.getRight().floatValue(), SOUTH_Z_BASE, widgetSprite, EnumFacing.SOUTH, 0xffffffff));
return new BakedProgrammingPuzzle(this, builder.build(), widgetSprite, format, Maps.immutableEnumMap(transformMap), Maps.newHashMap());
}
项目:OpenGL-Bullet-engine
文件:EntityCrazyCube.java
public EntityCrazyCube(World world, Vec3f pos){
super(world, getModel0(), pos);
float s=Rand.f()+1;
scale.set(s, s, s);
// model.getMaterial(2).getDiffuse().set(177/256F, 0, 177/256F, 1);
// model.getMaterial(1).getDiffuse().set(0x00C7E7);
// model.getMaterial(1).getAmbient().set(0x00C7E7).a(1);
// model.getMaterial(0).getDiffuse().set(0x0000FF);
float massKg=0.5F*scale.x*scale.y*scale.z;
if(CAM==null) CAM=this;
getPhysicsObj().init(massKg, new Transform(new Matrix4f(new Quat4f(0, 0, 0, 1), new Vector3f(pos.x, pos.y, pos.z), 0.5F)), new SphereShape(scale.x/2), Vec3f.single(0.9F));
// getPhysicsObj().init(massKg, new Transform(new Matrix4f(new Quat4f(0, 0, 0, 1), new Vector3f(pos.x, pos.y, pos.z), 0.5F)), new BoxShape(new Vector3f(scale.x/2, scale.y/2, scale.z/2)), Vec3f.single(0.9F));
getPhysicsObj().body.setDamping(0.15F, 0.15F);
getPhysicsObj().hookPos(this.pos);
getPhysicsObj().hookRot(rot);
}
项目:Mass
文件:Player.java
/**
* Move the position of the player by the specified deltaX,
* deltaY and deltaZ using the specified camera rotation.
*
* @param deltaX - Value to move the x position by.
* @param deltaY - Value to move the y position by.
* @param deltaZ - Value to move the z position by.
* @param camY - Camera y rotation to use for movement.
*/
public void movePosition(float deltaX, float deltaY, float deltaZ, float camY) {
deltaX *= WALK_SPEED;
deltaY *= WALK_SPEED;
deltaZ *= WALK_SPEED;
Vector3f position = new Vector3f(0, 0, 0);
if (deltaZ != 0) {
position.x += (float)Math.sin(Math.toRadians(camY)) * -1.0f * deltaZ;
position.z += (float)Math.cos(Math.toRadians(camY)) * deltaZ;
}
if (deltaX != 0) {
position.x += (float)Math.sin(Math.toRadians(camY - 90)) * -1.0f * deltaX;
position.z += (float)Math.cos(Math.toRadians(camY - 90)) * deltaX;
}
position.y += deltaY;
characterController.setWalkDirection(position);
}
项目:ar-drawing-java
文件:DrawAR.java
/**
* Get a matrix usable for zero calibration (only position and compass direction)
*/
public float[] getCalibrationMatrix() {
float[] t = new float[3];
float[] m = new float[16];
mFrame.getPose().getTranslation(t, 0);
float[] z = mFrame.getPose().getZAxis();
Vector3f zAxis = new Vector3f(z[0], z[1], z[2]);
zAxis.y = 0;
zAxis.normalize();
double rotate = Math.atan2(zAxis.x, zAxis.z);
Matrix.setIdentityM(m, 0);
Matrix.translateM(m, 0, t[0], t[1], t[2]);
Matrix.rotateM(m, 0, (float) Math.toDegrees(rotate), 0, 1, 0);
return m;
}
项目:ar-drawing-java
文件:LineShaderRenderer.java
/**
*
* setMemory is a helper method used to add the stroke data to the float[] buffers
* @param index
* @param pos
* @param prev
* @param next
* @param counter
* @param width
* @param side
*/
private void setMemory(int index, Vector3f pos, Vector3f prev, Vector3f next, float counter, float width, float side){
mPositions[index*3] = pos.x;
mPositions[index*3+1] = pos.y;
mPositions[index*3+2] = pos.z;
mNext[index*3] = next.x;
mNext[index*3+1] = next.y;
mNext[index*3+2] = next.z;
mPrevious[index*3] = prev.x;
mPrevious[index*3+1] = prev.y;
mPrevious[index*3+2] = prev.z;
mCounters[index] = counter;
mSide[index] = side;
mWidth[index] = width;
}
项目:CustomWorldGen
文件:ForgeHooksClient.java
/**
* internal, relies on fixed format of FaceBakery
*/
public static void fillNormal(int[] faceData, EnumFacing facing)
{
Vector3f v1 = new Vector3f(faceData[3 * 7 + 0], faceData[3 * 7 + 1], faceData[3 * 7 + 2]);
Vector3f t = new Vector3f(faceData[1 * 7 + 0], faceData[1 * 7 + 1], faceData[1 * 7 + 2]);
Vector3f v2 = new Vector3f(faceData[2 * 7 + 0], faceData[2 * 7 + 1], faceData[2 * 7 + 2]);
v1.sub(t);
t.set(faceData[0 * 7 + 0], faceData[0 * 7 + 1], faceData[0 * 7 + 2]);
v2.sub(t);
v1.cross(v2, v1);
v1.normalize();
int x = ((byte)(v1.x * 127)) & 0xFF;
int y = ((byte)(v1.y * 127)) & 0xFF;
int z = ((byte)(v1.z * 127)) & 0xFF;
for(int i = 0; i < 4; i++)
{
faceData[i * 7 + 6] = x | (y << 0x08) | (z << 0x10);
}
}
项目:CustomWorldGen
文件:TRSRTransformation.java
public static Matrix4f mul(Vector3f translation, Quat4f leftRot, Vector3f scale, Quat4f rightRot)
{
Matrix4f res = new Matrix4f(), t = new Matrix4f();
res.setIdentity();
if(leftRot != null)
{
t.set(leftRot);
res.mul(t);
}
if(scale != null)
{
t.setIdentity();
t.m00 = scale.x;
t.m11 = scale.y;
t.m22 = scale.z;
res.mul(t);
}
if(rightRot != null)
{
t.set(rightRot);
res.mul(t);
}
if(translation != null) res.setTranslation(translation);
return res;
}
项目:CraftStudioAPI
文件:CSReadedAnimBlock.java
/**
* Add an element to a keyframe. If the keyframe does exist it's created.
*
* @param keyFrame
* Key of the keyframe.
* @param type
* Type of the element. See {@link CSReadedAnimBlock}.
* @param value
* Value of the element.
*/
public void addKFElement(int keyFrame, EnumFrameType type, Vector3f value) {
if (!this.keyFrames.containsKey(keyFrame))
this.keyFrames.put(keyFrame, new ReadedKeyFrame());
switch (type) {
case POSITION:
this.keyFrames.get(keyFrame).position = value;
break;
case ROTATION:
this.keyFrames.get(keyFrame).rotation = value;
break;
case OFFSET:
this.keyFrames.get(keyFrame).offset = value;
break;
case SIZE:
this.keyFrames.get(keyFrame).size = value;
break;
case STRETCH:
this.keyFrames.get(keyFrame).stretching = value;
break;
}
}
项目:PhET
文件:Group.java
/**
*
* @param tokType
* @param qType
* @param mStep
* @return helix data of some sort
*/
public Object getHelixData(int tokType, char qType, int mStep) {
switch (tokType) {
case Token.point:
return new Point3f();
case Token.axis:
case Token.radius:
return new Vector3f();
case Token.angle:
return new Float(Float.NaN);
case Token.array:
case Token.list:
return new String[] {};
}
return "";
}
项目:Analyst
文件:KdTreeIndexed.java
@Override
public double nearestDistance(Vector3f p, Vector3f pNormal, boolean useRelative) {
Vector3f found = nearestNeighbour(p);
if(found == null){
//error
return Double.MAX_VALUE;
}
float sign = 1f;
if(useRelative){
sign = getSign(p, found, pNormal);
}
return sign * MathUtils.instance().distancePoints(found, p);
}
项目:Null-Engine
文件:HullLibrary.java
private int calchull(ObjectArrayList<Vector3f> verts, int verts_count, IntArrayList tris_out, int[] tris_count, int vlimit) {
int rc = calchullgen(verts, verts_count, vlimit);
if (rc == 0) return 0;
IntArrayList ts = new IntArrayList();
for (int i=0; i<tris.size(); i++) {
if (tris.getQuick(i) != null) {
for (int j = 0; j < 3; j++) {
ts.add((tris.getQuick(i)).getCoord(j));
}
deAllocateTriangle(tris.getQuick(i));
}
}
tris_count[0] = ts.size() / 3;
MiscUtil.resize(tris_out, ts.size(), 0);
for (int i=0; i<ts.size(); i++) {
tris_out.set(i, ts.get(i));
}
MiscUtil.resize(tris, 0, Tri.class);
return 1;
}
项目:PhET
文件:ScriptVariable.java
static public boolean isVariableType(Object x) {
return (x instanceof ScriptVariable
|| x instanceof BitSet
|| x instanceof Boolean
|| x instanceof Float
|| x instanceof Integer
|| x instanceof Point3f // stored as point3f
|| x instanceof Vector3f // stored as point3f
|| x instanceof Point4f // stored as point4f
|| x instanceof Quaternion // stored as point4f
|| x instanceof String
|| x instanceof Map<?, ?> // stored as Map<String, ScriptVariable>
|| x instanceof List<?> // stored as list
|| x instanceof ScriptVariable[] // stored as list
|| x instanceof double[] // stored as list
|| x instanceof float[] // stored as list
|| x instanceof Float[] // stored as list
|| x instanceof int[] // stored as list
|| x instanceof int[][] // stored as list
|| x instanceof Point4f[] // stored as list
|| x instanceof String[]); // stored as list
}
项目:Point-Engine
文件:GLDemo.java
@Override
public void update() {
accum += Engine.deltaTime;
//spawns cubes and lights, test if accum is a certain length
if (Input.isButtonDown(1) && accum > 0.1f) {
Camera cam = Engine.camera;
MeshObject c = new MeshObject(cam.getPosition(), cam.front.multiply(30), new Quat4f(1.0f, 0.3f, 0.5f, 0f), new BoxShape(new Vector3f(0.5f, 0.5f, 0.5f)), 1f, cubeMesh, 1f, crateMaterial);
Engine.scene.add(c);
accum = 0;
}
if (Input.isButtonDown(2) && accum > 1f) {
PointLight p = new PointLight(Engine.camera.getPosition(), vec3(1.0f, 1.0f, 2.0f), 5f, 10f);
Engine.scene.add(p);
accum = 0;
}
}
项目:Analyst
文件:PApainting.java
private void drawCylinder(Vector3f from, Vector3f to, GL2 gl, GLUT glut) {
Vector3f zAxis = new Vector3f(0, 0, 1);
Vector3f vector = new Vector3f(to.x - from.x, to.y - from.y, to.z - from.z);
float length = vector.length();
vector.normalize();
float angle = zAxis.angle(vector);
Vector3f axis = new Vector3f();
axis.cross(zAxis, vector);
float convert = (float) (180f / Math.PI);
gl.glPushMatrix();
gl.glTranslatef(from.x, from.y, from.z);
gl.glRotatef(angle * convert, axis.x, axis.y, axis.z);
glut.glutSolidCylinder(info.getPointSize() / 4.5, length - info.getPointSize(), 20, 20);
gl.glPopMatrix();
}
项目:Null-Engine
文件:BvhTriangleMeshShape.java
/**
* Optionally pass in a larger bvh aabb, used for quantization. This allows for deformations within this aabb.
*/
public BvhTriangleMeshShape(StridingMeshInterface meshInterface, boolean useQuantizedAabbCompression, Vector3f bvhAabbMin, Vector3f bvhAabbMax, boolean buildBvh) {
super(meshInterface);
this.bvh = null;
this.useQuantizedAabbCompression = useQuantizedAabbCompression;
this.ownsBvh = false;
// construct bvh from meshInterface
//#ifndef DISABLE_BVH
if (buildBvh) {
bvh = new OptimizedBvh();
bvh.build(meshInterface, useQuantizedAabbCompression, bvhAabbMin, bvhAabbMax);
ownsBvh = true;
}
// JAVA NOTE: moved from TriangleMeshShape
recalcLocalAabb();
//#endif //DISABLE_BVH
}
项目:PhET
文件:IsosurfaceRenderer.java
private void renderLonePair(boolean isRadical) {
pt2f.set(imesh.vertices[1]);
viewer.transformPoint(pt2f, pt2f);
int r = viewer.scaleToScreen((int)pt2f.z, 100);
if (r < 1)
r = 1;
if (!isRadical) {
Vector3f v1 = new Vector3f();
Vector3f v2 = new Vector3f();
pt1f.set(imesh.vertices[0]);
viewer.transformPoint(pt1f, pt1f);
v1.sub(pt2f, pt1f);
v2.set(v1.x, v1.y, v1.z + 1);
v2.cross(v2,v1);
v2.normalize();
float f = viewer.scaleToScreen((int)pt1f.z, 100);
v2.scale(f);
pt1f.set(pt2f);
pt1f.add(v2);
pt2f.sub(v2);
screens[0].set((int)pt1f.x,(int)pt1f.y,(int)pt1f.z);
g3d.fillSphere(r, screens[0]);
}
screens[1].set((int)pt2f.x,(int)pt2f.y,(int)pt2f.z);
g3d.fillSphere(r, screens[1]);
}
项目:Null-Engine
文件:DbvtAabbMm.java
public void SignedExpand(Vector3f e) {
if (e.x > 0) {
mx.x += e.x;
}
else {
mi.x += e.x;
}
if (e.y > 0) {
mx.y += e.y;
}
else {
mi.y += e.y;
}
if (e.z > 0) {
mx.z += e.z;
}
else {
mi.z += e.z;
}
}
项目:Null-Engine
文件:JacobianEntry.java
/**
* Angular constraint between two different rigidbodies.
*/
public void init(Vector3f jointAxis,
Matrix3f world2A,
Matrix3f world2B,
Vector3f inertiaInvA,
Vector3f inertiaInvB)
{
linearJointAxis.set(0f, 0f, 0f);
aJ.set(jointAxis);
world2A.transform(aJ);
bJ.set(jointAxis);
bJ.negate();
world2B.transform(bJ);
VectorUtil.mul(m_0MinvJt, inertiaInvA, aJ);
VectorUtil.mul(m_1MinvJt, inertiaInvB, bJ);
Adiag = m_0MinvJt.dot(aJ) + m_1MinvJt.dot(bJ);
assert (Adiag > 0f);
}
项目:Analyst
文件:AgeingComputation.java
public void computeToAge(double targetAge) {
this.target = targetAge;
FpModel alignToPoints = getMeanModel(gender, age);
ArrayList<Vector3f> templateVerts = new ArrayList<>();
for(FacialPoint p : alignToPoints.getFacialPoints()) {
templateVerts.add(p.getPosition());
}
ArrayList<List<FacialPoint>> modelPointsList = new ArrayList<>(1);
ArrayList<ArrayList<Vector3f>> models = new ArrayList<>(1);
models.add(model.getVerts());
modelPointsList.add(modelPoints);
Procrustes1ToMany proc = new Procrustes1ToMany(alignToPoints.getFacialPoints(), templateVerts, modelPointsList, models, false);
proc.align1withN();
model.setVerts(proc.getPa2().get(0).getVertices());
targetPoints = getMeanModel(gender, targetAge).getFacialPoints();
ModelLoader l = new ModelLoader();
targetModel = l.loadModel(model.getFile(), false, false);
targetModel.setVerts(new ArrayList<>(model.getVerts()));
transform(targetModel, modelPoints, targetPoints);
}
项目:PhET
文件:Geodesic.java
private static short getVertex(short v1, short v2) {
if (v1 > v2) {
short t = v1;
v1 = v2;
v2 = t;
}
Integer hashKey = Integer.valueOf((v1 << 16) + v2);
Short iv = htVertex.get(hashKey);
if (iv != null) {
return iv.shortValue();
}
Vector3f newVertexVector = new Vector3f(vertexVectors[v1]);
vertexVectors[vertexNext] = newVertexVector;
newVertexVector.add(vertexVectors[v2]);
newVertexVector.scale(0.5f);
newVertexVector.normalize();
htVertex.put(hashKey, Short.valueOf(vertexNext));
return vertexNext++;
}
项目:Analyst
文件:Registrator.java
public static List<FacialPoint> reverse(List<FacialPoint> facialPoints, List<ICPTransformation> transformations) {
List<Vector3f> reversedVerts = new ArrayList<>();
for (FacialPoint facialPoint : facialPoints) {
reversedVerts.add(new Vector3f(facialPoint.getCoords()));
}
Icp.instance().reverseAllTransformations(transformations, reversedVerts, SCALE);
List<FacialPoint> transformedFacialPoints = new ArrayList<>();
int index = 0;
for (Vector3f vert : reversedVerts) {
FacialPointType originalType = facialPoints.get(index).getType();
transformedFacialPoints.add(new FacialPoint(originalType, vert));
}
return transformedFacialPoints;
}
项目:PhET
文件:Isosurface.java
private boolean getClosestNormal(IsosurfaceMesh m, Point3f toPt, Point3f ptRet, Vector3f normalRet) {
Point3f[] centers = m.getCenters();
float d;
float dmin = Float.MAX_VALUE;
int imin = -1;
for (int i = centers.length; --i >= 0; ) {
if ((d = centers[i].distance(toPt)) >= dmin)
continue;
dmin = d;
imin = i;
}
if (imin < 0)
return false;
getClosestPoint(m, imin, toPt, ptRet, normalRet);
return true;
}
项目:Null-Engine
文件:GImpactCollisionAlgorithm.java
public void gimpact_vs_concave(CollisionObject body0, CollisionObject body1, GImpactShapeInterface shape0, ConcaveShape shape1, boolean swapped) {
// create the callback
GImpactTriangleCallback tricallback = new GImpactTriangleCallback();
tricallback.algorithm = this;
tricallback.body0 = body0;
tricallback.body1 = body1;
tricallback.gimpactshape0 = shape0;
tricallback.swapped = swapped;
tricallback.margin = shape1.getMargin();
// getting the trimesh AABB
Transform gimpactInConcaveSpace = Stack.alloc(Transform.class);
body1.getWorldTransform(gimpactInConcaveSpace);
gimpactInConcaveSpace.inverse();
gimpactInConcaveSpace.mul(body0.getWorldTransform(Stack.alloc(Transform.class)));
Vector3f minAABB = Stack.alloc(Vector3f.class), maxAABB = Stack.alloc(Vector3f.class);
shape0.getAabb(gimpactInConcaveSpace, minAABB, maxAABB);
shape1.processAllTriangles(tricallback, minAABB, maxAABB);
}
项目:Analyst
文件:ModelSelector.java
/**
*
* @param pl line point
* @param u line vector
* @param n plane normal
* @param p point from plane
* @return intersection of line and plane, if it doesn't exist returns null
*/
public static Vector3f findLinePlaneIntersection(Vector3f pl, Vector3f u, Vector3f n, Vector3f p) {
Vector3f w = new Vector3f(pl);
w.sub(p);
float D = n.dot(u);
float N = -n.dot(w);
if (Math.abs(D) == 0) { // segment is parallel to plane
if (N == 0) // segment lies in plane
{
return pl;
} else {
return null; // no intersection
}
}
// they are not parallel
// compute intersect param
float sI = N / D;
Vector3f intersection = new Vector3f(u);
intersection.scale(sI);
intersection.add(pl);
return intersection;
}
项目:PhET
文件:Quadric.java
public static Matrix3f setEllipsoidMatrix(Vector3f[] unitAxes, float[] lengths, Vector3f vTemp, Matrix3f mat) {
/*
* Create a matrix that transforms cartesian coordinates
* into ellipsoidal coordinates, where in that system we
* are drawing a sphere.
*
*/
for (int i = 0; i < 3; i++) {
vTemp.set(unitAxes[i]);
vTemp.scale(lengths[i]);
mat.setColumn(i, vTemp);
}
mat.invert(mat);
return mat;
}
项目:OpenGL-Bullet-engine
文件:PhysicsWorldJbullet.java
@Override
public PhysicsObjJBullet rayTrace(IVec3fR start, IVec3fR end, IVec3fW dest){
ClosestRayResultCallback v=new ClosestRayResultCallback(new Vector3f(start.x(), start.y(), start.z()), new Vector3f(end.x(), end.y(), end.z()));
bulletWorld.rayTest(v.rayFromWorld, v.rayToWorld, v);
if(!v.hasHit()) return null;
if(dest!=null){
dest.x(v.hitPointWorld.x);
dest.y(v.hitPointWorld.y);
dest.z(v.hitPointWorld.z);
}
return (PhysicsObjJBullet)v.collisionObject.getUserPointer();
}
项目:Infernum
文件:ModelKnowledgeBook.java
private static BakedModelKnowledgeBook rebake(ModelKnowledgeBook model, String name) {
Matrix4f m = new Matrix4f();
m.m20 = 1f / 128f;
m.m01 = m.m12 = -m.m20;
m.m33 = 1;
Matrix3f rotation = new Matrix3f();
m.getRotationScale(rotation);
Matrix3f angleZ = new Matrix3f();
angleZ.rotZ(-1.5708F);
rotation.mul(rotation, angleZ);
m.setRotationScale(rotation);
m.setScale(0.66666666667F * m.getScale());
m.setTranslation(new Vector3f(0.1875F, 0.2505F, 0.125F));
SimpleModelFontRenderer fontRenderer = new SimpleModelFontRenderer(Minecraft.getMinecraft().gameSettings, font, Minecraft.getMinecraft().getTextureManager(), false, m, DefaultVertexFormats.ITEM) {
@Override
protected float renderUnicodeChar(char c, boolean italic) {
return super.renderDefaultChar(126, italic);
}
};
int maxLineWidth = 96;
TextureAtlasSprite fontSprite = Minecraft.getMinecraft().getTextureMapBlocks().getAtlasSprite(font2.toString());
List<BakedQuad> textQuads = new ArrayList<BakedQuad>();
fontRenderer.setSprite(fontSprite);
fontRenderer.setFillBlanks(false);
int yOffset = 2;
String title = I18n.translateToLocal(name);
List<String> lines = fontRenderer.listFormattedStringToWidth(title, maxLineWidth);
for (int line = 0; line < lines.size(); line++) {
int offset = ((maxLineWidth - fontRenderer.getStringWidth(lines.get(line))) / 2);
fontRenderer.drawString(lines.get(line), offset, yOffset, 0x00000000);
yOffset += (fontRenderer.FONT_HEIGHT - 1 + 4);
}
textQuads.addAll(fontRenderer.build());
return new BakedModelKnowledgeBook(model, textQuads);
}
项目:Mass
文件:Player.java
@Override
public void updatePhysics() {
Transform t = new Transform();
this.ghostObject.getWorldTransform(t);
Vector3f v = t.origin;
Quat4f r = new Quat4f();
r = t.getRotation(r);
//TODO: FIX ROTATION. - Oskar Mendel 2017-07-05
this.setPosition(v.x, v.y, v.z);
this.setRotation(r.x, r.y, r.z, r.w);
}
项目:Mass
文件:TestRoom.java
/**
*
*/
@Override
public void initPhysics() {
DefaultMotionState groundMotionState = new DefaultMotionState(new Transform(new Matrix4f(new Quat4f(0, 0, 0, 1), new Vector3f(0, -1, 0), 1.0f)));
//TODO: Un uglify this code.
TriangleIndexVertexArray vertArray = new TriangleIndexVertexArray();
for (Mesh mesh : this.getMeshes()) {
// Construct collision shape based on the mesh vertices in the Mesh.
float[] positions = mesh.getPositions();
int[] indices = mesh.getIndices();
IndexedMesh indexedMesh = new IndexedMesh();
indexedMesh.numTriangles = indices.length / 3;
indexedMesh.triangleIndexBase = ByteBuffer.allocateDirect(indices.length*4).order(ByteOrder.nativeOrder());
indexedMesh.triangleIndexBase.asIntBuffer().put(indices);
indexedMesh.triangleIndexStride = 3 * 4;
indexedMesh.numVertices = positions.length / 3;
indexedMesh.vertexBase = ByteBuffer.allocateDirect(positions.length*4).order(ByteOrder.nativeOrder());
indexedMesh.vertexBase.asFloatBuffer().put(positions);
indexedMesh.vertexStride = 3 * 4;
vertArray.addIndexedMesh(indexedMesh);
}
BvhTriangleMeshShape collShape = new BvhTriangleMeshShape(vertArray, false);
System.out.println("SCALE: " + this.getScale());
//collisionShape = new ScaledBvhTriangleMeshShape(collShape, new Vector3f(this.getcale(), this.getScale(), this.getScale()));
collisionShape = collShape;
collisionShape.setLocalScaling(new Vector3f(this.getScale(), this.getScale(), this.getScale()));
RigidBodyConstructionInfo groundRigidBodyCI = new RigidBodyConstructionInfo(0, groundMotionState, collisionShape, new Vector3f(0,0,0));
rigidBody = new RigidBody(groundRigidBodyCI);
this.rigidBody.activate();
}
项目:Mass
文件:MassterBall.java
/**
* Method to initialize all physics related
* values.
*/
@Override
public void initPhysics() {
motionState = new DefaultMotionState(new Transform(new Matrix4f(new Quat4f(0, 0, 0, 1), new Vector3f(-2, -400, 0), 1.0f)));
// Construct collision shape based on the mesh vertices in the Mesh.
fallInertia = new Vector3f(0,0,0);
collisionShape = new BoxShape(new Vector3f(1, 1, 1));
collisionShape.calculateLocalInertia(mass,fallInertia);
// Construct the RigidBody.
RigidBodyConstructionInfo rigidBodyCI = new RigidBodyConstructionInfo(mass, motionState, collisionShape, fallInertia);
rigidBody = new RigidBody(rigidBodyCI);
}
项目:Mass
文件:MassterBall.java
/**
* Method to update physics logic for this MassterBall.
*/
@Override
public void updatePhysics() {
Vector3f v = this.rigidBody.getWorldTransform(new Transform()).origin;
Quat4f r = new Quat4f();
this.rigidBody.getWorldTransform(new Transform()).getRotation(r);
this.setPosition(v.x, v.y, v.z);
this.setRotation(r.w, r.x, r.y, r.z);
}
项目:Mass
文件:PhysicsSpace.java
/**
*
*/
public PhysicsSpace() {
// TODO: Comments on stuff.
broadPhase = new DbvtBroadphase();
collisionConfiguration = new DefaultCollisionConfiguration();
dispatcher = new CollisionDispatcher(collisionConfiguration);
solver = new SequentialImpulseConstraintSolver();
dynamicsWorld = new DiscreteDynamicsWorld(dispatcher, broadPhase, solver, collisionConfiguration);
dynamicsWorld.getBroadphase().getOverlappingPairCache().setInternalGhostPairCallback(new GhostPairCallback());
dynamicsWorld.setGravity(new Vector3f(0, -10, 0));
}
项目:ar-drawing-java
文件:DrawAR.java
/**
* addStroke creates a new stroke
*
* @param newPoint a 3D point in world space
*/
private void addStroke(Vector3f newPoint) {
biquadFilter = new BiquadFilter(mLineSmoothing);
for (int i = 0; i < 1500; i++) {
biquadFilter.update(newPoint);
}
Vector3f p = biquadFilter.update(newPoint);
mLastPoint = new Vector3f(p);
mStrokes.add(new ArrayList<Vector3f>());
mStrokes.get(mStrokes.size() - 1).add(mLastPoint);
}
项目:ar-drawing-java
文件:LineUtils.java
/**
* @param newPoint
* @param lastPoint
* @return
*/
public static boolean distanceCheck(Vector3f newPoint, Vector3f lastPoint) {
Vector3f temp = new Vector3f();
temp.sub(newPoint, lastPoint);
if (temp.length() > AppSettings.getMinDistance()) {
return true;
}
return false;
}
项目:Clef
文件:BakedModelInstrument.java
@Override
public Pair<? extends IBakedModel, Matrix4f> handlePerspective(ItemCameraTransforms.TransformType type)
{
if(instrument != null)
{
HashMap<ItemCameraTransforms.TransformType, TRSRTransformation> map = new HashMap<>();
map.put(ItemCameraTransforms.TransformType.FIRST_PERSON_LEFT_HAND, new TRSRTransformation(new Vector3f(1F, 0F, 1F), TRSRTransformation.quatFromXYZDegrees(new Vector3f(0F, 180F, 0F)), new Vector3f(1F, 1F, 1F), new Quat4f()));
map.put(ItemCameraTransforms.TransformType.THIRD_PERSON_LEFT_HAND, new TRSRTransformation(new Vector3f(0.1F, 0F + (instrument.handImg.getHeight() <= 16F ? 0F : MathHelper.clamp((float)instrument.info.activeHandPosition[1], -0.3F, 0.3F)), 0.025F - (instrument.handImg.getWidth() <= 16F ? 0F : MathHelper.clamp((float)instrument.info.activeHandPosition[0], -0.5F, 0.5F))), TRSRTransformation.quatFromXYZDegrees(new Vector3f(0F, 80F, 0F)), new Vector3f(-1F, 1F, 1F), TRSRTransformation.quatFromXYZDegrees(new Vector3f(0F, 0F, 0F))));
map.put(ItemCameraTransforms.TransformType.THIRD_PERSON_RIGHT_HAND, new TRSRTransformation(new Vector3f(-0.1F, 0F + (instrument.handImg.getHeight() <= 16F ? 0F : MathHelper.clamp((float)instrument.info.activeHandPosition[1], -0.3F, 0.3F)), 1F - (instrument.handImg.getWidth() <= 16F ? 0F : MathHelper.clamp((float)instrument.info.activeHandPosition[0], -0.5F, 0.5F))), TRSRTransformation.quatFromXYZDegrees(new Vector3f(0F, 80F, 0F)), new Vector3f(1F, 1F, 1F), TRSRTransformation.quatFromXYZDegrees(new Vector3f(0F, 0F, 0F))));
ImmutableMap<ItemCameraTransforms.TransformType, TRSRTransformation> transforms = ImmutableMap.copyOf(map);
return PerspectiveMapWrapper.handlePerspective(ModelBaseWrapper.isEntityRender(type) ? instrument.handModel : instrument.iconModel, transforms, type);
}
return PerspectiveMapWrapper.handlePerspective(this, transforms, type);
}
项目:SimpleTubes
文件:ModelFactory.java
protected static void putVertexData(UnpackedBakedQuad.Builder builder, Vector3f pos, EnumFacing facing, float u, float v, TextureAtlasSprite sprite, Color col, TRSRTransformation transform) {
for (int e = 0; e < builder.getVertexFormat().getElementCount(); e++)
switch (builder.getVertexFormat().getElement(e).getUsage()) {
case POSITION:
if (transform == TRSRTransformation.identity()) {
builder.put(e, pos.getX(), pos.getY(), pos.getZ(), 1F);
} else {
Vector4f vec = new Vector4f();
vec.x = pos.x;
vec.y = pos.y;
vec.z = pos.z;
vec.w = 1;
transform.getMatrix().transform(vec);
builder.put(e, vec.x, vec.y, vec.z, vec.w);
}
break;
case COLOR:
float r = ((col.getRGB() >> 16) & 0xFF) / 255f; // red
float g = ((col.getRGB()>> 8) & 0xFF) / 255f; // green
float b = ((col.getRGB() >> 0) & 0xFF) / 255f; // blue
float a = ((col.getRGB() >> 24) & 0xFF) / 255f; // alpha
builder.put(e, r, g, b, a);
break;
case UV:
if (builder.getVertexFormat().getElement(e).getIndex() == 0) {
builder.put(e, u, v, 0F, 1F);
break;
}
break;
case NORMAL:
Normal normal = new Normal(facing.getDirectionVec().getX(), facing.getDirectionVec().getY(), facing.getDirectionVec().getZ());
builder.put(e, normal.x, normal.y, normal.z, 0);
break;
default:
builder.put(e);
}
}
项目:FastNoise_Java
文件:FastNoise.java
public void GradientPerturbFractal(Vector3f v3) {
int seed = m_seed;
float amp = m_gradientPerturbAmp * m_fractalBounding;
float freq = m_frequency;
SingleGradientPerturb(seed, amp, m_frequency, v3);
for (int i = 1; i < m_octaves; i++) {
freq *= m_lacunarity;
amp *= m_gain;
SingleGradientPerturb(++seed, amp, freq, v3);
}
}
项目:CustomWorldGen
文件:ForgeHooksClient.java
public static void transform(org.lwjgl.util.vector.Vector3f vec, Matrix4f m)
{
Vector4f tmp = new Vector4f(vec.x, vec.y, vec.z, 1f);
m.transform(tmp);
if(Math.abs(tmp.w - 1f) > 1e-5) tmp.scale(1f / tmp.w);
vec.set(tmp.x, tmp.y, tmp.z);
}
项目:CustomWorldGen
文件:OBJModel.java
public Normal getNormal()
{
Vector3f a = this.verts[2].getPos3();
a.sub(this.verts[0].getPos3());
Vector3f b = this.verts[3].getPos3();
b.sub(this.verts[1].getPos3());
a.cross(a, b);
a.normalize();
return new Normal(a);
}
项目:CustomWorldGen
文件:ForgeBlockStateV1.java
private static TRSRTransformation get(float tx, float ty, float tz, float ax, float ay, float az, float s)
{
return TRSRTransformation.blockCenterToCorner(new TRSRTransformation(
new Vector3f(tx / 16, ty / 16, tz / 16),
TRSRTransformation.quatFromXYZDegrees(new Vector3f(ax, ay, az)),
new Vector3f(s, s, s),
null));
}