virtual void on_draw() { pixfmt pixf(rbuf_window()); renderer_base rb(pixf); renderer_solid r(rb); rb.clear(agg::rgba(1, 1, 1)); agg::trans_warp_magnifier lens; lens.center(g_x1, g_y1); lens.magnification(m_magn_slider.value()); lens.radius(m_radius_slider.value() / m_magn_slider.value()); agg::conv_segmentator<agg::path_storage> segm(g_path); agg::trans_affine mtx; mtx *= agg::trans_affine_translation(-g_base_dx, -g_base_dy); mtx *= agg::trans_affine_rotation(g_angle + agg::pi); mtx *= agg::trans_affine_translation(width()/2, height()/2); agg::conv_transform< agg::conv_segmentator< agg::path_storage> > trans_mtx(segm, mtx); agg::conv_transform< agg::conv_transform< agg::conv_segmentator< agg::path_storage> >, agg::trans_warp_magnifier> trans_lens(trans_mtx, lens); agg::render_all_paths(g_rasterizer, g_scanline, r, trans_lens, g_colors, g_path_idx, g_npaths); agg::render_ctrl(g_rasterizer, g_scanline, rb, m_magn_slider); agg::render_ctrl(g_rasterizer, g_scanline, rb, m_radius_slider); // Testing inverse_transform() //-------------------- //double x, y; //for(y = 0; y < height(); y += 10) //{ // for(x = 0; x < height(); x += 10) // { // double x2 = x+0.5; // double y2 = y+0.5; // lens.transform(&x2, &y2); // lens.inverse_transform(&x2, &y2); // agg::ellipse e(x2, y2, 1, 1); // g_rasterizer.add_path(e); // r.color(agg::rgba8(0,0,0)); // agg::render_scanlines(g_rasterizer, g_scanline, r); // } //} }
void decompose_matrix(D3DXVECTOR3& d3d_pos, D3DXQUATERNION& d3d_rot, D3DXVECTOR3& d3d_scale, const MMatrix& mtx) { MTransformationMatrix trans_mtx(mtx); MVector translation = trans_mtx.getTranslation(MSpace::kPostTransform); double q_x, q_y, q_z, q_w; trans_mtx.getRotationQuaternion(q_x, q_y, q_z, q_w, MSpace::kPostTransform); double scale[3]; trans_mtx.getScale(scale, MSpace::kPostTransform); d3d_pos = D3DXVECTOR3((float)translation.x, (float)translation.y, (float)-translation.z); d3d_rot = D3DXQUATERNION ((float)q_x, (float)q_y, (float)-q_z, (float)q_w); d3d_scale = D3DXVECTOR3((float)scale[0], (float)scale[1], (float)scale[2]); }
D3DXMATRIX to_matrix(const MMatrix& mtx) { MTransformationMatrix trans_mtx(mtx); MVector translation = trans_mtx.getTranslation(MSpace::kPostTransform); double q_x, q_y, q_z, q_w; trans_mtx.getRotationQuaternion(q_x, q_y, q_z, q_w); double scale[3]; trans_mtx.getScale(scale, MSpace::kPostTransform); D3DXVECTOR3 d3d_pos((float)translation.x, (float)translation.y, (float)-translation.z); D3DXVECTOR3 d3d_scale((float)scale[0], (float)scale[1], (float)-scale[2]); D3DXQUATERNION d3d_rot((float)q_x, (float)q_y, (float)-q_z, (float)q_w); D3DXVECTOR3 kvtxZero(0,0,0); D3DXQUATERNION qtId; D3DXQuaternionIdentity(&qtId); D3DXMATRIX d3d_mtx; D3DXMatrixTransformation(&d3d_mtx, &kvtxZero, &qtId, &d3d_scale, &kvtxZero, &d3d_rot, &d3d_pos); return d3d_mtx; }