Skip to content

Latest commit

 

History

History
326 lines (240 loc) · 7.85 KB

646-2685823-摄影机的控制_camera_控制摄像机.sy.md

File metadata and controls

326 lines (240 loc) · 7.85 KB
show version enable_checker
step
1.0
true

python_blender

开始

  • 上次我们制作了
    • 渐变颜色的球
    • 随机颜色的球
    • 一个人
  • 可以控制摄像机
    • 从不同角度拍摄他吗?

原始状态

  • 新建 工程
    • 场景 恢复到初始状态
    • 总共三个东西

图片描述

  1. 立方体
  2. 摄影机
  • 摄影机中 的画面什么样子?

切换到摄影机模式

  • 在View中
    • 选择Camera
    • 选择 Active Camera

图片描述

  • 从 活动摄影机
    • Active Camera
    • 的 视角 观察

脚本工作区

  • 切换到 脚本工作区
    • 脚本工作区的 3d视图
    • 同样需要 调整

图片描述

  • 在3d视图 View中
    • 选择Camera
    • 选择 Active Camera
  • 在 3d视图中
    • 显示出 摄像机 拍摄出的内容

直接移动

  • 大纲视图选中摄影机
    • 拖动到python窗口

图片描述

  • 修改摄影机位置
bpy.context.object.location[0] += 0.1
  • 每次对于摄影机的横坐标进行修改

图片描述

  • 并且 location[0] 属性也进行修改

观察变化

  • 从3d视图中发现
    • 物体没动
    • 镜头动了

图片描述

  • 镜头 的 location.x
    • 确实在不断调整
  • 同理可以修改
    • location的其他两个分量

修改旋转

  • 光标放到旋转属性上
    • 横向移动

图片描述

  • 观察信息条板

代码旋转

  • 数值修改
bpy.context.object.rotation_euler[0] -= 0.05
  • 每次对于摄影机的旋转进行修改
    • 俯仰轴
    • 横滚轴
    • 航向轴

图片描述

  • 摄影机的焦段可以调整吗?

焦距调整

  • 选中摄像机
    • 选中摄像机调板
    • 将 50定焦头
    • 改成 70mm 焦距
    • 体会 镜头推动的 感觉

图片描述

  • 也可以通过 脚本进行修改
bpy.data.cameras["Camera"].lens += 5

  • 把上次的角色
  • 放到摄影机里吧!

晴天娃娃

import bpy

bpy.ops.object.select_all(action="SELECT") # 选择所有物体
bpy.ops.object.delete() # 删除选定的物体
bpy.ops.mesh.primitive_uv_sphere_add()
head = bpy.context.object
bpy.context.object.name  = "head"

r_eye = bpy.ops.mesh.primitive_uv_sphere_add()
bpy.context.object.name = "r_eye"
bpy.context.object.location = (0.7, 0.5, 0.3)
bpy.context.object.scale = (0.3, 0.3, 0.3)
mat = bpy.data.materials.new('mat_eye')
color = (0, 0, 0, 1)
mat.diffuse_color = color
bpy.context.object.data.materials.append(mat)
bpy.context.object.parent = head

l_eye = bpy.ops.mesh.primitive_uv_sphere_add()
bpy.context.object.name = "l_eye"
bpy.context.object.location = (0.7, -0.5, 0.3)
bpy.context.object.scale = (0.3, 0.3, 0.3)
bpy.context.object.data.materials.append(mat)
bpy.context.object.parent = head

bpy.ops.mesh.primitive_cone_add()
body = bpy.context.object
body.name  = "body"
body.location = (0,0,-1)
body.scale = (1,1,2)

character = bpy.data.objects.new("character", None)
bpy.data.collections["Collection"].objects.link(character)
head.parent = character
body.parent = character
  • 再此基础上
    • 添加 并设置 摄影机

添加摄像机

import bpy

bpy.ops.object.select_all(action="SELECT") # 选择所有物体
bpy.ops.object.delete() # 删除选定的物体
bpy.ops.mesh.primitive_uv_sphere_add()
head = bpy.context.object
bpy.context.object.name  = "head"

