Skip to content
Snippets Groups Projects
Commit f6e8b16d authored by Christoph-Anton Schwierz's avatar Christoph-Anton Schwierz
Browse files

ray tracing and utils partially fixed

parent 2def309b
No related branches found
No related tags found
No related merge requests found
...@@ -15,6 +15,6 @@ ...@@ -15,6 +15,6 @@
<script type="module" src="/src/cg/perspectiveDivide.ts"></script> <script type="module" src="/src/cg/perspectiveDivide.ts"></script>
<script type="module" src="/src/cg/walkToVec.ts"></script> <script type="module" src="/src/cg/walkToVec.ts"></script>
<script type="module" src="/src/cg/basis.ts"></script--> <script type="module" src="/src/cg/basis.ts"></script-->
<script type="module" src="/src/cg/loadBunnyDemo.ts"></script> <script type="module" src="/src/cg/raytracing1.ts"></script>
</body> </body>
</html> </html>
import Playground from "./playground"; import Playground from "./playground";
import { vecAdd } from "./utils"; import { vecAdd } from "./utils";
import { vecMultiply } from "./utils"; import { vecMultiplyScalar } from "./utils";
const pg = new Playground(); const pg = new Playground();
pg.gridXZ(); pg.gridXZ();
...@@ -8,7 +8,7 @@ pg.gridXZ(); ...@@ -8,7 +8,7 @@ pg.gridXZ();
const initialVec = [1.5, 2, 0.3]; const initialVec = [1.5, 2, 0.3];
let basis = [1, 2, 1]; let basis = [1, 2, 1];
basis = vecMultiply(basis, 0.5); basis = vecMultiplyScalar(basis, 0.5);
const iHat = [basis[0], 0, 0]; const iHat = [basis[0], 0, 0];
const jHat = [0, basis[1], 0]; const jHat = [0, basis[1], 0];
const kHat = [0, 0, basis[2]]; const kHat = [0, 0, basis[2]];
......
import Playground from "./playground"; import Playground from "./playground";
import { vecDotProduct, vecMultiplyScalar, vecSubtract } from "./utils";
const pg = new Playground(); const pg = new Playground();
const sphere = { const sphere = {
position: [0, .5, -3], position: [0, .5, -3], //C - Center of sphere
radius: 1.23 radius: 0.5
} }
pg.visCamera(-1); pg.visCamera(-1);
pg.gridXZ() pg.gridXZ()
const o = [0, 0, 0] const o = [0, 0, 0]; //O - Origin
const co = ... // O - C const co = vecSubtract(o, sphere.position) // O - C
const rsq = sphere.radius * sphere.radius;
const step = 1 / 8 const step = 1 / 8
...@@ -18,25 +21,25 @@ for (let yCoord = -1; yCoord <= 1; yCoord += step) { ...@@ -18,25 +21,25 @@ for (let yCoord = -1; yCoord <= 1; yCoord += step) {
for (let xCoord = -1; xCoord <= 1; xCoord += step) { for (let xCoord = -1; xCoord <= 1; xCoord += step) {
const v = [xCoord, yCoord, -1] const v = [xCoord, yCoord, -1]
const ov = ... // V - O const ov = vecSubtract(v, o); // V - O
pg.visVector(ov) pg.visVector(ov)
const a = ... // <---- see equations above const a = vecDotProduct(ov, ov); // a = (V - O)*(V _ O)
const b = ... // <---- see equations above const b = 2* vecDotProduct(ov, co); // b = 2 * ((V - O)*(O - C))
const c = ... // <---- see equations above const c = vecDotProduct(co, co) - rsq; // c = ((O - C)*(O - C))-r^2
const discriminant = ... // <---- see equations above const discriminant = (b*b) - (4*a*c); // b^2 - 4*a*c
const t1 = (-b + Math.sqrt(discriminant)) / (2 * a) const t1 = (-b + Math.sqrt(discriminant)) / (2 * a)
const t2 = (-b - Math.sqrt(discriminant)) / (2 * a) const t2 = (-b - Math.sqrt(discriminant)) / (2 * a)
if (t1) { if (t1) {
pg.visPoint(vecMultiplyScalar(t1, v),{color:"red"}); pg.visPoint(vecMultiplyScalar(v, t1),{color:"red"});
} }
if (t2) { if (t2) {
pg.visPoint(vecMultiplyScalar(t2, v),{color:"blue"}); pg.visPoint(vecMultiplyScalar(v, t2),{color:"blue"});
} }
} }
......
...@@ -11,21 +11,47 @@ export function vecAdd(vecOne: Array<number>, vecTwo: Array<number>){ ...@@ -11,21 +11,47 @@ export function vecAdd(vecOne: Array<number>, vecTwo: Array<number>){
} }
export function vecSubtract(vecOne: Array<number>, vecTwo: Array<number>){ export function vecSubtract(vecOne: Array<number>, vecTwo: Array<number>){
let vecSubt: Array<number> = vecOne; //let vecSubt: Array<number> = vecOne;
vecSubt[0] -= vecTwo[0]; /*vecSubt[0] -= vecTwo[0];
vecSubt[1] -= vecTwo[1]; vecSubt[1] -= vecTwo[1];
vecSubt[2] -= vecTwo[2]; vecSubt[2] -= vecTwo[2];
return vecSubt;*/
return[
vecOne[0] - vecTwo[0],
vecOne[1] - vecTwo[1],
vecOne[2] - vecTwo[2]
]
}
export function vecNumSubtract(vecOne: Array<number>, number: number){
let vecSubt: Array<number> = vecOne;
vecSubt[0] -= number;
vecSubt[1] -= number;
vecSubt[2] -= number;
return vecSubt; return vecSubt;
} }
export function vecMultiply(vecOne: Array<number>, factor: number){ export function vecMultiplyScalar(vecOne: Array<number>, scalar: number){
vecOne[0] *= factor; return[
vecOne[1] *= factor; vecOne[0] * scalar,
vecOne[2] *= factor; vecOne[1] * scalar,
vecOne[2] * scalar,
]
}
export function vecMultiply(vecOne: Array<number>, vecTwo: Array<number>){
let vecMultiplied: Array<number> = [];
vecMultiplied[0] = vecOne[0] * vecTwo[0];
vecMultiplied[1] = vecOne[1] * vecTwo[1];
vecMultiplied[2] = vecOne[2] * vecTwo[2];
return vecOne; return vecMultiplied;
} }
export function vecLength(vec: Array<number>){ export function vecLength(vec: Array<number>){
...@@ -50,8 +76,10 @@ export function vecNormalize(vec: Array<number>){ ...@@ -50,8 +76,10 @@ export function vecNormalize(vec: Array<number>){
} }
export function vecDotProduct(vecOne: Array<number>, vecTwo: Array<number>){ export function vecDotProduct(vecOne: Array<number>, vecTwo: Array<number>){
let dotProduct = vecOne[0]*vecTwo[0] + vecOne[1]*vecTwo[1] + vecOne[2]*vecTwo[2]; //let dotProduct = vecOne[0]*vecTwo[0] + vecOne[1]*vecTwo[1] + vecOne[2]*vecTwo[2];
return dotProduct; return(
vecOne[0]*vecTwo[0] + vecOne[1]*vecTwo[1] + vecOne[2]*vecTwo[2]
)
} }
export function vecAngle(vecOne: Array<number>, vecTwo: Array<number>){ export function vecAngle(vecOne: Array<number>, vecTwo: Array<number>){
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment