private static Vector3f calculateSpherePoint(float x, float y) { Vector3f result = new Vector3f(x, y, 0); float sqrZ = 1 - Vector3f.dot(result, result); if (sqrZ > 0) result.z = (float)Math.sqrt(sqrZ); else result.normalise(); return result; }
/** * Calculate the angle between two vectors, in radians * @param a A vector * @param b The other vector * @return the angle between the two vectors, in radians */ public static float angle(Vector3f a, Vector3f b) { float dls = dot(a, b) / (a.length() * b.length()); if (dls < -1f) dls = -1f; else if (dls > 1.0f) dls = 1.0f; return (float)Math.acos(dls); }
private Matrix4f getTransform(float mouseX, float mouseY) { Preconditions.checkNotNull(dragStart, "Draging not started"); Vector3f current = calculateSpherePoint(mouseX, mouseY); float dot = Vector3f.dot(dragStart, current); if (Math.abs(dot - 1) < 0.0001) return lastTransform; Vector3f axis = Vector3f.cross(dragStart, current, null); try { axis.normalise(); } catch (IllegalStateException e) { // Zero length vector return lastTransform; } float angle = 2 * (float)(Math.acos(dot)); Matrix4f rotation = new Matrix4f(); rotation.rotate(angle, axis); return Matrix4f.mul(rotation, lastTransform, null); }
private void renderAttack(Vector3f dir, float percent) { GlStateManager.pushMatrix(); Vector3f front = new Vector3f(1, 0, 0); Vector3f c = Vector3f.cross(dir, front, null); double omega = Math.acos(Vector3f.dot(dir, front)); GlStateManager.rotate((float) (omega * (180 / Math.PI)), c.x, c.y, c.z); RenderUtils.applyColorWithMultipy(Reference.COLOR_HOLO, 1 * percent); Minecraft.getMinecraft().renderEngine.bindTexture(forcefield_damage_tex); //normal_sphere.renderAll(); GlStateManager.popMatrix(); } }
public static void beginDrawinngBlockScreen(double x, double y, double z, EnumFacing side, Color color, TileEntity entity, double offset, float glowAlpha) { GlStateManager.enableBlend(); GlStateManager.disableLighting(); disableLightmap(); Vector3f dir = new Vector3f(side.getDirectionVec().getX(), side.getDirectionVec().getY(), side.getDirectionVec().getZ()); Vector3f front = new Vector3f(0, 0, -1); Vector3f c = Vector3f.cross(front, dir, null); double omega = Math.acos(Vector3f.dot(front, dir)); if (omega == Math.PI) { c.y = 1; } GlStateManager.pushMatrix(); GlStateManager.translate(dir.x * (0.5 + offset), dir.y * (0.5 + offset), dir.z * (0.5 + offset)); GlStateManager.translate(x + 0.5, y + 0.5, z + 0.5); GlStateManager.rotate((float) (omega * (180 / Math.PI)), c.x, c.y, c.z); GlStateManager.rotate(180, 0, 0, 1); GlStateManager.translate(-0.5, -0.5, 0); GlStateManager.blendFunc(GL_ONE, GL_ONE_MINUS_SRC_COLOR); float multiply = (float) (MOMathHelper.noise(entity.getPos().getX(), entity.getWorld().getWorldTime() * 0.01, entity.getPos().getZ()) * 0.5 + 0.5) * glowAlpha; GlStateManager.color(color.getFloatR() * multiply, color.getFloatG() * multiply, color.getFloatB() * multiply); Minecraft.getMinecraft().getTextureManager().bindTexture(TileEntityRendererPatternMonitor.screenTextureGlow); RenderUtils.drawPlane(1); GlStateManager.translate(0, 0, -0.05); GlStateManager.color(color.getFloatR() * 0.05f, color.getFloatG() * 0.05f, color.getFloatB() * 0.05f); Minecraft.getMinecraft().getTextureManager().bindTexture(TileEntityRendererPatternMonitor.screenTextureBack); RenderUtils.drawPlane(1); }
Vector3f front = new Vector3f(0, 0, -1); Vector3f c = Vector3f.cross(dir, front, null); double omega = Math.acos(Vector3f.dot(dir, front)); GlStateManager.enableBlend(); GlStateManager.disableCull();