r_eye = bpy.ops.mesh.primitive_uv_sphere_add()
bpy.context.object.name = "r_eye"
bpy.context.object.location = (0.7, 0.5, 0.3)
bpy.context.object.scale = (0.3, 0.3, 0.3)
mat = bpy.data.materials.new('mat_eye')
color = (0, 0, 0, 1)
mat.diffuse_color = color
bpy.context.object.data.materials.append(mat)
bpy.context.object.parent = head

l_eye = bpy.ops.mesh.primitive_uv_sphere_add()
bpy.context.object.name = "l_eye"
bpy.context.object.location = (0.7, -0.5, 0.3)
bpy.context.object.scale = (0.3, 0.3, 0.3)
bpy.context.object.data.materials.append(mat)
bpy.context.object.parent = head

bpy.ops.mesh.primitive_cone_add()
body = bpy.context.object
body.name  = "body"
body.location = (0,0,-1)
body.scale = (1,1,2)

character = bpy.data.objects.new("character", None)
bpy.data.collections["Collection"].objects.link(character)
head.parent = character
body.parent = character

camera = bpy.data.cameras.new('MyCamera')
camera_obj = bpy.data.objects.new('CameraObj', camera)
bpy.context.scene.collection.objects.link(camera_obj)
camera.lens = 50  # Focal length in millimeters
camera.sensor_width = 36  # Sensor width in millimeters
camera.sensor_height = 24  # Sensor height in millimeters
camera_obj.location = (0, -5, 2)  # X, Y, Z coordinates
camera_obj.rotation_euler = (0, 0, 0)
  • 确实出现了 摄影机
    • 但是 位置 和 朝向 不理想

图片描述

设置Active Camera

  • 选中 新建的 摄影机对象
    • 设置为活跃摄影机
    • Active Camera

图片描述

  • View - Frame All
    • 调整当前视图

调整 摄影机

  • 调整 当前视角
    • 使之 能够合适地 拍摄到
    • 晴天娃娃

图片描述

  • View - Align View - Align Active Camara To View
    • 将 当前 视图 调整为摄影机 的位置

图片描述

  • 得到 当前视角
    • 所需要摄影机的
    • 坐标和旋转

写到代码

import bpy

bpy.ops.object.select_all(action="SELECT") # 选择所有物体
bpy.ops.object.delete() # 删除选定的物体
bpy.ops.mesh.primitive_uv_sphere_add()
head = bpy.context.object
bpy.context.object.name  = "head"

r_eye = bpy.ops.mesh.primitive_uv_sphere_add()
bpy.context.object.name = "r_eye"
bpy.context.object.location = (0.7, 0.5, 0.3)
bpy.context.object.scale = (0.3, 0.3, 0.3)
mat = bpy.data.materials.new('mat_eye')
color = (0, 0, 0, 1)
mat.diffuse_color = color
bpy.context.object.data.materials.append(mat)
bpy.context.object.parent = head

l_eye = bpy.ops.mesh.primitive_uv_sphere_add()
bpy.context.object.name = "l_eye"
bpy.context.object.location = (0.7, -0.5, 0.3)
bpy.context.object.scale = (0.3, 0.3, 0.3)
bpy.context.object.data.materials.append(mat)
bpy.context.object.parent = head

bpy.ops.mesh.primitive_cone_add()
body = bpy.context.object
body.name  = "body"
body.location = (0,0,-1)
body.scale = (1,1,2)

character = bpy.data.objects.new("character", None)
bpy.data.collections["Collection"].objects.link(character)
head.parent = character
body.parent = character

camera = bpy.data.cameras.new('MyCamera')
camera_obj = bpy.data.objects.new('CameraObj', camera)
bpy.context.scene.collection.objects.link(camera_obj)
camera.lens = 50  # Focal length in millimeters
camera.sensor_width = 36  # Sensor width in millimeters
camera.sensor_height = 24  # Sensor height in millimeters
camera_obj.location = (13.6, 5, 10.5)  # X, Y, Z coordinates
camera_obj.rotation_euler = (-128*0.0174444444,180*0.0174444444,-60*0.0174444444)
  • 注意 rotation的值
    • 需要从 角度值
    • 转化为 弧度值

图片描述

  • 这下被摄对象 和 摄影机
    • 全都就位了

总结 🤔

  • 这次我们完成了摄影机的控制
    • 控制位置
    • 控制旋转角度
  • 如何将 摄影机拍到的东西
    • 渲染成图片呢?
  • 我们下次再说!👋