shader语义绑定问题


title: shader语义绑定问题
date: 2019-06-24 22:50:47
tags:

一个关于shader语义绑定的问题

学习shader语言的时候根据教程编辑了如下代码:

Shader "Custom/NewSurfaceShader"
{
    SubShader
    {
    	pass{
	    	CGPROGRAM
	    	#pragma vertex vert 
	    	#pragma fragment frag


	    	void vert(in float2 objPos:POSITION ,out float4 pos:POSITION,out float4 col:COLOR)
	    	{
	    		pos = float4 (objPos,0,1);
	    		col = pos;
	    	}

	    	void frag(inout float4 col:COLOR)
	    	{
	    	}
	    	ENDCG	
    	}
    }

}

按道理代表像素位置的pos属性和代表颜色的col属性是同一种基本类型,可以运算后会使图像四个顶点分别是不同的颜色,但是最后出来这个图像:在这里插入图片描述
图像全部是黑色,pos数据没有成功传入col。上网查询最终找到问题。链接地址
cg中代码col=pos并不像java那样直接指向方法区中的数字。而是指向熟悉pos。在进入片段着色处理后只传入col而指向的pos没有传入,因此得不到数据。因此将pos想方设法传入片段着色器即可解决。
这里定义了一个结构体传入frag
最终修改后的代码:

Shader "Custom/NewSurfaceShader"
{
    SubShader
    {
    	pass{
	    	CGPROGRAM
	    	#pragma vertex vert 
	    	#pragma fragment frag

	    	struct out_data
		{
	    		float4 pos:POSITION;
	    		float4 col:COLOR;
	    	};

	    	out_data vert(float2 objPos:POSITION)
	    	{
	    		out_data data;
	    		data.pos = float4 (objPos,0,1);
	    		data.col = data.pos;
	    		return data;
	    	}

	    	float4 frag(out_data data):COLOR
	    	{
	    		return data.col;
	    	}
	    	ENDCG	
    	}
    }
}

修改后的图像
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值