npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

react-gallery-3d

v1.5.3

Published

A 3D gallery library for React applications

Downloads

16

Readme

Preview

Version Downloads

This library provides React components to create awesome 3D galleries. It supports rendering with solid colors, images, and videos, offering a wide range of possibilities for showcasing media in a 3D environment.

Play with the demo to see what you can do with this library.

npm install react-gallery-3d three @react-three/fiber @react-three/drei

or

yarn add react-gallery-3d three @react-three/fiber @react-three/drei

Peer Dependencies

This library is designed to work alongside @react-three/drei, @react-three/fiber, and three.js. These are listed as peer dependencies, meaning that it expects these packages to be present in your project:

  • three.js: A JavaScript 3D library that creates and displays animated 3D computer graphics in a web browser.
  • @react-three/fiber: A React renderer for three.js that brings declarative, reactive, and component-based patterns to 3D rendering.
  • @react-three/drei: A useful collection of helpers and abstractions for react-three-fiber.

As peer dependencies, they are not automatically installed when you install this library. You need to manually install them in your project, if not already present. This approach helps to avoid version conflicts and reduce bundle size.

Basic Usage

import { Gallery, GalleryScene, SolidColorItem, ImageItem, VideoItem } from "react-gallery-3d";

const App = () => {
    return (
        <GalleryScene>
            <Gallery>
                <SolidColorItem color="#ff0000" />
                <ImageItem src="https://picsum.photos/200/300" />
                <VideoItem
                    src="http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4"
                    crossOrigin="anonymous"
                />
            </Gallery>
        </GalleryScene>
    );
};

This renders a gallery with three items: a solid color, an image, and a video. The gallery is rendered in a canvas element using react-three-fiber.

Gallery

interface GalleryProps extends Omit<GroupProps, "children"> {
  children: GalleryChildren;
  ground?: GroundProps;
  disableGround?: boolean;
  item?: {
    width?: number;
    height?: number;
    radialSegments?: number;
    heightSegments?: number;
    innerRadiusPercent?: number;
  };
}

The Gallery component is the container for all items in the gallery. It is responsible for laying out the items in a 3D space. It also provides a number of properties that can be used to customize the gallery:

Properties

| Property | Type | Default | Description | |-----------------|-------------------|---------|--------------------------------------| | children | GalleryChildren | | The items to render in the gallery. | | ground | GroundProps | | The ground properties. | | disableGround | boolean | false | Whether or not to render the ground. | | item | ItemProps | | The item properties. |

GalleryChildren

The GalleryChildren type is an array of GalleryItem objects. These objects can be one of the following types:

  • SolidColorItem
  • ImageItem
  • VideoItem
  • GalleryItem

ItemProps

interface ItemProps {
  width?: number;
  height?: number;
  radialSegments?: number;
  heightSegments?: number;
  innerRadiusPercent?: number;
}

The ItemProps type is used to customize the items in the gallery. The items are rendered using the GalleryItem components.

Properties

| Property | Type | Default | Description | |----------------------|----------|---------|-----------------------------------------------------------------| | width | number | 120 | The width of the item. | | height | number | 50 | The height of the item. | | radialSegments | number | 50 | The number of radial segments that make up the item's geometry. | | heightSegments | number | 1 | The number of height segments that make up the item's geometry. | | innerRadiusPercent | number | 0.99 | The percentage of the outerRadius used to get the innerRadius |

SolidColorItem

<SolidColorItem color="#ff0000" />

The SolidColorItem component is used to render a solid color in the gallery. It is responsible for rendering the item's geometry and material. It uses the SolidColorItemMaterial component to render the item's material.

Properties

| Property | Type | Default | Description | |-----------------|----------|---------|--------------------------------------| | color | string | | The color to use for the item. |

ImageItem

<ImageItem src="https://picsum.photos/200/300" />

The ImageItem component is used to render an image in the gallery. It is responsible for rendering the item's geometry and material. It uses the ImageItemMaterial component to render the item's material.

Properties

| Property | Type | Default | Description | |-----------------|----------|---------|--------------------------------------| | src | string | | The source of the image to render. |

