الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

كيفية رسم الهرم

بدأه simpatico في 29 أكتوبر 2009 · 0 رد · 1,662 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1

السلام عليكــم ورحمـة الله وبركاتــه ،،

رجاء ساعدوني هدا الكود لرسم تيتراهيدرون بس هنا باستعمال ال

tree

وانا ما بعرف عنها شي

انا حذفت منه كتير بس لسا كتير في اشياء مش مفهومه

رجاء ازا فيكم تبسطولي ياه لحتى اعرف كيف بينرسم

اذا بنفع من عير tree

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package wed28;

import java.applet.Applet;
import java.awt.BorderLayout;
import java.awt.GraphicsConfiguration;

import javax.media.j3d.Alpha;

import javax.media.j3d.Appearance;
import javax.media.j3d.Background;
import javax.media.j3d.BoundingSphere;
import javax.media.j3d.Bounds;
import javax.media.j3d.BranchGroup;
import javax.media.j3d.Canvas3D;
import javax.media.j3d.ColoringAttributes;

import javax.media.j3d.Geometry;
import javax.media.j3d.Group;

import javax.media.j3d.RotationInterpolator;
import javax.media.j3d.Shape3D;

import javax.media.j3d.Transform3D;
import javax.media.j3d.TransformGroup;

import javax.media.j3d.TriangleArray;
import javax.vecmath.Color3f;
import javax.vecmath.Point3d;
import javax.vecmath.Point3f;
import javax.vecmath.TexCoord2f;
import javax.vecmath.Vector3d;
import javax.vecmath.Vector3f;

import com.sun.j3d.utils.applet.MainFrame;

import com.sun.j3d.utils.picking.PickResult;

import com.sun.j3d.utils.picking.behaviors.PickMouseBehavior;
import com.sun.j3d.utils.universe.SimpleUniverse;


public class TickTockPicking extends Applet {

  // path the the texture map image
  private java.net.URL texImage = null;

  private SimpleUniverse u = null;

  public BranchGroup createSceneGraph(Canvas3D c) {
	// Create the root of the branch graph
	BranchGroup objRoot = new BranchGroup();

	// Create a Transformgroup to scale all objects so they
	// appear in the scene.
	TransformGroup objScale = new TransformGroup();
	Transform3D t3d = new Transform3D();
	t3d.setScale(0.4);
	objScale.setTransform(t3d);
	objRoot.addChild(objScale);

	// Create a bounds for the background and behaviors
	BoundingSphere bounds = new BoundingSphere(new Point3d(0.0, 0.0, 0.0),
	   100.0);

	// Set up the background
	Color3f bgColor = new Color3f(0.05f, 0.06f, 0.5f);
	Background bg = new Background(bgColor);
	bg.setApplicationBounds(bounds);
	objScale.addChild(bg);




	int row=0, col=0;
	Appearance[][] app = new Appearance[3][3];


		app[row][col] = createAppearance(0);

	for (int i = 0; i < 1; i++) {
	  double ypos = (double) (-i*0+1.5);
	  for (int j = 0; j < 1; j++) {
		double xpos = (double) (j - 1) * 1.5;
		objScale.addChild(createObject(app[j], 0.3, xpos, ypos));
	  }
	}

	// Have Java 3D perform optimizations on this scene graph.
	objRoot.compile();

	return objRoot;
  }

  private Appearance createAppearance(int idx) {
	Appearance app = new Appearance();


	switch (idx) {
	// Unlit solid



	default: {
	  ColoringAttributes ca = new ColoringAttributes();
	  ca.setColor(new Color3f(0.4f, 0.6f, 0.5f));
	  app.setColoringAttributes(ca);
	}
	}

	return app;
  }

  private Group createObject(Appearance app, double scale, double xpos,
	  double ypos) {

	// Create a transform group node to scale and position the object.
	Transform3D t = new Transform3D();
	t.set(scale, new Vector3d(xpos, ypos, 0.0));
	TransformGroup objTrans = new TransformGroup(t);

	// Create a second transform group node and initialize it to the
	// identity. Enable the TRANSFORM_WRITE capability so that
	// our behavior code can modify it at runtime.
	TransformGroup spinTg = new TransformGroup();
	spinTg.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
	spinTg.setCapability(TransformGroup.ALLOW_TRANSFORM_READ);

	// Create a simple shape leaf node and set the appearance
	Shape3D shape = new Tetrahedron();
	shape.setAppearance(app);
	shape.setCapability(shape.ALLOW_APPEARANCE_READ);
	shape.setCapability(shape.ALLOW_APPEARANCE_WRITE);

	// add it to the scene graph.
	spinTg.addChild(shape);

	// Create a new Behavior object that will perform the desired
	// operation on the specified transform object and add it into
	// the scene graph.

	/////////////////////////////////////
	Transform3D yAxis = new Transform3D();
	Alpha rotationAlpha = new Alpha(-1, Alpha.INCREASING_ENABLE, 0, 0,
		3000, 0, 0, 0, 0, 0);

	RotationInterpolator rotator = new RotationInterpolator(rotationAlpha,
		spinTg, yAxis, 0.0f, (float) Math.PI * 2.0f);



	BoundingSphere bounds = new BoundingSphere(new Point3d(0.0, 0.0, 0.0),
		100.0);

	rotator.setSchedulingBounds(bounds);

	// Add the behavior and the transform group to the object
   objTrans.addChild(rotator);
	objTrans.addChild(spinTg);

	return objTrans;
  }

