热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

VertexShader几何变换顶点颜色变换1

1、顶点颜色变换UpgradeNOTE:replacedmul(UNITY_MATRIX_MVP,*)withUnityObjectToClipPos(*)ShaderCusto

1、顶点颜色变换

// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'Shader "Custom/s_nine" {SubShader{pass {CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "unitycg.cginc"float4x4 mvp;float4x4 rm;float4x4 sm;struct v2f {float4 pos:POSITION;fixed4 color : COLOR;};v2f vert(appdata_base v) {v2f o;float4x4 m = mul(sm, UNITY_MATRIX_MVP);o.pos = mul(m,v.vertex);if (float(v.vertex.x) > 0)o.color = fixed4(1, 0, 0, 1); //显示为红色elseo.color = fixed4(0,0,1,1); //显示为蓝色return o;}fixed4 frag(v2f IN) :COLOR{return IN.color;}ENDCG}}
}




运行结果:中间颜色自动渐变



2、改变某个顶点的颜色值

// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'Shader "Custom/s_nine" {SubShader{pass {CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "unitycg.cginc"float4x4 mvp;float4x4 rm;float4x4 sm;struct v2f {float4 pos:POSITION;fixed4 color : COLOR;};v2f vert(appdata_base v) {v2f o;float4x4 m = mul(sm, UNITY_MATRIX_MVP);o.pos = mul(m,v.vertex);if (float(v.vertex.x) == 0.5&&v.vertex.y==0.5&&v.vertex.z==0.5)o.color = fixed4(1, 0, 0, 1); //显示为红色elseo.color = fixed4(0,0,1,1); //显示为蓝色return o;}fixed4 frag(v2f IN) :COLOR{return IN.color;}ENDCG}}
}








3、

在不同的位置,颜色不一样





4、加上时间因子后,颜色的变化


// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'Shader "Custom/s_nine" {SubShader{pass {CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "unitycg.cginc"float4x4 mvp;float4x4 rm;float4x4 sm;struct v2f {float4 pos:POSITION;fixed4 color : COLOR;};v2f vert(appdata_base v) {v2f o;float4x4 m = mul(sm, UNITY_MATRIX_MVP);o.pos = mul(m,v.vertex);if (float(v.vertex.x) == 0.5&&v.vertex.y == 0.5&&v.vertex.z == 0.5)o.color = fixed4(_SinTime.w/2+0.5,_CosTime.w/2+0.5,_SinTime.y/2 + 0.5,1); //显示为红色elseo.color = fixed4(0, 0, 1, 1); //显示为蓝色return o;}fixed4 frag(v2f IN) :COLOR{return IN.color;}ENDCG}}
}

























