Remove vm_angles_2_matrix return value

This commit is contained in:
Kp 2015-02-05 03:03:51 +00:00
parent 8d3f047427
commit 673a711461
13 changed files with 28 additions and 58 deletions

View file

@ -274,7 +274,7 @@ fixang vm_vec_delta_ang_norm (const vms_vector &v0, const vms_vector &v1, const
//computes a matrix from a set of three angles. returns ptr to matrix
vms_matrix &vm_angles_2_matrix (vms_matrix &m, const vms_angvec &a);
void vm_angles_2_matrix (vms_matrix &m, const vms_angvec &a);
static inline vms_matrix vm_angles_2_matrix (const vms_angvec &a) __attribute_warn_unused_result;
static inline vms_matrix vm_angles_2_matrix (const vms_angvec &a)
{

View file

@ -426,13 +426,13 @@ static vms_matrix *sincos_2_matrix(vms_matrix *m,fix sinp,fix cosp,fix sinb,fix
}
//computes a matrix from a set of three angles. returns ptr to matrix
vms_matrix &vm_angles_2_matrix(vms_matrix &m,const vms_angvec &a)
void vm_angles_2_matrix(vms_matrix &m,const vms_angvec &a)
{
fix sinp,cosp,sinb,cosb,sinh,cosh;
fix_sincos(a.p,&sinp,&cosp);
fix_sincos(a.b,&sinb,&cosb);
fix_sincos(a.h,&sinh,&cosh);
return *sincos_2_matrix(&m,sinp,cosp,sinb,cosb,sinh,cosh);
sincos_2_matrix(&m,sinp,cosp,sinb,cosb,sinh,cosh);
}
//computes a matrix from a forward vector and an angle

View file

@ -167,12 +167,10 @@ int medlisp_scale_segment(void)
int medlisp_rotate_segment(void)
{
vms_matrix rotmat;
Seg_orientation.p = func_get_param(0);
Seg_orientation.b = func_get_param(1);
Seg_orientation.h = func_get_param(2);
med_rotate_segment(Cursegp,vm_angles_2_matrix(rotmat,Seg_orientation));
med_rotate_segment(Cursegp,vm_angles_2_matrix(Seg_orientation));
Update_flags |= UF_WORLD_CHANGED | UF_VIEWPOINT_MOVED;
mine_changed = 1;
return 1;

View file

@ -554,37 +554,31 @@ void med_extract_matrix_from_segment(const vcsegptr_t sp,vms_matrix *rotmat)
void update_matrix_based_on_side(vms_matrix &rotmat,int destside)
{
vms_angvec rotvec;
vms_matrix r1;
switch (destside) {
case WLEFT:
vm_angvec_make(&rotvec,0,0,-16384);
vm_angles_2_matrix(r1,rotvec);
rotmat = vm_matrix_x_matrix(rotmat, r1);
rotmat = vm_matrix_x_matrix(rotmat, vm_angles_2_matrix(rotvec));
break;
case WTOP:
vm_angvec_make(&rotvec,-16384,0,0);
vm_angles_2_matrix(r1,rotvec);
rotmat = vm_matrix_x_matrix(rotmat, r1);
rotmat = vm_matrix_x_matrix(rotmat, vm_angles_2_matrix(rotvec));
break;
case WRIGHT:
vm_angvec_make(&rotvec,0,0,16384);
vm_angles_2_matrix(r1,rotvec);
rotmat = vm_matrix_x_matrix(rotmat, r1);
rotmat = vm_matrix_x_matrix(rotmat, vm_angles_2_matrix(rotvec));
break;
case WBOTTOM:
vm_angvec_make(&rotvec,+16384,-32768,0); // bank was -32768, but I think that was an erroneous compensation
vm_angles_2_matrix(r1,rotvec);
rotmat = vm_matrix_x_matrix(rotmat, r1);
rotmat = vm_matrix_x_matrix(rotmat, vm_angles_2_matrix(rotvec));
break;
case WFRONT:
vm_angvec_make(&rotvec,0,0,-32768);
vm_angles_2_matrix(r1,rotvec);
rotmat = vm_matrix_x_matrix(rotmat, r1);
rotmat = vm_matrix_x_matrix(rotmat, vm_angles_2_matrix(rotvec));
break;
case WBACK:
@ -906,9 +900,7 @@ int med_attach_segment(const vsegptridx_t destseg, const vsegptr_t newseg, int d
segment *ocursegp = Cursegp;
vms_angvec tang = {0,0,0};
vms_matrix rotmat;
vm_angles_2_matrix(rotmat,tang);
const auto &&rotmat = vm_angles_2_matrix(tang);
rval = med_attach_segment_rotated(destseg,newseg,destside,newside,rotmat);
med_propagate_tmaps_to_segments(ocursegp,Cursegp,0);
med_propagate_tmaps_to_back_side(Cursegp, Side_opposite[newside],0);

View file

@ -745,8 +745,6 @@ static window_event_result automap_key_command(window *wind,const d_event &event
static window_event_result automap_process_input(window *wind,const d_event &event, automap *am)
{
vms_matrix tempm;
Controls = am->controls;
kconfig_read_controls(event, 1);
am->controls = Controls;
@ -784,7 +782,7 @@ static window_event_result automap_process_input(window *wind,const d_event &eve
tangles.h = fixdiv( am->controls.heading_time, ROT_SPEED_DIVISOR );
tangles.b = fixdiv( am->controls.bank_time, ROT_SPEED_DIVISOR*2 );
vm_angles_2_matrix(tempm, tangles);
const auto &&tempm = vm_angles_2_matrix(tangles);
am->viewMatrix = vm_matrix_x_matrix(am->viewMatrix,tempm);
check_and_fix_matrix(am->viewMatrix);
}
@ -826,7 +824,7 @@ static window_event_result automap_process_input(window *wind,const d_event &eve
old_vt = am->view_target;
tangles1 = am->tangles;
vm_angles_2_matrix(tempm,tangles1);
const auto &&tempm = vm_angles_2_matrix(tangles1);
vm_matrix_x_matrix(am->viewMatrix,Objects[Players[Player_num].objnum].orient,tempm);
vm_vec_scale_add2( am->view_target, am->viewMatrix.uvec, am->controls.vertical_thrust_time*SLIDE_SPEED );
vm_vec_scale_add2( am->view_target, am->viewMatrix.rvec, am->controls.sideways_thrust_time*SLIDE_SPEED );
@ -834,7 +832,7 @@ static window_event_result automap_process_input(window *wind,const d_event &eve
am->view_target = old_vt;
}
vm_angles_2_matrix(tempm,am->tangles);
const auto &&tempm = vm_angles_2_matrix(am->tangles);
vm_matrix_x_matrix(am->viewMatrix,Objects[Players[Player_num].objnum].orient,tempm);
clamp_fix_lh(am->viewDist, ZOOM_MIN_VALUE, ZOOM_MAX_VALUE);

View file

@ -70,7 +70,6 @@ void read_flying_controls(const vobjptr_t obj)
if (Guided_missile[Player_num] && Guided_missile[Player_num]->signature==Guided_missile_sig[Player_num]) {
vms_angvec rotangs;
vms_matrix rotmat;
fix speed;
//this is a horrible hack. guided missile stuff should not be
@ -82,7 +81,7 @@ void read_flying_controls(const vobjptr_t obj)
rotangs.b = Controls.bank_time / 2 + Seismic_tremor_magnitude/16;
rotangs.h = Controls.heading_time / 2 + Seismic_tremor_magnitude/64;
vm_angles_2_matrix(rotmat,rotangs);
const auto &&rotmat = vm_angles_2_matrix(rotangs);
Guided_missile[Player_num]->orient = vm_matrix_x_matrix(Guided_missile[Player_num]->orient, rotmat);
speed = Weapon_info[Guided_missile[Player_num]->id].speed[Difficulty_level];

View file

@ -1105,10 +1105,9 @@ static void endlevel_render_mine(fix eye_offset)
}
if (Endlevel_sequence == EL_LOOKBACK) {
vms_matrix headm;
vms_angvec angles = {0,0,0x7fff};
vm_angles_2_matrix(headm,angles);
const auto &&headm = vm_angles_2_matrix(angles);
const auto viewm = vm_matrix_x_matrix(Viewer->orient,headm);
g3_set_view_matrix(Viewer_eye,viewm,Render_zoom);
}
@ -1294,7 +1293,6 @@ int _do_slew_movement(const vobjptr_t obj, int check_keys )
{
int moved = 0;
vms_vector svel; //scaled velocity (per this frame)
vms_matrix rotmat;
vms_angvec rotang;
if (keyd_pressed[KEY_PAD5])
@ -1321,7 +1319,7 @@ int _do_slew_movement(const vobjptr_t obj, int check_keys )
moved = rotang.pitch | rotang.bank | rotang.head;
vm_angles_2_matrix(rotmat,rotang);
const auto &&rotmat = vm_angles_2_matrix(rotang);
const auto new_pm = vm_transposed_matrix(obj->orient = vm_matrix_x_matrix(obj->orient,rotmat));
//make those columns rows
@ -1491,7 +1489,6 @@ try_again:
case 5: //earth pos
case 7: { //station pos
vms_matrix tm;
vms_angvec ta;
int pitch,head;
@ -1501,7 +1498,7 @@ try_again:
ta.p = -i2f(pitch)/360;
ta.b = 0;
vm_angles_2_matrix(tm,ta);
const auto &&tm = vm_angles_2_matrix(ta);
if (var==5)
satellite_pos = tm.fvec;
@ -1552,9 +1549,7 @@ try_again:
//compute orientation of surface
{
vms_matrix exit_orient;
vm_angles_2_matrix(exit_orient,exit_angles);
auto &&exit_orient = vm_angles_2_matrix(exit_angles);
vm_transpose_matrix(exit_orient);
vm_matrix_x_matrix(surface_orient,mine_exit_orient,exit_orient);

View file

@ -399,11 +399,7 @@ static void draw_model(polygon_model_points &robot_points, polymodel *pm, int su
g3_draw_morphing_model(&pm->model_data[pm->submodel_ptrs[submodel_num]],&texture_list[0],anim_angles,light,&md->morph_vecs[md->submodel_startpoints[submodel_num]], robot_points);
}
else {
vms_matrix orient;
vm_angles_2_matrix(orient,anim_angles[mn]);
const auto &&orient = vm_angles_2_matrix(anim_angles[mn]);
g3_start_instance_matrix(pm->submodel_offsets[mn],&orient);
draw_model(robot_points,pm,mn,anim_angles,light,md);
g3_done_instance();

View file

@ -1596,15 +1596,13 @@ void obj_relink_all(void)
static void spin_object(const vobjptr_t obj)
{
vms_angvec rotangs;
vms_matrix rotmat;
Assert(obj->movement_type == MT_SPINNING);
rotangs.p = fixmul(obj->mtype.spin_rate.x,FrameTime);
rotangs.h = fixmul(obj->mtype.spin_rate.y,FrameTime);
rotangs.b = fixmul(obj->mtype.spin_rate.z,FrameTime);
vm_angles_2_matrix(rotmat,rotangs);
const auto &&rotmat = vm_angles_2_matrix(rotangs);
obj->orient = vm_matrix_x_matrix(obj->orient,rotmat);
check_and_fix_matrix(obj->orient);
}

View file

@ -118,15 +118,13 @@ static void do_physics_align_object(const vobjptr_t obj)
delta_ang += obj->mtype.phys_info.turnroll;
if (abs(delta_ang) > DAMP_ANG) {
vms_matrix rotmat;
roll_ang = fixmul(FrameTime,ROLL_RATE);
if (abs(delta_ang) < roll_ang) roll_ang = delta_ang;
else if (delta_ang<0) roll_ang = -roll_ang;
tangles.p = tangles.h = 0; tangles.b = roll_ang;
vm_angles_2_matrix(rotmat,tangles);
const auto &&rotmat = vm_angles_2_matrix(tangles);
obj->orient = vm_matrix_x_matrix(obj->orient,rotmat);
}
else floor_levelling=0;
@ -184,7 +182,6 @@ int Dont_move_ai_objects=0;
static void do_physics_sim_rot(const vobjptr_t obj)
{
vms_angvec tangles;
vms_matrix rotmat;
//fix rotdrag_scale;
physics_info *pi;
@ -246,7 +243,7 @@ static void do_physics_sim_rot(const vobjptr_t obj)
if (obj->mtype.phys_info.turnroll) {
tangles.p = tangles.h = 0;
tangles.b = -obj->mtype.phys_info.turnroll;
vm_angles_2_matrix(rotmat,tangles);
const auto &&rotmat = vm_angles_2_matrix(tangles);
obj->orient = vm_matrix_x_matrix(obj->orient,rotmat);
}
@ -254,7 +251,7 @@ static void do_physics_sim_rot(const vobjptr_t obj)
tangles.h = fixmul(obj->mtype.phys_info.rotvel.y,FrameTime);
tangles.b = fixmul(obj->mtype.phys_info.rotvel.z,FrameTime);
vm_angles_2_matrix(rotmat,tangles);
const auto &&rotmat = vm_angles_2_matrix(tangles);
obj->orient = vm_matrix_x_matrix(obj->orient,rotmat);
if (obj->mtype.phys_info.flags & PF_TURNROLL)
@ -264,7 +261,7 @@ static void do_physics_sim_rot(const vobjptr_t obj)
if (obj->mtype.phys_info.turnroll) {
tangles.p = tangles.h = 0;
tangles.b = obj->mtype.phys_info.turnroll;
vm_angles_2_matrix(rotmat,tangles);
const auto &&rotmat = vm_angles_2_matrix(tangles);
obj->orient = vm_matrix_x_matrix(obj->orient,rotmat);
}

View file

@ -695,21 +695,20 @@ void init_polygon_models()
void draw_model_picture(uint_fast32_t mn,vms_angvec *orient_angles)
{
vms_vector temp_pos=ZERO_VECTOR;
vms_matrix temp_orient = IDENTITY_MATRIX;
g3s_lrgb lrgb = { f1_0, f1_0, f1_0 };
Assert(mn<N_polygon_models);
gr_clear_canvas( BM_XRGB(0,0,0) );
g3_start_frame();
g3_set_view_matrix(temp_pos,temp_orient,0x9000);
g3_set_view_matrix(temp_pos,vmd_identity_matrix,0x9000);
if (Polygon_models[mn].rad != 0)
temp_pos.z = fixmuldiv(DEFAULT_VIEW_DIST,Polygon_models[mn].rad,BASE_MODEL_SIZE);
else
temp_pos.z = DEFAULT_VIEW_DIST;
vm_angles_2_matrix(temp_orient, *orient_angles);
const auto &&temp_orient = vm_angles_2_matrix(*orient_angles);
draw_polygon_model(temp_pos,&temp_orient,NULL,mn,0,lrgb,NULL,NULL);
g3_end_frame();
}

View file

@ -1245,11 +1245,10 @@ void render_frame(fix eye_offset, window_rendered_data &window)
start_seg_num = Viewer->segnum;
if (Rear_view && (Viewer==ConsoleObject)) {
vms_matrix headm;
vms_angvec Player_head_angles;
Player_head_angles.p = Player_head_angles.b = 0;
Player_head_angles.h = 0x7fff;
vm_angles_2_matrix(headm,Player_head_angles);
const auto &&headm = vm_angles_2_matrix(Player_head_angles);
const auto viewm = vm_matrix_x_matrix(Viewer->orient,headm);
g3_set_view_matrix(Viewer_eye,viewm,Render_zoom);
} else {

View file

@ -88,7 +88,6 @@ static int do_slew_movement(const vobjptridx_t obj, int check_keys )
{
int moved = 0;
vms_vector svel; //scaled velocity (per this frame)
vms_matrix rotmat;
vms_angvec rotang;
if (!slew_obj || slew_obj->control_type!=CT_SLEW) return 0;
@ -129,7 +128,7 @@ static int do_slew_movement(const vobjptridx_t obj, int check_keys )
moved = rotang.p | rotang.b | rotang.h;
vm_angles_2_matrix(rotmat,rotang);
const auto &&rotmat = vm_angles_2_matrix(rotang);
const auto new_pm = vm_transposed_matrix(obj->orient = vm_matrix_x_matrix(obj->orient,rotmat)); //make those columns rows
moved |= obj->mtype.phys_info.velocity.x | obj->mtype.phys_info.velocity.y | obj->mtype.phys_info.velocity.z;