View difference between Paste ID: zTw6rVAN and KuRHjvV2
SHOW: | | - or go back to the newest paste.
1-
// Source
1+
2-
// http://www.gamedev.net/topic/592001-random-number-generation-based-on-time-in-hlsl/
2+
3
#pragma kernel CSMain
4
5
RWTexture2D<float4> Result;
6
7
RWStructuredBuffer<float3> posBuffer : register(u0);
8
RWStructuredBuffer<float3> colBuffer : register(u1);
9
RWStructuredBuffer<float3> tarBuffer : register(u2);
10
11
float Time;
12
float4 CoreLoc;
13
14
float rand_1_05(in float2 uv)
15
{
16
    float2 noise = (frac(sin(dot(uv ,float2(12.9898,78.233)*2.0)) * 43758.5453));
17
    return abs(noise.x + noise.y) * 0.5;
18
}
19
20
float randomSpread(float2 seed)
21
{
22
	float part1 = rand_1_05(seed);
23
	float part2 = 1;
24
	
25
	if (part1 < 0.5)
26
	{
27
		part2 = 1;
28
	}
29
	else{
30
		part2 = -1;
31
	}
32
	
33
	return part2;
34
}
35
36
37
float3 ranWithinSphere(float2 seed)
38
{
39
	float3 temp = float3(0,0,0);
40
	
41
	temp.x = randomSpread(seed);
42
	temp.y = randomSpread(seed);
43
	temp.z = randomSpread(seed);
44
	
45
	return temp;
46
}
47
48
float distance(float3 point1, float3 point2)
49
{
50
	float x = (point1.x - point2.x) * (point1.x - point2.x);
51
	float y = (point1.y - point2.y) * (point1.x - point2.y);
52
	float z = (point1.z - point2.z) * (point1.x - point2.z);
53
	
54
	return sqrt(x + y + z);
55
}
56
57
[numthreads(10,1,1)]
58
void CSMain (uint3 id : SV_DispatchThreadID)
59
{
60
	float2 seed = float2(id.x * Time, Time);
61
	
62
63
	colBuffer[id.x].x = cos(Time) * sin(Time);
64
	colBuffer[id.x].y = sin(Time);
65
	
66
	tarBuffer[id.x].x = CoreLoc.x + ((cos(Time * id.x) * sin(Time))) * 4;
67
	tarBuffer[id.x].y = CoreLoc.y + ((sin(Time * id.x) * cos(Time))) * 7;
68
	tarBuffer[id.x].z = CoreLoc.z + ((cos(Time * id.x) * sin(Time))) * 12;
69
70
71
	// Work your way towards the target
72
	float changeX = tarBuffer[id.x].x - posBuffer[id.x].x;
73
	float changeY = tarBuffer[id.x].y - posBuffer[id.x].y;
74
	float changeZ = tarBuffer[id.x].z - posBuffer[id.x].z;
75
		
76
		
77
	posBuffer[id.x].x += (changeX / 40);
78
	posBuffer[id.x].y += (changeY / 40);
79
	posBuffer[id.x].z += (changeZ / 40);
80
	
81
}