BlenderCN论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 860|回复: 3

Blender的雕刻代码分析

[复制链接]
发表于 2017-4-12 13:21:24 | 显示全部楼层 |阅读模式

入口函数  

void ED_operatortypes_sculpt(void)

雕刻和绘制现在很多功能为共用模式。

 楼主| 发表于 2017-4-12 13:27:36 | 显示全部楼层
void ED_operatortypes_sculpt(void)
{
        WM_operatortype_append(SCULPT_OT_brush_stroke);
        WM_operatortype_append(SCULPT_OT_sculptmode_toggle);
        WM_operatortype_append(SCULPT_OT_set_persistent_base);
        WM_operatortype_append(SCULPT_OT_dynamic_topology_toggle);
        WM_operatortype_append(SCULPT_OT_optimize);
        WM_operatortype_append(SCULPT_OT_symmetrize);
        WM_operatortype_append(SCULPT_OT_detail_flood_fill);
        WM_operatortype_append(SCULPT_OT_sample_detail_size);
        WM_operatortype_append(SCULPT_OT_set_detail_size);
}
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-4-12 13:28:24 | 显示全部楼层
在调用 雕刻模式toggle后,brush 初始化。

雕刻模式执行函数调用

雕刻模式执行函数调用
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-4-13 12:51:34 | 显示全部楼层
sculpt.c
  1. static void do_inflate_brush_task_cb_ex(
  2.         void *userdata, void *UNUSED(userdata_chunk), const int n, const int thread_id)
  3. {
  4.         SculptThreadedTaskData *data = userdata;
  5.         SculptSession *ss = data->ob->sculpt;
  6.         Brush *brush = data->brush;

  7.         PBVHVertexIter vd;
  8.         SculptBrushTest test;
  9.         float (*proxy)[3];
  10.         const float bstrength = ss->cache->bstrength;

  11.         proxy = BKE_pbvh_node_add_proxy(ss->pbvh, data->nodes[n])->co;

  12.         sculpt_brush_test_init(ss, &test);

  13.         BKE_pbvh_vertex_iter_begin(ss->pbvh, data->nodes[n], vd, PBVH_ITER_UNIQUE)
  14.         {
  15.                 if (sculpt_brush_test(&test, vd.co)) {
  16.                         const float fade = bstrength * tex_strength(
  17.                                                ss, brush, vd.co, test.dist, vd.no, vd.fno, vd.mask ? *vd.mask : 0.0f, thread_id);
  18.                         float val[3];

  19.                         if (vd.fno)
  20.                                 copy_v3_v3(val, vd.fno);
  21.                         else
  22.                                 normal_short_to_float_v3(val, vd.no);

  23.                         mul_v3_fl(val, fade * ss->cache->radius);
  24.                         mul_v3_v3v3(proxy[vd.i], val, ss->cache->scale);

  25.                         if (vd.mvert)
  26.                                 vd.mvert->flag |= ME_VERT_PBVH_UPDATE;
  27.                 }
  28.         }
  29.         BKE_pbvh_vertex_iter_end;
  30. }
复制代码
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

Blender最新中文教学视频|Blender头条|小黑屋|手机版|Archiver|Blender中国 ( 蜀ICP备17002929号 )360网站安全检测平台

GMT+8, 2019-3-23 05:29 , Processed in 0.016367 second(s), 24 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表