Как динамически создавать 3d-объект путем добавления контуров?(Java;OpenGL)

StackOverflow https://stackoverflow.com/questions/2305314

Вопрос

Итак, у меня есть некоторый генератор путей, который теперь работает следующим образом

http://www.openprocessing.org/visuals/?visualID=2615 (Есть источник;WQRNING - JAVA-АППЛЕТ)

Я хочу создать какой-нибудь 3D-объект, используя пути, которые я сгенерировал, чтобы он отображался в одной из перспектив, похожих на то, что я получаю сейчас в 2D.

Итак, как мне динамически создавать 3D-объект путем добавления путей?

КСТАТИ:на самом деле я улучшаю алгоритм следующим образом http://www.derschmale.com/2009/07/20/slice-based-volume-rendering-using-pixel-bender/

Итак, я хочу создать по такому ПУТИ (я не хочу использовать изображения, и я не хочу использовать flash, я хочу использовать Java + OpenGL)

alt text

такое 3d-изображение (но обратите внимание, что я хочу OpenGL Java и Path))

alt text

Это было полезно?

Решение

Я не уверен, что понимаю, чего ты добиваешься.

Приведенный вами пример рисует 2d-контуры, но использует просто z .масштабирование сработало бы аналогичным образом.

Итак, как динамически построить 3d объект, добавив пути?

Вы имеете в виду выдавливание / обрешетку объекта или репликацию эскиза скручивания ?

Нарисовать контур легко в обработке, вы просто размещаете вершина объекты, в для цикла между Начальная форма() и Конечная форма() звонки.

Вот фрагмент кода, который делает это в примере, который вы отправили:

 beginShape(); 
  for (int p=0; p<pcount; p++){ 
    vertex(Ring[p].position().x(),Ring[p].position().y()); 
  } 
  endShape(CLOSE);

вы также можете вызвать vertex(x,y,z)

Некоторое время назад я хотел проложить путь, вот мой вопрос на случай, если это поможет.

Базовый эскиз загружен здесь.

Редактировать:Если у вас есть массив из 2 полигонов, вы можете просто перебирать их и рисовать использование чего-то похожего на beginShape() и endShape(), GL_POLYGON может быть удобным.

например ,

import processing.opengl.*;
import javax.media.opengl.*;

int zSpacing = 10;
PVector[][] slices;

void setup() {
  size(600, 500, OPENGL);

  slices = new PVector[3][3];
  //dummy slice 1
  slices[0][0] = new PVector(400, 200,-200);
  slices[0][1] = new PVector(300, 400,-200);
  slices[0][2] = new PVector(500, 400,-200);
  //dummy slice 2
  slices[1][0] = new PVector(410, 210,-200);
  slices[1][1] = new PVector(310, 410,-200);
  slices[1][2] = new PVector(510, 410,-200);
  //dummy slice 3
  slices[2][0] = new PVector(420, 220,-200);
  slices[2][1] = new PVector(320, 420,-200);
  slices[2][2] = new PVector(520, 420,-200);
}

void draw() {
  background(255);

  PGraphicsOpenGL pgl = (PGraphicsOpenGL) g;  // g may change
  GL gl = pgl.beginGL();  // always use the GL object returned by beginGL

  for(int i = 0 ; i < slices.length; i ++){
    gl.glColor3f(0, .15 * i, 0);
    gl.glBegin(GL.GL_POLYGON);
    for(int j = 0; j < slices[i].length; j++){
      gl.glVertex3f(slices[i][j].x, slices[i][j].y,slices[i][j].z + (zSpacing * i));
    }
    gl.glEnd();
  }
  pgl.endGL();
}

Идея заключается в том, что вы проходите по каждому срезу, и для каждого среза ваш цикл проходит по всем его точкам.Очевидно, что срезы и количество 3d-векторов внутри каждого среза зависят от ваших данных.Кстати говоря, откуда берутся ваши данные ?

Если slices - это не то, что вам нужно Вольтрон могло бы пригодиться:Вольтрон http://dm.ncl.ac.uk/joescully/voltronlib/images/s2.jpg

HTH, Джордж

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top