  public TickTockPicking() {
  }

  public TickTockPicking(java.net.URL url) {
	texImage = url;
  }

  public void init() {



	setLayout(new BorderLayout());
	GraphicsConfiguration config = SimpleUniverse
		.getPreferredConfiguration();

	Canvas3D c = new Canvas3D(config);
	add("Center", c);

	// Create a simple scene and attach it to the virtual universe
	BranchGroup scene = createSceneGraph(c);
	u = new SimpleUniverse(c);

	// This will move the ViewPlatform back a bit so the
	// objects in the scene can be viewed.
	u.getViewingPlatform().setNominalViewingTransform();

	u.addBranchGraph(scene);

  }

  public void destroy() {
	u.cleanup();
  }

  //
  // The following allows TickTockPicking to be run as an application
  // as well as an applet
  //
  public static void main(String[] args) {
	// the path the the texture map for an application
	java.net.URL url = null;
	try {
	  url = new java.net.URL("file:apimage.jpg");
	} catch (java.net.MalformedURLException ex) {
	  System.out.println(ex.getMessage());
	  System.exit(1);
	}
   new MainFrame(new TickTockPicking(url), 700, 700);
  }
}
class Tetrahedron extends Shape3D {
  private static final float sqrt3 = (float) Math.sqrt(3.0);

  private static final float sqrt3_3 = sqrt3 / 3.0f;

  private static final float sqrt24_3 = (float) Math.sqrt(24.0) / 3.0f;

  private static final float ycenter = 0.5f * sqrt24_3;

  private static final float zcenter = -sqrt3_3;

  private static final Point3f p1 = new Point3f(-1.0f, -ycenter, -zcenter);

  private static final Point3f p2 = new Point3f(1.0f, -ycenter, -zcenter);

  private static final Point3f p3 = new Point3f(0.0f, -ycenter, -sqrt3
	  - zcenter);

  private static final Point3f p4 = new Point3f(0.0f, sqrt24_3 - ycenter,
	  0.0f);

  private static final Point3f[] verts = { p1, p2, p4, // front face
	  p1, p4, p3, // left, back face
	  p2, p3, p4, // right, back face
	  p1, p3, p2, // bottom face
  };

  private TexCoord2f texCoord[] = { new TexCoord2f(0.0f, 0.0f),
	  new TexCoord2f(1.0f, 0.0f), new TexCoord2f(0.5f, sqrt3 / 2.0f), };

  public Tetrahedron() {
	int i;

	TriangleArray tetra = new TriangleArray(12, TriangleArray.COORDINATES
		| TriangleArray.NORMALS | TriangleArray.TEXTURE_COORDINATE_2);

	tetra.setCoordinates(0, verts);
	for (i = 0; i < 9; i++) {
	  tetra.setTextureCoordinate(0, i, texCoord[i % 3]);
	}

	int face;
	Vector3f normal = new Vector3f();
	Vector3f v1 = new Vector3f();
	Vector3f v2 = new Vector3f();
	Point3f[] pts = new Point3f[3];
	for (i = 0; i < 3; i++)
	  pts = new Point3f();

	for (face = 0; face < 4; face++) {
	  tetra.getCoordinates(face * 3, pts);
	  v1.sub(pts[1], pts[0]);
	  v2.sub(pts[2], pts[0]);
	  normal.cross(v1, v2);
	  normal.normalize();
	  for (i = 0; i < 3; i++) {
		tetra.setNormal((face * 3 + i), normal);
	  }
	}

	tetra.setCapability(Geometry.ALLOW_INTERSECT);

	this.setGeometry(tetra);
	this.setAppearance(new Appearance());
 }
}


class PickHighlightBehavior extends PickMouseBehavior {
  Appearance savedAppearance = null;

  Shape3D oldShape = null;

  Appearance highlightAppearance;

  public PickHighlightBehavior(Canvas3D canvas, BranchGroup root,
	  Bounds bounds) {
	super(canvas, root, bounds);

  }

  public void updateScene(int xpos, int ypos) {
	PickResult pickResult = null;
	Shape3D shape = null;

	pickCanvas.setShapeLocation(xpos, ypos);

	}
}

مواضيع مشابهة