Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Raycaster: Add barycoord to intersection result, make attribution interpolation more convenient. #1270

Merged
merged 11 commits into from
Sep 25, 2024
  •  
  •  
  •  
23 changes: 12 additions & 11 deletions src-testing/changes.patch
Original file line number Diff line number Diff line change
Expand Up @@ -269,15 +269,15 @@ index 97456dbc..c99ecb8a 100644

addMethodChaining('toAttribute', bufferNode => bufferAttribute(bufferNode.value));
diff --git a/src-testing/src/nodes/accessors/TextureNode.ts b/src-testing/src/nodes/accessors/TextureNode.ts
index 4924fbeb..4cc15e95 100644
index f6a4d27e..624d767f 100644
--- a/src-testing/src/nodes/accessors/TextureNode.ts
+++ b/src-testing/src/nodes/accessors/TextureNode.ts
@@ -4,17 +4,44 @@ import { textureSize } from './TextureSizeNode.js';
import { colorSpaceToWorking } from '../display/ColorSpaceNode.js';
import { expression } from '../code/ExpressionNode.js';
import { maxMipLevel } from '../utils/MaxMipLevelNode.js';
-import { nodeProxy, vec3, nodeObject } from '../tsl/TSLBase.js';
+import { nodeProxy, vec3, nodeObject, ShaderNodeObject } from '../tsl/TSLBase.js';
-import { nodeProxy, vec3, nodeObject, int } from '../tsl/TSLBase.js';
+import { nodeProxy, vec3, nodeObject, int, ShaderNodeObject } from '../tsl/TSLBase.js';
import { NodeUpdateType } from '../core/constants.js';

import { IntType, UnsignedIntType } from '../../constants.js';
Expand All @@ -287,7 +287,8 @@ index 4924fbeb..4cc15e95 100644
+import NodeBuilder from '../core/NodeBuilder.js';
+import { Matrix3 } from '../../math/Matrix3.js';

