@takram/three-atmosphere
Version:
A Three.js and R3F implementation of Precomputed Atmospheric Scattering
58 lines (52 loc) • 1.79 kB
text/typescript
import { DataTexture, Vector2, Vector3 } from 'three'
import { sampleTexture } from './sampleTexture'
describe('sampleTexture', () => {
// prettier-ignore
const data = new Float32Array([
0, 0, 0, 0, // (0, 0)
1, 0, 0, 0, // (1, 0)
0, 1, 0, 0, // (0, 1)
0, 0, 1, 0, // (1, 1)
])
const texture = new DataTexture(data, 2, 2)
test('sample', () => {
// prettier-ignore
expect(
sampleTexture(texture, new Vector2(0, 0), new Vector3())
).toMatchObject(new Vector3(0, 0, 0))
expect(
sampleTexture(texture, new Vector2(1, 0), new Vector3())
).toMatchObject(new Vector3(1, 0, 0))
expect(
sampleTexture(texture, new Vector2(0, 1), new Vector3())
).toMatchObject(new Vector3(0, 1, 0))
expect(
sampleTexture(texture, new Vector2(1, 1), new Vector3())
).toMatchObject(new Vector3(0, 0, 1))
})
test('interpolate', () => {
expect(
sampleTexture(texture, new Vector2(0.5, 0), new Vector3())
).toMatchObject(new Vector3(0.5, 0, 0))
expect(
sampleTexture(texture, new Vector2(0, 0.5), new Vector3())
).toMatchObject(new Vector3(0, 0.5, 0))
expect(
sampleTexture(texture, new Vector2(0.5, 0.5), new Vector3())
).toMatchObject(new Vector3(0.25, 0.25, 0.25))
})
test('clamp border', () => {
expect(
sampleTexture(texture, new Vector2(-1, 0), new Vector3())
).toMatchObject(new Vector3(0, 0, 0))
expect(
sampleTexture(texture, new Vector2(2, 0), new Vector3())
).toMatchObject(new Vector3(1, 0, 0))
expect(
sampleTexture(texture, new Vector2(0, -1), new Vector3())
).toMatchObject(new Vector3(0, 0, 0))
expect(
sampleTexture(texture, new Vector2(0, 2), new Vector3())
).toMatchObject(new Vector3(0, 1, 0))
})
})