private void Render(object sender, GlControlEventArgs e) { if (_shader == null) { return; } var v = _cameraHelper.CameraMatrix; _shader.M = v; _shader.ShadingLevel = 0; FiguresHelper.Draw3DCross(4, 1); _shader.ShadingLevel = 1; _shader.LightPos = new Vector3(1f, 1f, 1f); var r1 = Matrix4x4.CreateRotationY(Mathf.ToRadian(_phi)); var t = Matrix4x4.CreateTranslation(new Vector3(_radius, 2f, 0f)); var r2 = Matrix4x4.CreateRotationX(Mathf.ToRadian(90)) * Matrix4x4.CreateRotationY(Mathf.ToRadian(90)) * Matrix4x4.CreateRotationZ(Mathf.ToRadian(45)); var scaleM = Matrix4x4.CreateScale(0.2f); var r3 = Matrix4x4.CreateRotationY(Mathf.ToRadian(-_phi * 10)); var r4 = Matrix4x4.CreateRotationZ(Mathf.ToRadian(25)); var m = r3 * r2 * t * r1 * scaleM * r4; _shader.M = m * v; Figure3DHelper.DrawMesh(_boomerang, Colors.Chocolate); _phi += _step; }
private void OnMouseMove(object sender, MouseEventArgs e) { Control senderControl = (Control)sender; GetNormalized(e.Location, senderControl, out float newX, out float newY); if (_isLeftMousePressed) { float dx = newX - _prevPoint.X; float dy = newY - _prevPoint.Y; ModelMatrix *= Matrix4x4.CreateRotationX(-dy, Vector3.Zero); ModelMatrix *= Matrix4x4.CreateRotationY(dx, Vector3.Zero); } if (_isRightMousePressed) { float dx = newX - _prevPoint.X; float dy = newY - _prevPoint.Y; float sensitivity = 50.0f; dx = dx * sensitivity; dy = dy * sensitivity; _yaw += dx; _pitch += dy; if (_pitch > 89.0f) { _pitch = 89.0f; } if (_pitch < -89.0f) { _pitch = -89.0f; } Vector3 newFront; newFront.X = (float)(Math.Cos(_yaw.ToRadians()) * Math.Cos(_pitch.ToRadians())); newFront.Y = (float)Math.Sin(_pitch.ToRadians()); newFront.Z = (float)(Math.Sin(_yaw.ToRadians()) * Math.Cos(_pitch.ToRadians())); _cameraFront = Vector3.Normalize(newFront); } _prevPoint.X = newX; _prevPoint.Y = newY; }