2016-11-25 3 views
5

Est-il possible de faire des sprites/objets pour se copier et se courber dans une courbe? J'ai fait une image pour montrer ce que je veux dire:Comment faire de la géométrie suivre une courbe?

road

Ici la courbe, peut-être un chemin de Bézier est vert et la géométrie est en noir. Je veux que le sprite ou l'objet (sur la gauche) se copie et fusionne ses sommets avec la dernière copie, tandis que les deux derniers sommets suivent la courbe. Si oui, comment le faire? Y a-t-il de la documentation sur quelque chose comme ça? Avez-vous fait quelque chose comme ça? Comment?

EDIT: Je ne veux pas que l'objet ou l'objet se déplace dans le chemin, mais sorte de se dupliquer et se fusionner avec ses copies.

+0

Copie possible de [comment faire Sprite suivre bezier courbe] (http://stackoverflow.com/questions/28341998/how-to-make-sprite-follow-bezier-curve) – ebby94

+0

Est-ce pour faire une piste/route? – Confused

Répondre

2

Oui, ce que vous voulez faire peut fonctionner, et votre dessin montre comment cela fonctionne assez bien. Le pseudocode ressemblerait à quelque chose comme ceci:

curveLength = <length of entire curve>; 
tileLength = <length of 1 tile>; 
currentLength = 0; 
while (currentLength < curveLength) 
{ 
    currentTileLength = 0; 
    startPt = prevPt = calculateBezierAt(0.0); 
    for (t = delta; (t < 1) && (currentTileLength < tileLength); t += delta) // delta is up to you. I often use 1/100th 
    { 
     nextPt = calculateBezierAt(t); 
     distance = distanceBetween(prevPt, nextPt); 
     currentTileLength += distance; 
     currentLength += distance; 
     prevPt = nextPt; 
    } 
    endPt = prevPt; 
    // Calculate quad here 
} 

Pour calculer chaque quad, vous devez générer aux points perpendiculaires de début et de fin. Vous avez alors 4 points pour votre quad.

Notez que j'ai simplifié les choses en supposant qu'il n'y a qu'un seul bezier. Normalement, vous aurez beaucoup d'entre eux connectés ensemble, donc ce sera un peu plus compliqué de les parcourir que je ne l'ai dit plus haut, mais ça ne devrait pas être trop dur.

Notez également que si vous avez des coins très serrés ou si la courbe se renverse sur elle-même, vous risquez d'obtenir de mauvais résultats. Vraisemblablement, vous éviterez cela si vous générez les courbes vous-même, cependant.

+0

Pouvez-vous expliquer ce que signifient les différentes variables? Par exemple, qu'est-ce que startPt ou prevPt? Ce est t? C'est évidemment évident, mais peut-être que je ne peux pas le comprendre car l'anglais n'est pas ma langue maternelle – Pietari

+0

Aussi, comment placez-vous l'avion sur la courbe? – Pietari

0

Jetez un coup d'œil à SCNShape, qui génère une géométrie SceneKit à partir d'une courbe de Bézier.