VideoItem

<VideoItem src="./video.mp4" />

The VideoItem component is used to render a video in the gallery. It is responsible for rendering the item's geometry and material. It uses the VideoItemMaterial component to render the item's material.

Properties

| Property | Type | Default | Description | |-----------------|----------|---------|--------------------------------------| | src | string | | The source of the video to render. |

Ground

The Ground component is used to render the ground in the gallery. It is responsible for rendering the ground's geometry and material. It uses the MeshReflectorMaterial component from @react-three/drei to render the ground's material.

GroundProp

interface GroundProps {
  width?: number;
  height?: number;
  reflectorMaterial?: {
    color?: string;
    roughness?: number;
    metalness?: number;
    resolution?: number;
    mixBlur?: number;
    mixStrength?: number;
    blur?: [number, number] | number;
    mirror?: number;
    minDepthThreshold?: number;
    maxDepthThreshold?: number;
    depthScale?: number;
    depthToBlurRatioBias?: number;
    distortionMap?: Texture;
    distortion?: number;
    mixContrast?: number;
    reflectorOffset?: number;
  };
  disableReflector?: boolean;
}

Properties

| Property | Type | Default | Description | |---------------------|-----------|---------|-----------------------------------------------------------------------------------| | width | number | 1000 | The width of the ground. | | height | number | 1000 | The height of the ground. | | reflectorMaterial | object | | The properties of the MeshReflectorMaterial component from @react-three/drei. | | disableReflector | boolean | false | Whether or not to render MeshReflectorMaterial. |

GalleryItem

type GalleryItemProps = PropsWithChildren<{
  material: GalleryItemMaterial;
}>;

The GalleryItem component is used to render an item in the gallery. It is responsible for rendering the item's geometry and material.

Properties

| Property | Type | Default | Description | |-----------------|-----------------------|---------|--------------------------------------------------------------------| | material | GalleryItemMaterial | | The material to use for the item. This is not a three.js material. |

GalleryItemMaterial

interface GalleryItemMaterial {
  generate: () => Material | Material[];
}

The GalleryItemMaterial type is used to generate the three.js Material of a gallery item. There are built-in materials that can be used to render solid colors, images, and videos. You can also create your own custom materials.

Built-in Materials

| Material | Description | |--------------------------|------------------------| | SolidColorItemMaterial | Renders a solid color. | | ImageItemMaterial | Renders an image. | | VideoItemMaterial | Renders a video. |

GalleryScene

<GalleryScene>
    <Gallery>
        <SolidColorItem color="#ff0000" />
        <ImageItem src="https://picsum.photos/200/300" />
        <VideoItem
          src="http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4"
          crossOrigin="anonymous"
        />
    </Gallery>
</GalleryScene>

The GalleryScene component is used to render the gallery in a canvas element using react-three-fiber. It is responsible for setting up the scene, camera, and lighting.

GallerySceneProps

type GallerySceneProps = Omit<CanvasProps, "children"> & {
  children: GallerySceneChildren;
  backgroundColor?: string;
  fog?: {
    color?: string;
    near?: number;
    far?: number;
  };
  orbitControls?: OrbitControlsProps;
  disableControls?: boolean;
  disableFog?: boolean;
  disableEnvironment?: boolean;
  environment?: EnvironmentProps;
};

Properties

| Property | Type | Default | Description | |----------------------|------------------------|-----------|--------------------------------------------------------------------------| | children | GallerySceneChildren | | The gallery to render and other R3F compatible components. | | backgroundColor | string | #000000 | The background color of the scene. | | fog | object | | The properties of the Fog in the scene | | orbitControls | object | | The properties of the OrbitControls component from @react-three/drei | | disableControls | boolean | false | Whether or not to render OrbitControls | | disableFog | boolean | false | Whether or not to render Fog | | disableEnvironment | boolean | false | Whether or not to render Environment | | environment | object | | The properties of the Environment component from @react-three/drei |

Contributing

Contributions are welcome! Please read our Code of Conduct and Contributing