推荐阅读
  • Eclipse JFace Text框架中IDocument接口的getNumberOfLines方法详解与编程实例 ... [详细]
  • 题目:图像处理(HDU1828,计算周长并集,利用线段树与离散化技术进行扫描) ... [详细]
  • 本文详细探讨了OpenCV中人脸检测算法的实现原理与代码结构。通过分析核心函数和关键步骤,揭示了OpenCV如何高效地进行人脸检测。文章不仅提供了代码示例,还深入解释了算法背后的数学模型和优化技巧,为开发者提供了全面的理解和实用的参考。 ... [详细]
  • 本次发布的Qt音乐播放器2.0版本在用户界面方面进行了细致优化,提升了整体的视觉效果和用户体验。尽管核心功能与1.0版本保持一致,但界面的改进使得操作更加直观便捷,为用户带来了更为流畅的使用体验。此外,我们还对部分细节进行了微调,以确保软件的稳定性和性能得到进一步提升。 ... [详细]
  • 在Java编程中,为了提高代码的可读性和执行效率,建议优先使用局部变量来存储方法的返回值,而不是多次调用同一个方法。这样不仅可以减少方法调用的开销,还能避免潜在的性能问题。此外,使用局部变量还可以增强代码的可维护性和调试便利性。 ... [详细]
  • 如何使用 net.sf.extjwnl.data.Word 类及其代码示例详解 ... [详细]
  • Prim算法在处理稠密图时表现出色,尤其适用于边数远多于顶点数的情形。传统实现的时间复杂度为 \(O(n^2)\),但通过引入优先队列进行优化,可以在点数为 \(m\)、边数为 \(n\) 的情况下显著降低时间复杂度,提高算法效率。这种优化方法不仅能够加速最小生成树的构建过程,还能在大规模数据集上保持良好的性能表现。 ... [详细]
  • BZOJ4240 Gym 102082G:贪心算法与树状数组的综合应用
    BZOJ4240 Gym 102082G 题目 "有趣的家庭菜园" 结合了贪心算法和树状数组的应用,旨在解决在有限时间和内存限制下高效处理复杂数据结构的问题。通过巧妙地运用贪心策略和树状数组,该题目能够在 10 秒的时间限制和 256MB 的内存限制内,有效处理大量输入数据,实现高性能的解决方案。提交次数为 756 次,成功解决次数为 349 次,体现了该题目的挑战性和实际应用价值。 ... [详细]
  • 在稀疏直接法视觉里程计中,通过优化特征点并采用基于光度误差最小化的灰度图像线性插值技术,提高了定位精度。该方法通过对空间点的非齐次和齐次表示进行处理,利用RGB-D传感器获取的3D坐标信息,在两帧图像之间实现精确匹配,有效减少了光度误差,提升了系统的鲁棒性和稳定性。 ... [详细]
  • 在处理多个玩家的相机控制时,我遇到了一个挑战,即无法在运行时动态添加播放器子对象以转换数组类型。为了解决这个问题,我在 `CameraControl.cs` 脚本中采取了临时措施。该脚本负责根据玩家的数量动态调整相机的缩放范围,确保所有玩家都能被相机捕捉到。 ... [详细]
  • C#中实现高效UDP数据传输技术
    C#中实现高效UDP数据传输技术 ... [详细]
  • Node.js 教程第五讲:深入解析 EventEmitter(事件监听与发射机制)
    本文将深入探讨 Node.js 中的 EventEmitter 模块,详细介绍其在事件监听与发射机制中的应用。内容涵盖事件驱动的基本概念、如何在 Node.js 中注册和触发自定义事件,以及 EventEmitter 的核心 API 和使用方法。通过本教程,读者将能够全面理解并熟练运用 EventEmitter 进行高效的事件处理。 ... [详细]
  • 在处理UVA11987问题时,关键在于实现并查集结构以支持删除操作。特别地,当需要删除某个节点时,如果该节点不是根节点,则处理相对简单;然而,若删除的是根节点,则需要进行额外的处理来维护集合的连通性。本文将详细介绍如何通过优化并查集算法,确保在删除根节点时仍能高效地维护数据结构的完整性和查询效率。 ... [详细]
  • Linux 信号处理全面解析(第六篇)
    本文深入探讨了信号及其来源。信号本质上是对中断机制的软件层面模拟,从原理上看,进程接收到信号与处理器接收到中断请求类似。信号具有异步特性,能够在进程执行过程中随时触发,从而中断当前操作并执行相应的处理程序。文章详细分析了信号的生成、传递和处理机制,并讨论了常见的信号类型及其应用场景。此外,还介绍了如何在 Linux 系统中使用信号进行进程间通信和错误处理,为开发者提供了实用的技术指导。 ... [详细]
  • 本文深入探讨了RecyclerView的缓存与视图复用机制,详细解析了不同类型的缓存及其功能。首先,介绍了屏幕内ViewHolder的Scrap缓存,这是一种最轻量级的缓存方式,旨在提高滚动性能并减少不必要的视图创建。通过分析其设计原理,揭示了Scrap缓存为何能有效提升用户体验。此外,还讨论了其他类型的缓存机制,如RecycledViewPool和ViewCacheExtension,进一步优化了视图复用效率。 ... [详细]
author-avatar
陈大也也_384
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有