forked from blender/blender
Export volumes from object modifier (quick effect) #62
@ -304,7 +304,7 @@ GHOST_IContext *GHOST_SystemWin32::createOffscreenContext(GHOST_GPUSettings gpuS
|
|||||||
true,
|
true,
|
||||||
wnd,
|
wnd,
|
||||||
mHDC,
|
mHDC,
|
||||||
WGL_CONTEXT_CORE_PROFILE_BIT_ARB,
|
WGL_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB,
|
||||||
4,
|
4,
|
||||||
minor,
|
minor,
|
||||||
(debug_context ? WGL_CONTEXT_DEBUG_BIT_ARB : 0),
|
(debug_context ? WGL_CONTEXT_DEBUG_BIT_ARB : 0),
|
||||||
|
@ -65,34 +65,25 @@ void VolumeModifierData::init()
|
|||||||
void VolumeModifierData::write_transform()
|
void VolumeModifierData::write_transform()
|
||||||
{
|
{
|
||||||
Object *object = (Object *)this->id;
|
Object *object = (Object *)this->id;
|
||||||
Mesh *mesh = BKE_object_to_mesh(nullptr, object, false);
|
|
||||||
|
|
||||||
pxr::GfMatrix4d fixed_transform = pxr::GfMatrix4d(1.0f).SetScale(0.5) *
|
/* set base scaling */
|
||||||
pxr::GfMatrix4d(1.0f).SetTranslate(pxr::GfVec3d(0.5));
|
float scale[3];
|
||||||
double det = fixed_transform.GetDeterminant();
|
for (int i = 0; i < 3; ++i) {
|
||||||
pxr::GfMatrix4d inversed = fixed_transform.GetInverse(&det);
|
scale[i] = (object->scale[i] != 0.0f) ? 1.0f / object->scale[i] : 1.0f;
|
||||||
|
|
||||||
float scale[3] = {0.5f, 0.5f, 0.5f};
|
|
||||||
if (object->scale[0] != 0.0f) {
|
|
||||||
scale[0] = 0.5f / object->scale[0];
|
|
||||||
}
|
}
|
||||||
if (object->scale[1] != 0.0f) {
|
transform = pxr::GfMatrix4d().SetScale(pxr::GfVec3d(scale));
|
||||||
scale[1] = 0.5f / object->scale[1];
|
|
||||||
}
|
|
||||||
if (object->scale[2] != 0.0f) {
|
|
||||||
scale[2] = 0.5f / object->scale[2];
|
|
||||||
}
|
|
||||||
pxr::GfMatrix4d scale_matrix = pxr::GfMatrix4d(1.0f).SetScale(
|
|
||||||
pxr::GfVec3d(scale[0], scale[1], scale[2]));
|
|
||||||
pxr::GfMatrix4d texture_trans = pxr::GfMatrix4d(1.0f).SetTranslate(pxr::GfVec3d(
|
|
||||||
mesh->texspace_location[0], mesh->texspace_location[1], mesh->texspace_location[2]));
|
|
||||||
pxr::GfMatrix4d texture_scale = pxr::GfMatrix4d(1.0f).SetScale(
|
|
||||||
pxr::GfVec3d(mesh->texspace_size[0], mesh->texspace_size[1], mesh->texspace_size[2]));
|
|
||||||
|
|
||||||
transform = scale_matrix * inversed * texture_scale * texture_trans *
|
/* positioning to center */
|
||||||
gf_matrix_from_transform(object->object_to_world);
|
transform *= pxr::GfMatrix4d().SetTranslate(pxr::GfVec3d(-1, -1, -1));
|
||||||
|
|
||||||
BKE_object_to_mesh_clear(object);
|
/* including texspace transform */
|
||||||
|
float texspace_loc[3] = {0.0f, 0.0f, 0.0f}, texspace_scale[3] = {1.0f, 1.0f, 1.0f};
|
||||||
|
BKE_mesh_texspace_get((Mesh *)object->data, texspace_loc, texspace_scale);
|
||||||
|
transform *= pxr::GfMatrix4d(1.0f).SetScale(pxr::GfVec3d(texspace_scale)) *
|
||||||
|
pxr::GfMatrix4d(1.0f).SetTranslate(pxr::GfVec3d(texspace_loc));
|
||||||
|
|
||||||
|
/* */
|
||||||
|
transform *= gf_matrix_from_transform(object->object_to_world);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string VolumeModifierData::get_cached_file_path(std::string directory, int frame)
|
std::string VolumeModifierData::get_cached_file_path(std::string directory, int frame)
|
||||||
|
Loading…
Reference in New Issue
Block a user