news 2026/5/9 0:47:01

AmbientSpheres 调整材质的环境光系数来控制3D物体的着色效果

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
AmbientSpheres 调整材质的环境光系数来控制3D物体的着色效果

一:主要的知识点

1、说明

本文只是教程内容的一小段,因博客字数限制,故进行拆分。主教程链接:vtk教程——逐行解析官网所有Python示例-CSDN博客

2、知识点纪要

本段代码主要涉及的有①如何通过设置材料的环境光系数来控制3D的着色效果


二:代码及注释

import vtkmodules.vtkRenderingOpenGL2 import vtkmodules.vtkInteractionStyle from vtkmodules.vtkCommonColor import vtkNamedColors from vtkmodules.vtkFiltersSources import vtkSphereSource from vtkmodules.vtkRenderingCore import vtkActor, vtkLight, vtkPolyDataMapper, vtkRenderWindow, \ vtkRenderWindowInteractor, vtkRenderer def main(): colors = vtkNamedColors() colors.SetColor("bkg", [26, 51, 102, 255]) sphere = vtkSphereSource() sphere.SetThetaResolution(100) sphere.SetPhiResolution(50) sphereMapper = vtkPolyDataMapper() sphereMapper.SetInputConnection(sphere.GetOutputPort()) numberOfSpheres = 8 spheres = [] ambient = 0.125 diffuse = 0.0 specular = 0.0 position = [0, 0, 0] for i in range(numberOfSpheres): spheres.append(vtkActor()) spheres[i].SetMapper(sphereMapper) spheres[i].GetProperty().SetColor(colors.GetColor3d("Red")) """ SetAmbient 设置环境光 环境光无方向性,无位置性,无衰减,计算简单 I_ambienet = 物体的环境反射系数*环境光强度 """ spheres[i].GetProperty().SetAmbient(ambient) """ SetDiffuse 设置漫反射 描述的是粗糙表面把光线向各个方向均匀地反射的现象 漫反射与光线方向有关(表面越正对光线,反射光越强),与观察方向无关(无论从哪个角度看,亮度相同) 由表面法线决定(入射角越小(光越正),照亮越强) 直观理解: 想象阳光照在一堵墙上 墙面正对太阳 → 很亮; 墙面倾斜 → 变暗; 背对太阳 → 完全阴影。 漫反射是最主要的亮度来源 漫反射方程I_d = 物体表面的漫反射系数(材质属性) * 光源的强度 * max(0,光线与法线的夹角余弦值) """ spheres[i].GetProperty().SetDiffuse(diffuse) """ SetSpecular 设置镜面反射,其描述的是光在光滑表面上按特定方向反射的现象 镜面反射依赖于光源位置,表面法向量和相机位置 表面看起来有高光,像金属、玻璃或者水面上的光斑 镜面反射=材质的镜面反射系数*光源强度*(max(0, 光线关于法向量的反射方向*表面指向相机的方向))**2 """ spheres[i].GetProperty().SetSpecular(specular) spheres[i].AddPosition(position) ambient += 0.125 position[0] += 1.25 if i == 3: position[0] = 0 position[1] = 1.25 ren = vtkRenderer() renWin = vtkRenderWindow() renWin.AddRenderer(ren) iren = vtkRenderWindowInteractor() iren.SetRenderWindow(renWin) for i in range(0, numberOfSpheres): ren.AddActor(spheres[i]) ren.SetBackground(colors.GetColor3d('bkg')) renWin.SetSize(640, 480) renWin.SetWindowName('AmbientSpheres') """ vtkLight 用于在渲染场景中添加光照,render可以有多个光源 可以设置光源的位置和方向 调整光的类型(点光源、方向光源、聚光灯等) 设置光的颜色、强度和衰减 与材质结合,产生漫反射和镜面反射效果 """ light = vtkLight() light.SetFocalPoint(1.875, 0.6125, 0) light.SetPosition(0.875, 1.6125, 1) ren.AddLight(light) ren.GetActiveCamera().SetFocalPoint(0, 0, 0) ren.GetActiveCamera().SetPosition(0, 0, 1) ren.GetActiveCamera().SetViewUp(0, 1, 0) ren.GetActiveCamera().ParallelProjectionOn() ren.ResetCamera() ren.GetActiveCamera().SetParallelScale(2.0) iren.Initialize() renWin.Render() iren.Start() if __name__ == '__main__': main()
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/3 10:03:44

AI重光照技术革命:Qwen-Edit-Relight LoRA让光影编辑效率飙升

AI重光照技术革命:Qwen-Edit-Relight LoRA让光影编辑效率飙升 【免费下载链接】Relight 项目地址: https://ai.gitcode.com/hf_mirrors/dx8152/Relight 技术突破:从手动调整到智能生成 传统图像光影编辑面临巨大挑战:专业摄影师调整…

作者头像 李华
网站建设 2026/4/30 22:07:36

Multisim与SQL数据库集成:操作详解

让Multisim“活”起来:用SQL数据库驱动电路仿真自动化你有没有遇到过这样的场景?一个团队里,三个人做同一个电源模块的仿真,结果却各不相同。排查半天才发现——原来大家用的电容容差不一样,有人用的是10%,…

作者头像 李华
网站建设 2026/5/4 17:06:41

人工智能演讲PPT专业指南:打造高质量技术分享

人工智能演讲PPT专业指南:打造高质量技术分享 【免费下载链接】人工智能演讲PPT普及这一篇就够了 人工智能演讲PPT:普及这一篇就够了欢迎来到本资源页面,这里提供一份精心制作的人工智能(AI)主题PPT,专为演…

作者头像 李华
网站建设 2026/4/23 16:04:56

京东、字节、小米、比亚迪等大厂集体涨薪,释放强烈信号!

大家好,我是播妞。年底大厂福利战真的“卷”到没边了!最近,互联网大厂的“涨薪大战”备受关注,从12月初开始,字节跳动、小米、比亚迪、宁德时代、京东等大厂就陆续宣布了涨薪计划,并且涨薪真的是一家比一家…

作者头像 李华
网站建设 2026/4/22 2:08:30

二进制逆向神器fq工具:零基础快速解析任意文件格式

二进制逆向神器fq工具:零基础快速解析任意文件格式 【免费下载链接】fq jq for binary formats - tool, language and decoders for working with binary and text formats 项目地址: https://gitcode.com/gh_mirrors/fq/fq 你是否曾面对神秘的二进制文件一筹…

作者头像 李华
网站建设 2026/4/24 5:08:00

Spring Authorization Server完整指南:从零搭建企业级授权中心

在当今微服务架构盛行的时代,如何安全高效地管理用户认证与授权成为了每个开发者必须面对的问题。Spring Authorization Server作为一个功能强大的OAuth2授权服务器实现,为开发者提供了一套完整的身份认证解决方案。本文将带你从项目介绍到实际部署&…

作者头像 李华