美文网首页Unity Shader分享
用shader给一个圆柱体附上多段颜色(转)

用shader给一个圆柱体附上多段颜色(转)

作者: 树上的cat_ee3c | 来源:发表于2017-09-26 23:02 被阅读18次

http://www.manew.com/thread-108398-1-1.html

想着是钻孔数据用三维柱状体显示,结果就做出这么个金箍棒。

没有C#代码,简单shader可行。

将参数显示出以便于程序控制,所以说需要定义属性:

Properties{

_ColorRange1("Color1 Range", Range(0, 1)) = 0.3

_ColorRange2("Color2 Range", Range(0, 1)) = 0.6

_ColorRange3("Color3 Range", Range(0, 1)) = 0.7

_ColorRange4("Color4 Range", Range(0, 1)) = 0.8

_Color1("color1", Color) = (1.0, 0.0, 0.0, 1.0)//红

_Color2("color2", Color) = (0.0, 1.0, 0.0, 1.0)//绿

_Color3("color3", Color) = (0.0, 0.0, 1.0, 1.0)//蓝

_Color4("color4", Color) = (1.0, 1.0, 1.0, 1.0)//白

_Color5("color5", Color) = (0.0, 0.0, 0.0, 1.0)//黑

}

图:

剩下的基本上就是片段着色器的位置和颜色的控制,if-else足够实现.

代码:

Shader "Custom/aaa" {

Properties{

_ColorRange1("Color1 Range", Range(0, 1)) = 0.3

_ColorRange2("Color2 Range", Range(0, 1)) = 0.6

_ColorRange3("Color3 Range", Range(0, 1)) = 0.7

_ColorRange4("Color4 Range", Range(0, 1)) = 0.8

_Color1("color1", Color) = (1.0, 0.0, 0.0, 1.0)//红

_Color2("color2", Color) = (0.0, 1.0, 0.0, 1.0)//绿

_Color3("color3", Color) = (0.0, 0.0, 1.0, 1.0)//蓝

_Color4("color4", Color) = (1.0, 1.0, 1.0, 1.0)//白

_Color5("color5", Color) = (0.0, 0.0, 0.0, 1.0)//黑

}

SubShader{

Pass{

CGPROGRAM

#pragma vertex vert

#pragma fragment frag

#include "UnityCG.cginc"

float _ColorRange1;

float _ColorRange2;

float _ColorRange3;

float _ColorRange4;

fixed4 _Color1;

fixed4 _Color2;

fixed4 _Color3;

fixed4 _Color4;

fixed4 _Color5;

//输入顶点结构体,包含位置和颜色

struct vertexInput {

float4 vertex : POSITION;

float4 texcoord0 : TEXCOORD0;

};

//片段结构体,包含位置和颜色

struct fragmentInput{

float4 position : SV_POSITION;

float4 texcoord0 : TEXCOORD0;

};

//顶点处理

fragmentInput vert(vertexInput i){

fragmentInput o;

o.position = mul (UNITY_MATRIX_MVP, i.vertex);

o.texcoord0 = i.texcoord0;

return o;

}

//片段处理

float4 frag(fragmentInput i) : COLOR {

float4 color;

if (i.texcoord0.y > 0 && i.texcoord0.y < _ColorRange1) {

color = _Color1;//红色

}

if (i.texcoord0.y > _ColorRange1 && i.texcoord0.y < _ColorRange2) {

color = _Color2;//绿色

}

if(i.texcoord0.y > _ColorRange2 && i.texcoord0.y < _ColorRange3){

color = _Color3;//蓝色

}

if (i.texcoord0.y > _ColorRange3 && i.texcoord0.y < _ColorRange4) {

color = _Color4;//白色

}

if (i.texcoord0.y > _ColorRange4 && i.texcoord0.y < 1) {

color = _Color5;//黑色

}

return color;

}

ENDCG

}

}

FallBack "Diffuse"

}

相关文章

  • 用shader给一个圆柱体附上多段颜色(转)

    http://www.manew.com/thread-108398-1-1.html 想着是钻孔数据用三维柱状体...

  • Shaderlab Notizen 13 单色透明Shader

    一、单色透明Shader源码如下: 二、颜色可调版单色透明Shader让颜色可调,来一个Properties属性块...

  • Shader入门

    <转>我也忘了转自哪里,抱歉,感谢原作者 什么是Shader Shader(着色器)是一段能够针对3D对象进行操作...

  • 第五课 彩色圆柱体

    用具组成: 彩色圆柱体分为红、黄、绿、蓝四种颜色。每个颜色个有10个圆柱体。四种颜色彩色圆柱体分别放在同色盖子的木...

  • 1.欢迎来到shader的世界

    我们有必要了解什么是shader,shader那就是着色器,它的作用可以先简单理解为给屏幕上的物体画上颜色。而什么...

  • Unity高级开发-Shader开发(3)-Shader编程

    1、什么是shader程序: 一段规定好输入(颜色,贴图),输出(渲染器能够读懂的点和颜色的对应关系)的程序。 s...

  • Paint颜色相关

    颜色相关:color、shader、colorFilter、Xfermode 1.直接设置颜色 setColor(...

  • 第五课作业 圆柱体(4.2-4.8)

    一、练习教具展示 材料:不带钮圆柱体也叫彩色圆柱体,由红、黄、绿、蓝4种颜色组成的不带钮圆柱体(与其对应的就是带钮...

  • android paint的shader的使用

    shader中文翻译着色器,主要实现颜色渐变。 谷歌的注释:shader是在绘制期间返回水平颜色跨度的对象的基础类...

  • Shader实例跳动心脏

    用Shader来绘制一个跳动的心脏。效果图 代码如下: Shader"Custom/Heart"{ SubShad...

网友评论

    本文标题:用shader给一个圆柱体附上多段颜色(转)

    本文链接:https://www.haomeiwen.com/subject/aidqjxtx.html