Skip to content

Commit 14838d3

Browse files
oguzerogluphemavax
authored andcommitted
feat: electroshock demo
1 parent ae5f165 commit 14838d3

File tree

246 files changed

+45025
-30159
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

246 files changed

+45025
-30159
lines changed

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -169,8 +169,8 @@ By Greggman
169169

170170
----
171171

172-
[Motion Blur](http://webglsamples.org/motionblur/application.html)
172+
[ROYGBIV Electroshock](http://webglsamples.org/electroShock/application.html)
173173

174-
<a href="http://webglsamples.org/motionblur/application.html"><img src="http://webglsamples.org/motionblur/scene.png" /></a>
174+
<a href="http://webglsamples.org/electroShock/application.html"><img src="http://webglsamples.org/electroShock/scene.png" /></a>
175175

176176
By Oguz Eroglu
File renamed without changes.
File renamed without changes.

motionblur/application.html renamed to electroShock/application.html

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,8 @@
22
<html>
33
<head>
44
<meta charset=utf-8>
5-
<meta name='viewport' content='width=device-width'/>
6-
<title>demo1</title>
7-
<link rel="stylesheet" href="./css/jquery.terminal-1.11.3.min.css">
5+
<meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
6+
<title>electroShock</title>
87
<script src="./js/roygbiv.js"></script>
98
<style>
109
body { margin: 0; position: fixed; display: flex;}
@@ -22,22 +21,23 @@
2221
user-select: none;
2322
}
2423
#cliDiv {
24+
border: 0;
25+
color: lime;
26+
font-family: hack;
2527
background-color: #000000;
2628
opacity: 1;
2729
display: block;
2830
width: 100%;
29-
}
30-
.terminal, .cmd, .terminal, .cmd .prompt {
31-
color: lime;
32-
font-family: hack;
31+
padding: 1%;
32+
min-height: 100%;
33+
min-width: 100%;
34+
font-size: 1vmax;
3335
}
3436
</style>
3537
</head>
3638
<body style="background-color:black;">
3739
<!-- CLI -->
38-
<div id="cliDiv">
39-
<div id="terminalDiv" class="terminal noselect"></div>
40-
</div>
40+
<textarea id="cliDiv" class="noselect" readonly></textarea>
4141
<!-- 3D CONTENT -->
4242
<canvas id="rendererCanvas"></canvas>
4343
</body>
File renamed without changes.
File renamed without changes.

electroShock/js/application.json

Lines changed: 1 addition & 0 deletions
Large diffs are not rendered by default.

electroShock/js/roygbiv.js

