Pushing new portfolio changes, and going live
This commit is contained in:
BIN
src/assets/logos/git-logo.png
Normal file
BIN
src/assets/logos/git-logo.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 8.2 KiB |
BIN
src/assets/logos/linkedin-logo.png
Normal file
BIN
src/assets/logos/linkedin-logo.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 8.8 KiB |
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1,83 +1,55 @@
|
|||||||
import '../styles/styles.scss';
|
import '../styles/styles.scss';
|
||||||
import * as THREE from 'three';
|
import * as THREE from 'three';
|
||||||
import { useRef, useState } from 'react';
|
import { useRef, useState } from 'react';
|
||||||
import { useFrame, useThree } from '@react-three/fiber';
|
import { useFrame, useThree, useLoader } from '@react-three/fiber';
|
||||||
import {
|
import {
|
||||||
Text,
|
Text,
|
||||||
MeshReflectorMaterial,
|
MeshReflectorMaterial,
|
||||||
useTexture,
|
|
||||||
Html,
|
Html,
|
||||||
Image,
|
Image,
|
||||||
Scroll,
|
|
||||||
useScroll,
|
useScroll,
|
||||||
ScrollControls,
|
|
||||||
useGLTF,
|
useGLTF,
|
||||||
useHelper,
|
|
||||||
OrbitControls
|
|
||||||
} from '@react-three/drei';
|
} from '@react-three/drei';
|
||||||
import { gsap } from 'gsap';
|
import { gsap } from 'gsap';
|
||||||
|
|
||||||
import font from '../assets/fonts/Inter-Bold.woff';
|
import font from '../assets/fonts/Inter-Bold.woff';
|
||||||
import toyCar from '../assets/models/ToyCar.glb';
|
|
||||||
import mac from '../assets/models/mac-draco.glb';
|
import mac from '../assets/models/mac-draco.glb';
|
||||||
import { SpotLightHelper, DirectionalLightHelper } from 'three';
|
|
||||||
import logo from '../assets/logos/fd..svg';
|
import logo from '../assets/logos/fd..svg';
|
||||||
import ultradentLogo from '../assets/logos/ultradent-white.svg';
|
import ultradentLogo from '../assets/logos/ultradent-white.svg';
|
||||||
import monumetricLogo from '../assets/logos/monumetric-stacked-white.svg';
|
import monumetricLogo from '../assets/logos/monumetric-stacked-white.svg';
|
||||||
|
import linkedInLogo from '../assets/logos/linkedin-logo.png';
|
||||||
|
import git from '../assets/logos/git-logo.png';
|
||||||
|
|
||||||
const rsqw = (t, delta = 0.1, a = 1, f = 1 / (2 * Math.PI)) => (a / Math.atan(1 / delta)) * Math.atan(Math.sin(2 * Math.PI * t * f) / delta)
|
const SocialSphere = ({texture, position, rotation, scale, url}) => {
|
||||||
|
|
||||||
const Floor = () => {
|
|
||||||
// const [floor, normal] = useTexture([floorTexture, floorTextureNormal]);
|
|
||||||
return (
|
|
||||||
<mesh rotation={[-Math.PI / 2, 0, 0]}>
|
|
||||||
<planeGeometry attach='geometry' args={[15, 7]} />
|
|
||||||
<MeshReflectorMaterial
|
|
||||||
blur={[400, 400]}
|
|
||||||
color="#1a1a1d"
|
|
||||||
resolution={512}
|
|
||||||
mixBlur={7}
|
|
||||||
args={[10, 10]}
|
|
||||||
mirror={0.5}
|
|
||||||
mixStrength={0.2}
|
|
||||||
roughnessMap={floor}
|
|
||||||
metalness={0.4}
|
|
||||||
normalMap={normal}
|
|
||||||
normalScale={[3, 3]}
|
|
||||||
/>
|
|
||||||
</mesh>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
const Dog = ({position, scale, index}) => {
|
|
||||||
const ref = useRef();
|
|
||||||
|
|
||||||
const scroll = useScroll();
|
|
||||||
const [hovered, setHovered] = useState(false);
|
const [hovered, setHovered] = useState(false);
|
||||||
const [clicked, setClicked] = useState(false);
|
const sphereRef = useRef();
|
||||||
const [rnd] = useState(() => Math.random());
|
|
||||||
|
|
||||||
useFrame((state, delta) => {
|
useFrame((state, delta) => {
|
||||||
ref.current.material.scale[0] = ref.current.scale.x = THREE.MathUtils.damp(ref.current.scale.x, clicked ? 4 : scale[0], 6, delta);
|
// console.log( sphereRef.current.scale );
|
||||||
|
if( hovered ) {
|
||||||
ref.current.position.x = THREE.MathUtils.damp(ref.current.position.x, clicked ? position[0] + 1 : position[0], 6, delta);
|
gsap.to( sphereRef.current.scale, {
|
||||||
|
x: 1.2,
|
||||||
ref.current.scale.x = THREE.MathUtils.damp(ref.current.scale.x, hovered ? 0.75 : scale[0], 6, delta);
|
y: 1.2,
|
||||||
ref.current.scale.y = THREE.MathUtils.damp(ref.current.scale.y, hovered ? scale[1] + 0.1 : scale[1], 8, delta);
|
z: 1.2
|
||||||
ref.current.material.grayscale = THREE.MathUtils.damp(ref.current.material.grayscale, hovered ? 0 : 1, 6, delta);
|
|
||||||
ref.current.material.zoom = 1.5 + Math.sin(rnd * 10000 + state.clock.elapsedTime / 3) / 2;
|
|
||||||
ref.current.material.color.lerp(new THREE.Color().set(hovered ? 'white' : '#aaa'), hovered ? 0.3 : 0.1);
|
|
||||||
} );
|
} );
|
||||||
|
} else {
|
||||||
|
gsap.to( sphereRef.current.scale, {
|
||||||
|
x: 1,
|
||||||
|
y: 1,
|
||||||
|
z: 1
|
||||||
|
} );
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
function routeToSocial() {
|
||||||
|
window.open(url, '_blank');
|
||||||
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Image
|
<mesh ref={sphereRef} onPointerEnter={() => setHovered(true)} onPointerLeave={() => setHovered(false)} onPointerDown={() => routeToSocial()} receiveShadow castShadow position={position} rotation={rotation}>
|
||||||
ref={ref}
|
<sphereBufferGeometry args={scale} />
|
||||||
onClick={() => setClicked(!clicked)}
|
<meshPhysicalMaterial attach="material" color={"white"} map={texture} />
|
||||||
onPointerOver={() => setHovered(true)}
|
</mesh>
|
||||||
onPointerOut={() => setHovered(false)}
|
|
||||||
url="https://picsum.photos/id/237/1920/1028"
|
|
||||||
position={position}
|
|
||||||
rotation={[0, 0, 0]}
|
|
||||||
scale={scale}/>
|
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -88,12 +60,11 @@ const App = () => {
|
|||||||
const spotlightRef = useRef();
|
const spotlightRef = useRef();
|
||||||
const directionalLightRef = useRef();
|
const directionalLightRef = useRef();
|
||||||
const lightingTarget = useRef();
|
const lightingTarget = useRef();
|
||||||
const sphereRef = useRef();
|
const spheresRef = useRef();
|
||||||
const { camera, gl } = useThree();
|
const { camera, gl } = useThree();
|
||||||
const [screenClicked, setScreenClicked] = useState(false);
|
const [screenClicked, setScreenClicked] = useState(false);
|
||||||
|
const linkedin = useLoader(THREE.TextureLoader, linkedInLogo);
|
||||||
// useHelper( spotlightRef, SpotLightHelper, 1 );
|
const gitTexture = useLoader(THREE.TextureLoader, git);
|
||||||
// useHelper( directionalLightRef, DirectionalLightHelper, 1 );
|
|
||||||
|
|
||||||
const mbp16 = useRef();
|
const mbp16 = useRef();
|
||||||
const xW = 0.7 + 0.15;
|
const xW = 0.7 + 0.15;
|
||||||
@@ -107,6 +78,7 @@ const App = () => {
|
|||||||
sectionOneRef.current.rotation.y = -Math.sin(rnd * state.clock.elapsedTime) / 8;
|
sectionOneRef.current.rotation.y = -Math.sin(rnd * state.clock.elapsedTime) / 8;
|
||||||
sectionTwoRef.current.rotation.y = -Math.sin(rnd * state.clock.elapsedTime) / 8;
|
sectionTwoRef.current.rotation.y = -Math.sin(rnd * state.clock.elapsedTime) / 8;
|
||||||
imageGroupRef.current.position.y = scroll.offset * 14;
|
imageGroupRef.current.position.y = scroll.offset * 14;
|
||||||
|
spheresRef.current.position.y = scroll.offset * 14;
|
||||||
|
|
||||||
if ( !r2 || scroll.range( 2 / 4, 2 / 4 ) ) {
|
if ( !r2 || scroll.range( 2 / 4, 2 / 4 ) ) {
|
||||||
setScreenClicked( false );
|
setScreenClicked( false );
|
||||||
@@ -123,8 +95,6 @@ const App = () => {
|
|||||||
y: screenClicked && r2 ? -0.5 : 0
|
y: screenClicked && r2 ? -0.5 : 0
|
||||||
} );
|
} );
|
||||||
|
|
||||||
// mbp16.current.rotation.x = Math.PI - (Math.PI / 2) * rsqw(r1) + r2 * 0.33;
|
|
||||||
|
|
||||||
if( scroll.range(1 / 3, 2 / 3) ) {
|
if( scroll.range(1 / 3, 2 / 3) ) {
|
||||||
gsap.to( sectionOneRef.current.position, {x: -5} );
|
gsap.to( sectionOneRef.current.position, {x: -5} );
|
||||||
} else {
|
} else {
|
||||||
@@ -146,17 +116,18 @@ const App = () => {
|
|||||||
<>
|
<>
|
||||||
{/* <OrbitControls args={[camera, gl.domElement]} /> */}
|
{/* <OrbitControls args={[camera, gl.domElement]} /> */}
|
||||||
<color attach="background" args={["#FAF9F6"]} />
|
<color attach="background" args={["#FAF9F6"]} />
|
||||||
{/* <fog attach="fog" args={["#FAF9F6", 0, 15]} /> */}
|
|
||||||
|
|
||||||
<mesh receiveShadow position={[0, 0, -4]} rotation={[0, 0, 0]}>
|
<mesh receiveShadow position={[0, 0, -4]} rotation={[0, 0, 0]}>
|
||||||
<planeGeometry args={[100, 100]} />
|
<planeGeometry args={[150, 150]} />
|
||||||
<meshStandardMaterial attach="material" color="#FAF9F6" />
|
<meshStandardMaterial attach="material" color="#FAF9F6" />
|
||||||
</mesh>
|
</mesh>
|
||||||
|
|
||||||
{/* <mesh ref={sphereRef} receiveShadow castShadow position={[2, 0, -3]}>
|
<group ref={spheresRef}>
|
||||||
<sphereBufferGeometry scale={[0.1, 0.1]} />
|
|
||||||
<meshStandardMaterial attach="material" color={"pink"} />
|
<SocialSphere texture={linkedin} position={[1, 0, -3]} scale={[0.4]} rotation={[0, -1.8, -0.2]} url="https://www.linkedin.com/in/frank-delaguila/"/>
|
||||||
</mesh> */}
|
<SocialSphere texture={gitTexture} position={[2.5, 0, -3]} scale={[0.4]} rotation={[0, -2, -0.2]} url="https://github.com/franky212/"/>
|
||||||
|
|
||||||
|
</group>
|
||||||
|
|
||||||
<spotLight
|
<spotLight
|
||||||
shadow-mapSize-width={1024 * 4}
|
shadow-mapSize-width={1024 * 4}
|
||||||
@@ -211,13 +182,6 @@ const App = () => {
|
|||||||
|
|
||||||
<group ref={lightingTarget}>
|
<group ref={lightingTarget}>
|
||||||
<group ref={imageGroupRef} position={[0, 0, 0]}>
|
<group ref={imageGroupRef} position={[0, 0, 0]}>
|
||||||
{/* <Dog index={0} position={[1.5 * xW, -0.1, -3]} scale={[0.7, 2, 1]} />
|
|
||||||
<Dog index={1} position={[2.5 * xW, -0.1, -3]} scale={[0.7, 2, 1]} />
|
|
||||||
<Dog index={2} position={[3.5 * xW, -0.1, -3]} scale={[0.7, 2, 1]} /> */}
|
|
||||||
|
|
||||||
{/* <group rotation={[Math.PI / 2, 0, 0]} position={[1.5, -1, -3]} scale={[0.01, 0.01, 0.01]}>
|
|
||||||
<mesh receiveShadow castShadow geometry={toyCar.nodes.ToyCar.geometry} />
|
|
||||||
</group> */}
|
|
||||||
|
|
||||||
<group position={[1.5, -6, -3]} rotation={[0, -0.5, 0]} ref={mbp16} dispose={null} scale={[0.2, 0.2, 0.2]}>
|
<group position={[1.5, -6, -3]} rotation={[0, -0.5, 0]} ref={mbp16} dispose={null} scale={[0.2, 0.2, 0.2]}>
|
||||||
<group position={[0, 2.85, 0.4]}>
|
<group position={[0, 2.85, 0.4]}>
|
||||||
@@ -243,14 +207,14 @@ const App = () => {
|
|||||||
<a target="_blank" href="https://www.monumetric.com/">
|
<a target="_blank" href="https://www.monumetric.com/">
|
||||||
<img className="w-16 mb-2" src={monumetricLogo} alt="Monumetric Logo - Graphic of the Pale Blue Dot from Caral Sagan with Monumetric below" />
|
<img className="w-16 mb-2" src={monumetricLogo} alt="Monumetric Logo - Graphic of the Pale Blue Dot from Caral Sagan with Monumetric below" />
|
||||||
</a>
|
</a>
|
||||||
<p><span className="font-bold">Technologies Used:</span><br />Angular 3/7/13+, Javascript, SCSS(Sass), Multiple Auth APIs, UX/UI Design, Figma, Adobe XD</p>
|
<p><span className="font-bold">Frontend Developer and UX/UI Designer<br /></span>Technologies Used:<br />Angular 3/7/13+, Javascript, SCSS(Sass), UX/UI Design, Adobe XD, Figma</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className="bg-zinc-800 w-full rounded p-4 mb-2">
|
<div className="bg-zinc-800 w-full rounded p-4 mb-2">
|
||||||
<a target="_blank" href="https://www.ultradent.com/">
|
<a target="_blank" href="https://www.ultradent.com/">
|
||||||
<img className="w-12 mb-2" src={ultradentLogo} alt="Ultradent Logo - UPI in white for Ultradent Products Inc." />
|
<img className="w-12 mb-2" src={ultradentLogo} alt="Ultradent Logo - UPI in white for Ultradent Products Inc." />
|
||||||
</a>
|
</a>
|
||||||
<p><span className="font-bold">Technologies Used:</span><br />React/Preact, Javascript, jQuery, Webpack, Storybook, React Testing Library, SCSS(Sass), Razor Views, Figma, Sketch</p>
|
<p><span className="font-bold">Front End Developer<br /></span>Technologies Used:<br />React/Preact, Javascript, jQuery, Webpack, Storybook, React Testing Library, SCSS(Sass), Razor Views, Figma, Sketch</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -3,21 +3,17 @@ import logo from '../assets/logos/fd..svg';
|
|||||||
const MainContent = () => {
|
const MainContent = () => {
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
<>
|
||||||
<main className="container">
|
<main className="container">
|
||||||
<nav className="flex items-center w-full">
|
<nav className="flex items-center w-full">
|
||||||
<img
|
<img
|
||||||
alt="Frank Delaguila - Designer and Developer Logo (FD.)"
|
alt="Frank Delaguila - Front End Web Developer and Designer Logo (FD.)"
|
||||||
className="w-16"
|
className="w-16"
|
||||||
src={logo}
|
src={logo}
|
||||||
/>
|
/>
|
||||||
{/* <ul className="flex items-center justify-between ml-24 w-64">
|
|
||||||
<li>Home</li>
|
|
||||||
<li>About</li>
|
|
||||||
<li>Portfolio</li>
|
|
||||||
<li>Contact</li>
|
|
||||||
</ul> */}
|
|
||||||
</nav>
|
</nav>
|
||||||
</main>
|
</main>
|
||||||
|
</>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ render(
|
|||||||
<Suspense fallback={null}>
|
<Suspense fallback={null}>
|
||||||
<MainContent />
|
<MainContent />
|
||||||
<Canvas shadows mode='concurrent' dpr={Math.max(window.devicePixelRatio, 2)} gl={{ antialias: true }} camera={{position: [0, 0, 0]}} id="canvas-container" style={{position: 'absolute'}}>
|
<Canvas shadows mode='concurrent' dpr={Math.max(window.devicePixelRatio, 2)} gl={{ antialias: true }} camera={{position: [0, 0, 0]}} id="canvas-container" style={{position: 'absolute'}}>
|
||||||
<ScrollControls damping={10} pages={10}>
|
<ScrollControls damping={10} pages={1}>
|
||||||
<Scroll>
|
<Scroll>
|
||||||
<App />
|
<App />
|
||||||
</Scroll>
|
</Scroll>
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ body {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#root {
|
#root {
|
||||||
|
text-rendering: optimizeLegibility;
|
||||||
position: relative;
|
position: relative;
|
||||||
height: 100vh;
|
height: 100vh;
|
||||||
.container {
|
.container {
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
<link rel="shortcut icon" type="image/jpg" href="../assets/logos/fd..svg"/>
|
<link rel="shortcut icon" type="image/jpg" href="../assets/logos/fd..svg"/>
|
||||||
<title>Designer and Developer</title>
|
<title>Font End Web Developer and Designer</title>
|
||||||
|
|
||||||
<link rel="stylesheet" href="https://use.typekit.net/vkd2vwx.css">
|
<link rel="stylesheet" href="https://use.typekit.net/vkd2vwx.css">
|
||||||
</head>
|
</head>
|
||||||
|
|||||||
Reference in New Issue
Block a user