Correctly apply frame transform to light direction.
PiperOrigin-RevId: 665340267 Change-Id: Ida16ddbf3a057ffd3e260b71180a45acbf749931
This commit is contained in:
committed by
Copybara-Service
parent
2425358c3b
commit
ad9cd7301e
@@ -3222,11 +3222,14 @@ void mjCLight::CopyFromSpec() {
|
||||
void mjCLight::Compile(void) {
|
||||
CopyFromSpec();
|
||||
|
||||
double quat[4]= {1, 0, 0, 0};
|
||||
|
||||
// frame
|
||||
if (frame) {
|
||||
mjuu_frameaccumChild(frame->pos, frame->quat, pos, quat);
|
||||
// apply frame transform to pos, qunit is unused
|
||||
double qunit[4]= {1, 0, 0, 0};
|
||||
mjuu_frameaccumChild(frame->pos, frame->quat, pos, qunit);
|
||||
|
||||
// rotate dir
|
||||
mjuu_rotVecQuat(dir, dir, frame->quat);
|
||||
}
|
||||
|
||||
// normalize direction, make sure it is not zero
|
||||
|
||||
@@ -2086,7 +2086,6 @@ TEST_F(MujocoTest, Frame) {
|
||||
</body>
|
||||
</worldbody>
|
||||
</mujoco>
|
||||
|
||||
)";
|
||||
constexpr mjtNum eps = 1e-14;
|
||||
std::array<char, 1024> error;
|
||||
@@ -2142,6 +2141,34 @@ TEST_F(MujocoTest, Frame) {
|
||||
mj_deleteData(d);
|
||||
}
|
||||
|
||||
TEST_F(MujocoTest, FrameTransformsLight) {
|
||||
static constexpr char xml[] = R"(
|
||||
<mujoco>
|
||||
<worldbody>
|
||||
<frame euler="0 45 0" pos="0 0 1">
|
||||
<light pos="-1 0 0" dir="1 0 -1"/>
|
||||
</frame>
|
||||
</worldbody>
|
||||
</mujoco>
|
||||
)";
|
||||
std::array<char, 1024> error;
|
||||
mjModel* m = LoadModelFromString(xml, error.data(), error.size());
|
||||
EXPECT_THAT(m, testing::NotNull()) << error.data();
|
||||
EXPECT_EQ(m->nlight, 1);
|
||||
|
||||
constexpr mjtNum eps = 1e-14;
|
||||
EXPECT_NEAR(m->light_pos[0], -mju_sqrt(.5), eps);
|
||||
EXPECT_NEAR(m->light_pos[1], 0, eps);
|
||||
EXPECT_NEAR(m->light_pos[2], 1 + mju_sqrt(.5), eps);
|
||||
|
||||
EXPECT_NEAR(m->light_dir[0], 0, eps);
|
||||
EXPECT_NEAR(m->light_dir[1], 0, eps);
|
||||
EXPECT_NEAR(m->light_dir[2], -1, eps);
|
||||
|
||||
mj_deleteModel(m);
|
||||
}
|
||||
|
||||
|
||||
// ------------- test bvh ------------------------------------------------------
|
||||
TEST_F(MujocoTest, RobustBVH) {
|
||||
static constexpr char xml1[] = R"(
|
||||
|
||||
Reference in New Issue
Block a user