Changeset View
Changeset View
Standalone View
Standalone View
source/blender/blenkernel/intern/particle.c
| Show First 20 Lines • Show All 1,667 Lines • ▼ Show 20 Lines | else { | ||||
| mul_qt_qtqt(result->rot, first->rot, result->rot); | mul_qt_qtqt(result->rot, first->rot, result->rot); | ||||
| } | } | ||||
| } | } | ||||
| /************************************************/ | /************************************************/ | ||||
| /* Particles on a dm */ | /* Particles on a dm */ | ||||
| /************************************************/ | /************************************************/ | ||||
| void psys_interpolate_face(MVert *mvert, | void psys_interpolate_face(Mesh *mesh, | ||||
| MVert *mvert, | |||||
| const float (*vert_normals)[3], | const float (*vert_normals)[3], | ||||
| MFace *mface, | MFace *mface, | ||||
| MTFace *tface, | MTFace *tface, | ||||
| float (*orcodata)[3], | float (*orcodata)[3], | ||||
| float w[4], | float w[4], | ||||
| float vec[3], | float vec[3], | ||||
| float nor[3], | float nor[3], | ||||
| float utan[3], | float utan[3], | ||||
| ▲ Show 20 Lines • Show All 103 Lines • ▼ Show 20 Lines | if (orcodata) { | ||||
| if (mface->v4) { | if (mface->v4) { | ||||
| o4 = orcodata[mface->v4]; | o4 = orcodata[mface->v4]; | ||||
| interp_v3_v3v3v3v3(orco, o1, o2, o3, o4, w); | interp_v3_v3v3v3v3(orco, o1, o2, o3, o4, w); | ||||
| } | } | ||||
| else { | else { | ||||
| interp_v3_v3v3v3(orco, o1, o2, o3, w); | interp_v3_v3v3v3(orco, o1, o2, o3, w); | ||||
| } | } | ||||
| BKE_mesh_orco_verts_transform(mesh, (float(*)[3])orco, 1, true); | |||||
| } | } | ||||
| else { | else { | ||||
| copy_v3_v3(orco, vec); | copy_v3_v3(orco, vec); | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| void psys_interpolate_uvs(const MTFace *tface, int quad, const float w[4], float uvco[2]) | void psys_interpolate_uvs(const MTFace *tface, int quad, const float w[4], float uvco[2]) | ||||
| { | { | ||||
| ▲ Show 20 Lines • Show All 328 Lines • ▼ Show 20 Lines | if (from == PART_FROM_VERT) { | ||||
| if (nor) { | if (nor) { | ||||
| copy_v3_v3(nor, vert_normals[mapindex]); | copy_v3_v3(nor, vert_normals[mapindex]); | ||||
| } | } | ||||
| if (orco) { | if (orco) { | ||||
| if (orcodata) { | if (orcodata) { | ||||
| copy_v3_v3(orco, orcodata[mapindex]); | copy_v3_v3(orco, orcodata[mapindex]); | ||||
| BKE_mesh_orco_verts_transform(mesh_final, (float(*)[3])orco, 1, true); | |||||
| } | } | ||||
| else { | else { | ||||
| copy_v3_v3(orco, vec); | copy_v3_v3(orco, vec); | ||||
| } | } | ||||
| } | } | ||||
| if (utan && vtan) { | if (utan && vtan) { | ||||
| utan[0] = utan[1] = utan[2] = 0.0f; | utan[0] = utan[1] = utan[2] = 0.0f; | ||||
| Show All 9 Lines | else { /* PART_FROM_FACE / PART_FROM_VOLUME */ | ||||
| mvert = mesh_final->mvert; | mvert = mesh_final->mvert; | ||||
| mtface = mesh_final->mtface; | mtface = mesh_final->mtface; | ||||
| if (mtface) { | if (mtface) { | ||||
| mtface += mapindex; | mtface += mapindex; | ||||
| } | } | ||||
| if (from == PART_FROM_VOLUME) { | if (from == PART_FROM_VOLUME) { | ||||
| psys_interpolate_face( | psys_interpolate_face(mesh_final, | ||||
| mvert, vert_normals, mface, mtface, orcodata, mapfw, vec, tmpnor, utan, vtan, orco); | mvert, | ||||
| vert_normals, | |||||
| mface, | |||||
| mtface, | |||||
| orcodata, | |||||
| mapfw, | |||||
| vec, | |||||
| tmpnor, | |||||
| utan, | |||||
| vtan, | |||||
| orco); | |||||
| if (nor) { | if (nor) { | ||||
| copy_v3_v3(nor, tmpnor); | copy_v3_v3(nor, tmpnor); | ||||
| } | } | ||||
| /* XXX Why not normalize tmpnor before copying it into nor??? -- mont29 */ | /* XXX Why not normalize tmpnor before copying it into nor??? -- mont29 */ | ||||
| normalize_v3(tmpnor); | normalize_v3(tmpnor); | ||||
| mul_v3_fl(tmpnor, -foffset); | mul_v3_fl(tmpnor, -foffset); | ||||
| add_v3_v3(vec, tmpnor); | add_v3_v3(vec, tmpnor); | ||||
| } | } | ||||
| else { | else { | ||||
| psys_interpolate_face( | psys_interpolate_face(mesh_final, | ||||
| mvert, vert_normals, mface, mtface, orcodata, mapfw, vec, nor, utan, vtan, orco); | mvert, | ||||
| vert_normals, | |||||
| mface, | |||||
| mtface, | |||||
| orcodata, | |||||
| mapfw, | |||||
| vec, | |||||
| nor, | |||||
| utan, | |||||
| vtan, | |||||
| orco); | |||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| float psys_particle_value_from_verts(Mesh *mesh, short from, ParticleData *pa, float *values) | float psys_particle_value_from_verts(Mesh *mesh, short from, ParticleData *pa, float *values) | ||||
| { | { | ||||
| float mapfw[4]; | float mapfw[4]; | ||||
| int mapindex; | int mapindex; | ||||
| ▲ Show 20 Lines • Show All 3,239 Lines • Show Last 20 Lines | |||||