技术标签: unity shader
Shader "DC/LightModel/HalfLambert"
{
Properties
{
_Color("Color",Color)=(0.5,0.5,0.5,1)
}
SubShader
{
Tags { "RenderType"="Opaque" }
LOD 100
Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
#include "Lighting.cginc"
struct appdata
{
float4 vertex : POSITION;
float3 normal: NORMAL;
};
struct v2f
{
float4 vertex : SV_POSITION;
float3 worldNormal: NORMAL;
float3 worldPos : TEXCOORD0;
};
fixed4 _Color;
v2f vert (appdata v)
{
v2f o;
o.vertex = UnityObjectToClipPos(v.vertex);
o.worldNormal = mul(unity_ObjectToWorld, v.normal);
o.worldPos = mul(unity_ObjectToWorld, v.vertex).xyz;
return o;
}
fixed4 frag (v2f i) : SV_Target
{
/*
该在半条命游戏中被开发使用,用于解决模型背面形状丢失和过于扁平的问题
formular:
halfLambertCol = (dot(worldNormal * lightDir) * 0.5 + 0.5) * surfaceCol * lightCol
*/
float3 lDir = UnityWorldSpaceLightDir(i.worldPos);
float lambertDot = saturate(dot(i.worldNormal, normalize(lDir)));
float halfLambert = lambertDot * 0.5 + 0.5;
// float halfLambert = lambertDot;
// fixed4 finalRgb = (halfLambert * _LightColor0 * _Color) + unity_AmbientSky;
fixed4 finalRgb = (halfLambert * _LightColor0 * _Color);
return fixed4(finalRgb.rgb, 1);
}
ENDCG
}
}
}
auto_ptr 智能指针(C98)#include<iostream>using namespace std;void main(){//auto_ptrfor ( int i = 0; i < 100000; i++){ double *p = new...
EditText(输入框)详解 1.设置默认提示文本如下图,相信你对于这种用户登录的界面并不陌生,是吧,我们很多时候都用的这种界面相比另外这种,下面这种又如何?还不赖是吧,当然,不会在这里贴布局,这里只介绍默认提示文本的两个控制属性:默认提示文本的两个属性如下:android:hint="默认提示文本"android:textColorHint="#95A1..._安卓开发输入框
上一篇我们讲了锂电池的充放电的流程和电池的一些特性,这一节我们重点说一下android关机充电是怎么、充电画面显示是怎么实现的,这个在工作中也比较有用,我们开始做这一块的时候也走了不少的弯路。我记得我们做adnroid2.3的时候,关机状态和充电logo显示是在uboot中做的。应该是有两种做法,回头我再看下uboot中做画面显示那一块是怎么做的,这一节我们重点说系统中的充电logo显示。一、An
数据可视化能让人们更直观的传递数据所要表达的信息。Python 中有两个专用于可视化的库,matplotlib 和 seaborn ,本文将介绍matplotlib。Matplotlib:基于Python的绘图库,提供完全的 2D 支持和部分 3D 图像支持。Seaborn:该 Python 库能够创建富含信息量和美观的统计图形。Seaborn 基于 matplotlib,具有多种特性,比如内置主..._plt柱状图上加数据
unit Unit1;interfaceuses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.StdCtrls;t_delphi获取手机电量
如何使用 Bundle 传递数据?最近在学习Android的时候,不知道 如何使用Bunndle传递对象?我们可以通过 Serizlizable 实现。本质就是 将 自定义的对象,转化为 Serizliable 对象。之后在用的时候 再取出来。存数据Void putSerializable(String key,Serializble value); 取数据:Ser_bundle转file
1.编辑虚拟主机镜像,选择vm安装目录的linux.so。启动虚拟机2.进入系统,双击VMware Tools,把VMwareTools-***.tar.gz复制到桌面. #tar -zxvf VMwareTools-****.tar.gz #cd vmware-tools-distrib #./vmware-install.pl 全部回车安装后最好注销下,OK 屏幕变了 ,切换虚拟..._虚拟机怎么设置不用ctrl+alt
printf()格式控制符说明:%d:按整型数据的实际长度输出。%m.nd:m为指定的输出字段的宽度,n定义为实际输出的个数。(如果m小于字段的宽度,则字段全部输出,即忽略m的存在)m>0时为右对齐,m<0时为左对齐如果省略m或者n,则m=n;如果只有m且不指定空位填0,根据m的正负值,空位以空格补齐。#include<iostream>u..._按整数数据实际长度读出数据需要用到
Levenberg–Marquardt(LM)详解1、基础概念1.1、信赖域法1.2、泰勒展开1.2、正定矩阵(positive definite matrix)1.3、雅克比矩阵(Jacobian matrix)1.4、黑塞矩阵(Hessian matrix)1.5、范数(norm)1.6、非线性最小二乘问题(Non-linear least squares problems)2、LM算法2.1、高斯-牛顿法(Gauss-Newton Method)2.2、Levenberg-Marquardt(LM) _levenberg-marquardt
由于gcc在5.x版本修改了ABI,导致新版本gcc编译的二进制文件放在老的环境下会报错,所以需要安装gcc4.8.5。4.8.5这个版本支持c++11。首先尝试下载gcc-4.8.5的源码编译安装,结果make时报错“libstdc++.so.6: : version `CXXABI_1.3.8' not found”。查了一下,不能用新版gcc来编译老版的gcc源码,(╯‵□′)╯︵┻━┻。其..._linux gcc4.8.5二进制
BZOJ 2001 Hnoi2010 城市建设 PS国是一个拥有诸多城市的大国,国王Louis为城市的交通建设可谓绞尽脑汁。Louis可以在某些城市之间修建道路,在不同的城市之间修建道路需要不同的花费。Louis希望建造最少的道路使得国内所有的城市连通。但是由于某些因素,城市之间修建道路需要的花费会随着时间而改变,Louis会不断得到某道路的修建代价改变的消息, 他希望每得到一条消息后能立即知道使
转自 https://help.aliyun.com/product/68138.html概述消息队列 Kafka 是一个分布式的、高吞吐量、高可扩展性消息队列服务,广泛用于日志收集、监控数据聚合、流式数据处理、在线和离线分析等大数据领域,是大数据生态中不可或缺的产品之一。消息队列 Kafka 针对开源的 Kafka 提供全托管服务,彻底解决开源产品长期以来的痛点,用户只需专注于业务开发...