Designing a cylinder with an angled base

I am looking to generate a unique cylinder with a slanted bottom shape using three.js. I have explored the documentation but did not come across any built-in features for creating this specific geometry. I attempted to cut the cylinder with a slanted plane, however, I was unable to find an operation for this in the available resources. If anyone has suggestions on how to achieve this unconventional shape, please advise.

Answer №1

You have the freedom to manipulate vertices at your discretion.

Here is a basic concept:

var scene = new THREE.Scene();
var camera = new THREE.PerspectiveCamera(60, window.innerWidth / window.innerHeight, 1, 1000);
camera.position.set(0, 0, 10);
var renderer = new THREE.WebGLRenderer({
  antialias: true
});
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);

var controls = new THREE.OrbitControls(camera, renderer.domElement);

var light = new THREE.DirectionalLight(0xffffff, 0.5);
light.position.setScalar(10);
scene.add(light);
scene.add(new THREE.AmbientLight(0xffffff, 0.5));

var cylGeom = new THREE.CylinderBufferGeometry(1, 1, 5, 16);

var vertices = cylGeom.attributes.position;

// modify upper vertices
var v3 = new THREE.Vector3(); // temporary vector
for (let i = 0; i < vertices.count; i++) {
  v3.fromBufferAttribute(vertices, i); // set the temporary vector
  v3.y = v3.y > 0 ? (v3.x * 0.5) + 2.5 : v3.y; // adjust position based on condition and equation
  vertices.setY(i, v3.y); // set Y-component of a vertex
}

var cylMat = new THREE.MeshLambertMaterial({
  color: "aqua"
});
var cyl = new THREE.Mesh(cylGeom, cylMat);
scene.add(cyl);

renderer.setAnimationLoop(() => {
  renderer.render(scene, camera)
});
body {
  overflow: hidden;
  margin: 0;
}
<script src="https://threejs.org/build/three.min.js"></script>
<script src="https://threejs.org/examples/js/controls/OrbitControls.js"></script>

Similar questions

If you have not found the answer to your question or you are interested in this topic, then look at other similar questions below or use the search

Tips for implementing the handleClick method within a class component, as opposed to using the export default function syntax in

Hey there! I'm a beginner in React and I'm trying to incorporate Material UI into my project. I came across the documentation for the menu section like this, but I'm facing some challenges with writing my code. Specifically, I'm struggl ...

Navigating through the various iterations of jQuery

Unique Case Study I'm currently facing a dilemma involving the integration of jstree and jquery-ui datepicker. The scenario is this: I am attempting to utilize jquery-ui-datepicker on an input element that is dynamically inserted into the DOM after ...

Using Express.js, the require() method is called, followed by a function that takes

I'm relatively new to Node.js and Express. While browsing tutorials and examples, I came across the following code snippet inside app.js: var router = require('./router')(app); I'm curious about the purpose of this line of code. What ...

The appearance of the circle in Safari is rough and lacks smoothness

My circle animation works perfectly on Google Chrome, but when I switch to Safari the edges appear faded and blurry. I tried adding "webkit" to fix it, but had no luck. Is there a compatibility issue with Safari and CSS animations? Here is my code: Snapsh ...

Error in React Router when using TypeScript

Encountering errors while trying to set up router with React and TypeScript. https://i.sstatic.net/muSZU.png I have already attempted to install npm install @types/history However, the issue persists. Your assistance would be greatly appreciated. Thank y ...

Issue identified: Upgrading package (buefy) causes disruptions in project functionality (filegator) - potential import conflicts(?

I am currently working on enhancing features for the self-hosted file storage system called filegator. (The project utilizes single-file components for organization, which is important to note.) (It is built on Vue.js and operates as a Node.js server ...

Discovering numbers within a JSON object and extracting them - a step-by-step guide

If I have a JSON object coming from a random dataset and want to search through it to manipulate the number values, how can I achieve this? Looping through the object using for...of allows me to get the keys, but I'm unsure how to access every key-val ...

Exploring the world of asynchronous operations with React Hooks

Hello, I am a beginner when it comes to React and JavaScript. I could really use some assistance with two hooks that I have created: useSaveStorage and useGetStorage. The issue I am facing is that my app is supposed to receive data and save it into AsyncS ...

Implement functionality in Angular to perform tasks when the page is reloaded

I need to perform certain actions in Angular when the page is reloaded, such as adding items to local storage before the page loads and removing items after the page has fully loaded. In other words, I want to execute some tasks both before and after refr ...

Unique rewritten text: "Special case: This is not defined

I am in the process of creating my own custom exception in Node.js to handle errors specific to the environment the server is running in. However, when the error is thrown, it shows as undefined. (function () { 'use strict'; var states = req ...

How to change a value within an array stored in local storage using Vanilla JavaScript?

I recently started learning vanilla JavaScript and followed a tutorial on creating a shopping cart. While the tutorial was helpful, it was cut short and I had to figure out how to update a value in a local storage array by clicking a button on my own. Can ...

Separating vendor and application code in Webpack for optimized bundling

Recently, I created a React+Webpack project and noticed that it takes 60 seconds to build the initial bundle, and only 1 second to append incremental changes. Surprisingly, this is without even adding my application code yet! It seems that the node_modules ...

Performing a modulo operation within a v-for loop

I'm showcasing divs in a loop and I need to assign classes based on the loop index. My goal is to have index 0 and 1 with the class col-6, then indexes 2,3,4 with the class col-4, followed by index 5 and 6 having the class col-6, and so forth. This w ...

Sent information from an HTML input form to a PHP action file seamlessly without reloading the page

I am trying to implement a process where an HTML input form communicates with a PHP file without refreshing the page. I have used JavaScript for this purpose, but now I am facing an issue where the $_POST[uid] is not retrieving the ID entered by the user, ...

I encountered an issue while using WooCommerce where I needed the "color section" product attribute to be hidden or disabled when a customer clicked on "stock" in the product price. Unfortunately, I'm unsure of how

function hideStock(){ var selected = document.getElementById("stk"); var hidden = document.getElementById("pa_color"); if (selected.onchange=="stock") { hidden.style.display = "none"; } } <table class= ...

Navigating the elements within R Shiny: A comprehensive guide

Can anyone help me figure out how to access specific elements in my Shiny app using their HTML tags? In this particular example, I need to retrieve all h1 elements along with their respective labels and IDs. library(shiny) ui <- fluidPage( h1("Get" ...

Can you explain how this promise functions within the context of the mutation observer, even without an argument?

Recently, I came across a mutation observer in some TypeScript code that has left me puzzled. This particular implementation of a promise within the mutation observer seems unconventional to me: const observer = new MutationObserver((mutations: MutationR ...

Is it possible to redirect an API response from one page request to another in Next.js?

When I post data to an internal API, it triggers a query in the database to find a match and retrieve additional information from the columns. My goal is to redirect the result of this query to another page for display. async function handleSubmit(e){ ...

Send a string query using AJAX along with the user's username and password

I am looking to include the command=login& string with the username and password obtained from a form, like login.php?command=login&name=something&password=main <form id="login" action="https//login.php" method="GET"> <fieldset&g ...

Does the String.replace() function in Javascript have the capability of incorporating line breaks?

Is it possible to use the String.replace() method in JavaScript to replace any character with a line feed symbol? For example: newString = oldString.replace(/x/, "linefeed character (\n)"). ...