Lines changed: 30184 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 159 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,159 @@
1+
importScripts("./WorkerImport.js");
2+
var IS_WORKER_CONTEXT = true;
3+
var isMobile = false;
4+
5+
var camera = {
6+
position: {
7+
x: 0, y: 0, z: 0
8+
}
9+
};
10+
var REUSABLE_VECTOR = new THREE.Vector3();
11+
var COS30DEG = Math.cos(30 * Math.PI / 180);
12+
var SIN30DEG = Math.sin(30 * Math.PI / 180);
13+
14+
var LightningWorker = function(){
15+
this.reset();
16+
}
17+
18+
LightningWorker.prototype.startRecording = function(){
19+
this.isRecording = true;
20+
}
21+
22+
LightningWorker.prototype.dumpPerformance = function(){
23+
postMessage({performance: this.performance});
24+
}
25+
26+
LightningWorker.prototype.invalidateTransferableBody = function(){
27+
if (this.transferableMessageBody){
28+
delete this.transferableMessageBody;
29+
delete this.transferableList;
30+
}
31+
}
32+
33+
LightningWorker.prototype.reset = function(){
34+
this.isRecording = false;
35+
this.lightnings = new Object();
36+
this.lightningIDsByLightningName = new Object();
37+
this.idCtr = 0;
38+
this.startEndPointBufferIndicesByLightningName = new Object();
39+
}
40+
41+
LightningWorker.prototype.onLightningCreation = function(lightningDescription, isEditorLightning){
42+
var lightning = new Lightning(lightningDescription.name, lightningDescription.detailThreshold, 0, lightningDescription.maxDisplacement, lightningDescription.count, lightningDescription.colorName, lightningDescription.radius, lightningDescription.roughness);
43+
lightning.init(new THREE.Vector3(0, 0, 0), new THREE.Vector3(0, 100, 0));
44+
if (!isEditorLightning){
45+
this.lightnings[this.idCtr ++] = lightning;
46+
this.lightningIDsByLightningName[lightning.name] = this.idCtr - 1;
47+
postMessage({idResponse: true, lightningName: lightning.name, id: this.idCtr - 1});
48+
}else{
49+
this.editorLightning = lightning;
50+
}
51+
}
52+
53+
LightningWorker.prototype.onLightningDeletion = function(lightningName){
54+
var id = this.lightningIDsByLightningName[lightningName];
55+
delete this.lightnings[id];
56+
delete this.lightningIDsByLightningName[lightningName];
57+
delete this.startEndPointBufferIndicesByLightningName[lightningName];
58+
}
59+
60+
LightningWorker.prototype.onSetCorrectionProperties = function(lightningName, correctionRefDistance, correctionRefLength){
61+
var lightningID = this.lightningIDsByLightningName[lightningName];
62+
var lightning = this.lightnings[lightningID];
63+
lightning.setCorrectionProperties(correctionRefDistance, correctionRefLength);
64+
}
65+
66+
LightningWorker.prototype.onDisableCorrection = function(lightningName){
67+
var lightningID = this.lightningIDsByLightningName[lightningName];
68+
var lightning = this.lightnings[lightningID];
69+
lightning.disableCorrection();
70+
}
71+
72+
LightningWorker.prototype.saveStartEndPointBufferIndices = function(payload){
73+
for (var lightningName in payload){
74+
this.startEndPointBufferIndicesByLightningName[lightningName] = payload[lightningName];
75+
}
76+
}
77+
78+
LightningWorker.prototype.onEditorClose = function(){
79+
delete this.editorLightning;
80+
}
81+
82+
LightningWorker.prototype.update = function(transferableMessageBody){
83+
var startTime
84+
if (this.isRecording){
85+
startTime = performance.now();
86+
}
87+
camera.position.x = transferableMessageBody.cameraPosition[0];
88+
camera.position.y = transferableMessageBody.cameraPosition[1];
89+
camera.position.z = transferableMessageBody.cameraPosition[2];
90+
for (var i = 0; i<transferableMessageBody.updateBuffer.length; i++){
91+
var id = transferableMessageBody.updateBuffer[i];
92+
if (id == -1){
93+
break;
94+
}else{
95+
var lightning = this.editorLightning? this.editorLightning: this.lightnings[id];
96+
var curStartEndPointBufferIndex = this.editorLightning? 0: this.startEndPointBufferIndicesByLightningName[lightning.name];
97+
lightning.startPoint.set(transferableMessageBody.startEndPoints[curStartEndPointBufferIndex], transferableMessageBody.startEndPoints[curStartEndPointBufferIndex + 1], transferableMessageBody.startEndPoints[curStartEndPointBufferIndex + 2]);
98+
lightning.endPoint.set(transferableMessageBody.startEndPoints[curStartEndPointBufferIndex + 3], transferableMessageBody.startEndPoints[curStartEndPointBufferIndex + 4], transferableMessageBody.startEndPoints[curStartEndPointBufferIndex + 5]);
99+
curStartEndPointBufferIndex += 6;
100+
lightning.update();
101+
lightning.positionsTypedAray = transferableMessageBody.buffer[lightning.name];
102+
for (var nodeID in lightning.renderMap){
103+
lightning.updateNodePositionInShader(lightning.renderMap[nodeID], true);
104+
lightning.updateNodePositionInShader(lightning.renderMap[nodeID], false);
105+
}
106+
}
107+
}
108+
if (this.isRecording){
109+
this.performance = performance.now() - startTime;
110+
}
111+
}
112+
113+
var worker = new LightningWorker();
114+
115+
self.onmessage = function(msg){
116+
var data = msg.data;
117+
if (data.onLightningCreation){
118+
worker.onLightningCreation(data.lightning, data.isEditorLightning);
119+
}else if (data.onLightningDeletion){
120+
worker.onLightningDeletion(data.lightningName);
121+
}else if (data.reset){
122+
worker.reset();
123+
}else if (data.onSetCorrectionProperties){
124+
worker.onSetCorrectionProperties(data.lightningName, data.correctionRefDistance, data.correctionRefLength);
125+
}else if (data.onDisableCorrection){
126+
worker.onDisableCorrection(data.lightningName);
127+
}else if (data.isStartEndPointBufferIndices){
128+
worker.saveStartEndPointBufferIndices(data.payload);
129+
}else if (data.invalidateTransferableBody){
130+
worker.invalidateTransferableBody();
131+
}else if (data.onEditorClose){
132+
worker.onEditorClose();
133+
}else if (data.startRecording){
134+
worker.startRecording();
135+
}else if (data.dumpPerformance){
136+
worker.dumpPerformance();
137+
}else{
138+
worker.update(data);
139+
if (!worker.transferableMessageBody){
140+
worker.transferableMessageBody = data;
141+
worker.transferableList = [data.cameraPosition.buffer];
142+
for (var key in data.buffer){
143+
worker.transferableList.push(data.buffer[key].buffer);
144+
}
145+
worker.transferableList.push(data.startEndPoints.buffer);
146+
worker.transferableList.push(data.updateBuffer.buffer);
147+
}else{
148+
worker.transferableMessageBody = data;
149+
worker.transferableList[0] = data.cameraPosition.buffer;
150+
var i = 1;
151+
for (var key in data.buffer){
152+
worker.transferableList[i++] = data.buffer[key].buffer;
153+
}
154+
worker.transferableList[i] = data.startEndPoints.buffer;
155+
worker.transferableList[i+1] = data.updateBuffer.buffer;
156+
}
157+
postMessage(worker.transferableMessageBody, worker.transferableList);
158+
}
159+
}

0 commit comments

Comments
 (0)