パスを追加して動的に 3D オブジェクトを構築するにはどうすればよいですか?(Java;OpenGL)

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

質問

それで、私は現在このように動作するパスジェネレーターを持っています

http://www.openprocessing.org/visuals/?visualID=2615 (ソースがあります。WQRNING - Java アプレット)

生成したパスを使用して 3D オブジェクトを作成し、2D で得られるものと同様の視点の 1 つにロックしたいと考えています。

では、パスを追加して 3D オブジェクトを動的に構築するにはどうすればよいでしょうか?

ところで:実際に私はこのようなアルゴリズムを言及しています http://www.derschmale.com/2009/07/20/slice-based-volume-rendering-using-pixel-bender/

なので、このようなPATHから作成したいです(画像も使いたくない、Flashも使いたくない、Java+OpenGlを使いたい)

alt text

このような 3D 画像 (ただし、openGL Java と Path が必要であることに注意してください))

alt text

役に立ちましたか?

解決

あなたが何を求めているのか理解できません。

あなたが指定した例は 2D パスを描画しますが、z を使用するだけです。スケーリングは同様の方法で機能していたでしょう。

では、パスを追加して3Dオブジェクトをダイナマに構築するにはどうすればよいですか?

オブジェクトを押し出し/旋盤加工すること、またはスクランチ スケッチを複製することを意味しますか?

パスを描くと配置するだけなので処理が簡単 バーテックス オブジェクト、 forループbeginShape() そして エンドシェイプ() 呼び出します。

送信した例でこれを行うコードの一部を次に示します。

 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 ベクトルの数はデータによって異なります。そういえば、あなたのデータはどこから来たのですか?

スライスが目的ではない場合 ヴォルトロン 役に立つかもしれません:volTron http://dm.ncl.ac.uk/joescully/voltronlib/images/s2.jpg

HTH、 ジョージ

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top