class TextureNode extends UniformNode {
-class TextureNode extends UniformNode {
+class TextureNode extends UniformNode<Texture> {
static get type() {
return 'TextureNode';
}
Expand Down Expand Up @@ -354,7 +355,7 @@ index 4924fbeb..4cc15e95 100644
const texture = this.value;

if (
@@ -106,7 +133,7 @@ class TextureNode extends UniformNode {
@@ -110,7 +137,7 @@ class TextureNode extends UniformNode {
return uvNode;
}

Expand All @@ -363,7 +364,7 @@ index 4924fbeb..4cc15e95 100644
const properties = builder.getNodeProperties(this);
properties.referenceNode = this.referenceNode;

@@ -144,19 +171,19 @@ class TextureNode extends UniformNode {
@@ -148,19 +175,19 @@ class TextureNode extends UniformNode {
properties.depthNode = this.depthNode;
}

Expand Down Expand Up @@ -392,7 +393,7 @@ index 4924fbeb..4cc15e95 100644
) {
const texture = this.value;

@@ -179,7 +206,7 @@ class TextureNode extends UniformNode {
@@ -183,7 +210,7 @@ class TextureNode extends UniformNode {
return snippet;
}

Expand All @@ -401,7 +402,7 @@ index 4924fbeb..4cc15e95 100644
const properties = builder.getNodeProperties(this);

const texture = this.value;
@@ -245,7 +272,7 @@ class TextureNode extends UniformNode {
@@ -249,7 +276,7 @@ class TextureNode extends UniformNode {
}
}

Expand All @@ -410,7 +411,7 @@ index 4924fbeb..4cc15e95 100644
this.sampler = value;

return this;
@@ -257,7 +284,7 @@ class TextureNode extends UniformNode {
@@ -261,7 +288,7 @@ class TextureNode extends UniformNode {

// @TODO: Move to TSL

Expand All @@ -419,7 +420,7 @@ index 4924fbeb..4cc15e95 100644
const textureNode = this.clone();
textureNode.uvNode = nodeObject(uvNode);
textureNode.referenceNode = this.getSelf();
@@ -265,7 +292,7 @@ class TextureNode extends UniformNode {
@@ -269,7 +296,7 @@ class TextureNode extends UniformNode {
return nodeObject(textureNode);
}

Expand All @@ -428,7 +429,7 @@ index 4924fbeb..4cc15e95 100644
const textureNode = this.clone();
textureNode.biasNode = nodeObject(amountNode).mul(maxMipLevel(textureNode));
textureNode.referenceNode = this.getSelf();
@@ -273,7 +300,7 @@ class TextureNode extends UniformNode {
@@ -277,7 +304,7 @@ class TextureNode extends UniformNode {
return nodeObject(textureNode);
}

Expand Down
20 changes: 20 additions & 0 deletions src-testing/src/Three.Legacy.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
import { RenderTargetOptions } from "./core/RenderTarget.js";
import { WebGLRenderTarget } from "./renderers/WebGLRenderTarget.js";
import { Texture } from "./textures/Texture.js";

/**
* @deprecated THREE.WebGLMultipleRenderTargets has been deprecated and will be removed in r172. Use THREE.WebGLRenderTarget and set the "count" parameter to enable MRT.
*/
export class WebGLMultipleRenderTargets extends WebGLRenderTarget<Texture[]> {
readonly isWebGLMultipleRenderTargets: true;

/**
* @deprecated THREE.WebGLMultipleRenderTargets has been deprecated and will be removed in r172. Use THREE.WebGLRenderTarget and set the "count" parameter to enable MRT.
* @param width The width of the render target.
* @param height The height of the render target.
* @param count The number of render targets.
* @param options object that holds texture parameters for an auto-generated target texture and depthBuffer/stencilBuffer booleans.
* For an explanation of the texture parameters see {@link Texture}.
*/
constructor(width?: number, height?: number, count?: number, options?: RenderTargetOptions);
}
201 changes: 201 additions & 0 deletions src-testing/src/Three.WebGPU.Nodes.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,201 @@
export * from "./animation/AnimationAction.js";
export * from "./animation/AnimationClip.js";
export * from "./animation/AnimationMixer.js";
export * from "./animation/AnimationObjectGroup.js";
export { AnimationUtils } from "./animation/AnimationUtils.js";
export * from "./animation/KeyframeTrack.js";
export * from "./animation/PropertyBinding.js";
export * from "./animation/PropertyMixer.js";
export * from "./animation/tracks/BooleanKeyframeTrack.js";
export * from "./animation/tracks/ColorKeyframeTrack.js";
export * from "./animation/tracks/NumberKeyframeTrack.js";
export * from "./animation/tracks/QuaternionKeyframeTrack.js";
export * from "./animation/tracks/StringKeyframeTrack.js";
export * from "./animation/tracks/VectorKeyframeTrack.js";
export * from "./audio/Audio.js";
export * from "./audio/AudioAnalyser.js";
export * from "./audio/AudioContext.js";
export * from "./audio/AudioListener.js";
export * from "./audio/PositionalAudio.js";
export * from "./cameras/ArrayCamera.js";
export * from "./cameras/Camera.js";
export * from "./cameras/CubeCamera.js";
export * from "./cameras/OrthographicCamera.js";
export * from "./cameras/PerspectiveCamera.js";
export * from "./cameras/StereoCamera.js";
export * from "./constants.js";
export * from "./core/BufferAttribute.js";
export * from "./core/BufferGeometry.js";
export * from "./core/Clock.js";
export * from "./core/EventDispatcher.js";
export * from "./core/GLBufferAttribute.js";
export * from "./core/InstancedBufferAttribute.js";
export * from "./core/InstancedBufferGeometry.js";
export * from "./core/InstancedInterleavedBuffer.js";
export * from "./core/InterleavedBuffer.js";
export * from "./core/InterleavedBufferAttribute.js";
export * from "./core/Layers.js";
export * from "./core/Object3D.js";
export * from "./core/Raycaster.js";
export * from "./core/RenderTarget.js";
export * from "./core/Uniform.js";
export * from "./core/UniformsGroup.js";
export * from "./extras/Controls.js";
export * from "./extras/core/Curve.js";
export * from "./extras/core/CurvePath.js";
export * from "./extras/core/Path.js";
export * from "./extras/core/Shape.js";
export * from "./extras/core/ShapePath.js";
export * from "./extras/curves/Curves.js";
export { DataUtils } from "./extras/DataUtils.js";
export * from "./extras/ImageUtils.js";
// export * from "./extras/PMREMGenerator.js";
export * from "./extras/ShapeUtils.js";
export { TextureUtils } from "./extras/TextureUtils.js";
export * from "./geometries/Geometries.js";
export * from "./helpers/ArrowHelper.js";
export * from "./helpers/AxesHelper.js";
export * from "./helpers/Box3Helper.js";
export * from "./helpers/BoxHelper.js";
export * from "./helpers/CameraHelper.js";
export * from "./helpers/DirectionalLightHelper.js";
export * from "./helpers/GridHelper.js";
export * from "./helpers/HemisphereLightHelper.js";
export * from "./helpers/PlaneHelper.js";
export * from "./helpers/PointLightHelper.js";
export * from "./helpers/PolarGridHelper.js";
export * from "./helpers/SkeletonHelper.js";
export * from "./helpers/SpotLightHelper.js";
export * from "./lights/AmbientLight.js";
export * from "./lights/DirectionalLight.js";
export type { DirectionalLightShadow } from "./lights/DirectionalLightShadow.js";
export * from "./lights/HemisphereLight.js";
export * from "./lights/Light.js";
export * from "./lights/LightProbe.js";
export type { LightShadow, LightShadowJSON } from "./lights/LightShadow.js";
export * from "./lights/PointLight.js";
export type { PointLightShadow } from "./lights/PointLightShadow.js";
export * from "./lights/RectAreaLight.js";
export * from "./lights/SpotLight.js";
export type { SpotLightShadow } from "./lights/SpotLightShadow.js";
export * from "./loaders/AnimationLoader.js";
export * from "./loaders/AudioLoader.js";
export * from "./loaders/BufferGeometryLoader.js";
export * from "./loaders/Cache.js";
export * from "./loaders/CompressedTextureLoader.js";
export * from "./loaders/CubeTextureLoader.js";
export * from "./loaders/DataTextureLoader.js";
export * from "./loaders/FileLoader.js";
export * from "./loaders/ImageBitmapLoader.js";
export * from "./loaders/ImageLoader.js";
export * from "./loaders/Loader.js";
export * from "./loaders/LoaderUtils.js";
export * from "./loaders/LoadingManager.js";
export * from "./loaders/MaterialLoader.js";
export * from "./loaders/ObjectLoader.js";
export * from "./loaders/TextureLoader.js";
export * from "./materials/Materials.js";
export * from "./materials/nodes/NodeMaterials.js";
export * from "./math/Box2.js";
export * from "./math/Box3.js";
export * from "./math/Color.js";
export { ColorManagement, DefinedColorSpace, WorkingColorSpace } from "./math/ColorManagement.js";
export * from "./math/Cylindrical.js";
export * from "./math/Euler.js";
export * from "./math/Frustum.js";
export * from "./math/Interpolant.js";
export * from "./math/interpolants/CubicInterpolant.js";
export * from "./math/interpolants/DiscreteInterpolant.js";
export * from "./math/interpolants/LinearInterpolant.js";
export * from "./math/interpolants/QuaternionLinearInterpolant.js";
export * from "./math/Line3.js";
export { MathUtils } from "./math/MathUtils.js";
export * from "./math/Matrix2.js";
export * from "./math/Matrix3.js";
export * from "./math/Matrix4.js";
export * from "./math/Plane.js";
export * from "./math/Quaternion.js";
export * from "./math/Ray.js";
export * from "./math/Sphere.js";
export * from "./math/Spherical.js";
export * from "./math/SphericalHarmonics3.js";
export * from "./math/Triangle.js";
export * from "./math/Vector2.js";
export * from "./math/Vector3.js";
export * from "./math/Vector4.js";
export * from "./objects/BatchedMesh.js";
export * from "./objects/Bone.js";
export * from "./objects/Group.js";
export * from "./objects/InstancedMesh.js";
export * from "./objects/Line.js";
export * from "./objects/LineLoop.js";
export * from "./objects/LineSegments.js";
export * from "./objects/LOD.js";
export * from "./objects/Mesh.js";
export * from "./objects/Points.js";
export * from "./objects/Skeleton.js";
export * from "./objects/SkinnedMesh.js";
export * from "./objects/Sprite.js";
// export * from "./renderers/shaders/ShaderChunk.js";
// export * from "./renderers/shaders/ShaderLib.js";
// export * from "./renderers/shaders/UniformsLib.js";
// export { UniformsUtils } from './renderers/shaders/UniformsUtils.js';
export type { WebGLProgramParameters, WebGLProgramParametersWithUniforms } from "./renderers/webgl/WebGLPrograms.js";
export type { WebGLShadowMap } from "./renderers/webgl/WebGLShadowMap.js";
// export * from "./renderers/webgl/WebGLUtils.js";
export * from "./renderers/WebGL3DRenderTarget.js";
export * from "./renderers/WebGLArrayRenderTarget.js";
export * from "./renderers/WebGLCubeRenderTarget.js";
// export * from "./renderers/WebGLRenderer.js";
export * from "./renderers/WebGLRenderTarget.js";
export type {
WebXRController,
WebXRSpaceEventMap,
XRControllerEventType,
XRGripSpace,
XRHandInputState,
XRHandJoints,
XRHandSpace,
XRJointSpace,
XRTargetRaySpace,
} from "./renderers/webxr/WebXRController.js";
export type { WebXRDepthSensing } from "./renderers/webxr/WebXRDepthSensing.js";
export type {
WebXRArrayCamera,
WebXRCamera,
WebXRManager,
WebXRManagerEventMap,
} from "./renderers/webxr/WebXRManager.js";
export * from "./scenes/Fog.js";
export * from "./scenes/FogExp2.js";
export * from "./scenes/Scene.js";
export * from "./textures/CanvasTexture.js";
export * from "./textures/CompressedArrayTexture.js";
export * from "./textures/CompressedCubeTexture.js";
export * from "./textures/CompressedTexture.js";
export * from "./textures/CubeTexture.js";
export * from "./textures/Data3DTexture.js";
export * from "./textures/DataArrayTexture.js";
export * from "./textures/DataTexture.js";
export * from "./textures/DepthTexture.js";
export * from "./textures/FramebufferTexture.js";
export * from "./textures/Source.js";
export * from "./textures/Texture.js";
export * from "./textures/VideoTexture.js";
export * from "./Three.Legacy.js";
export { createCanvasElement } from "./utils.js";

export { default as IESSpotLight } from "./lights/webgpu/IESSpotLight.js";
export { default as NodeLoader } from "./loaders/nodes/NodeLoader.js";
export { default as NodeMaterialLoader } from "./loaders/nodes/NodeMaterialLoader.js";
export { default as NodeObjectLoader } from "./loaders/nodes/NodeObjectLoader.js";
export * from "./nodes/Nodes.js";
export * from "./nodes/TSL.js";
export { default as PMREMGenerator } from "./renderers/common/extras/PMREMGenerator.js";
export { default as PostProcessing } from "./renderers/common/PostProcessing.js";
export { default as QuadMesh } from "./renderers/common/QuadMesh.js";
export type { default as Renderer } from "./renderers/common/Renderer.js";
export { default as StorageBufferAttribute } from "./renderers/common/StorageBufferAttribute.js";
export { default as StorageInstancedBufferAttribute } from "./renderers/common/StorageInstancedBufferAttribute.js";
export { default as StorageTexture } from "./renderers/common/StorageTexture.js";
export { default as WebGPURenderer } from "./renderers/webgpu/WebGPURenderer.Nodes.js";
Loading
Loading