كيفية بناء كائن ثلاثي الأبعاد ديناميكيا عن طريق إضافة مسارات؟ (Java ؛ OpenGL)

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

سؤال

لذلك لدي بعض مولد المسار الذي يعمل الآن مثل هذا

http://www.openprocessing.org/visuals/؟visualid=2615 (هناك مصدر ؛ wqrning - جافا applet)

أرغب في إنشاء بعض الكائنات ثلاثية الأبعاد باستخدام المسارات التي أنشأتها حتى يتم قفلها في واحدة من وجهات النظر المشابهة لما أحصل عليه الآن في 2D.

فكيف يمكنني بناء كائن ثلاثي الأبعاد ديناميكيًا عن طريق إضافة مسارات؟

راجع للشغل: في الواقع أنا منة خوارزمية مثل هذا http://www.derschmale.com/2009/07/20/slice- volume-rendering-using-pixel-bender/

لذلك أريد إنشاء من هذا المسار (لا أريد استخدام الصور ولا أريد استخدام فلاش أريد استخدام Java + OpenGL)

alt text

هذه الصورة ثلاثية الأبعاد (ولكن لاحظ أنني أريد OpenGL Java و Path's))

alt text

هل كانت مفيدة؟

المحلول

لست متأكدًا من أنني أفهم ما أنت عليه.

المثال الذي قمت بتزويده يسحب مسارات ثنائية الأبعاد ، ولكن فقط يستخدم z. قد عمل التحجيم بطريقة مماثلة.

إذن كيف يتم بناء كائن ثلاثي الأبعاد عن طريق إضافة مسار؟

هل تقصد البثق/وضع كائن ، أو تكرار رسم Scrunch؟

رسم مسار سهل في المعالجة ، يمكنك فقط وضعه قمة الرأس الكائنات ، في أ لحلقة بين BeginShape () و endshape () المكالمات.

فيما يلي جزء من الكود الذي يقوم بذلك في المثال الذي أرسلته:

 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();
}

الفكرة هي أنك حلقة من خلال كل شريحة ، ولكل شريحة حلقة من خلال جميع نقاطها. من الواضح أن الشرائح وعدد المتجهات ثلاثية الأبعاد داخل كل شريحة تصل إلى بياناتك. الحديث عن من أين تأتي بياناتك؟

إذا لم تكن الشرائح ما بعد ذلك فولترون يمكن أن يأتي في متناول يدي:Voltron http://dm.ncl.ac.uk/joescully/voltronlib/images/s2.jpg

HTH ، جورج

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top