Попытка сделать куб в Java без OpenGL - PullRequest
0 голосов
/ 25 мая 2018

Я довольно новичок в программировании на Java, но имею опыт работы с некоторыми другими языками.Я хочу нарисовать куб в окне JFrame, нашел какой-то код, созданный кем-то в lua, и изо всех сил пытался преобразовать его в java.Это может быть потому, что я либо недостаточно хорош в Java, либо из-за различий между языками.

У меня есть основной скрипт, который устанавливает окно и вызывает скрипт куба:

package Main;

import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JPanel;
import javax.swing.JFrame;

public class Main extends JPanel{

    public static void main(String[] args) {

        int width = 800;
        int height = 600;
        String title = "Test";

        JFrame display = new JFrame();
        display.setTitle(title);
        display.setSize(width, height);
        display.setVisible(true);
        display.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        display.setContentPane(new Main());
    }

    public Main() {
        setBackground(Color.black);
    }
    
    

    public void paintComponent(Graphics g) {
        Cube cube = new Cube();
        cube.paint(); // not sure how to call cube correctly!
    }
}

Однако я не думаю, что он правильно вызвал скрипт куба!

Затем я создал скрипт куба, который настраивает куб, однако естьрядом с цитатами найдено несколько ошибок.

package Main;

import java.awt.Color;
import java.awt.Graphics;
import java.util.*;

public class Cube {

	public int focalLength = 300;
	
	int[] Make3dPoint(int x, int y, int z) {
		int[] point = new int[3];
		point[0]=x;
		point[1]=y;
		point[2]=z;
		return point;
	}
	
	int[] Make2dPoint(int x, int y) {
		int[] point = new int[2];
		point[0]=x+240;
		point[1]=y+131;
		return point;
	}
	
	List Trans3dTo2d(ArrayList points[], ArrayList axisRotations[]) { // both arrays aren't being used!
		List TransformedPoints = new ArrayList();
		
		int sx = Math.sin(axisRotations.x); // Not finding x or y or z in any of these??
		int cx = Math.coz(axisRotations.x);
		int sy = Math.sin(axisRotations.y);
		int cy = Math.coz(axisRotations.y);
		int sz = Math.sin(axisRotations.z);
		int cz = Math.coz(axisRotations.z);
		
		int x;int y;int z;
		int xy = x*y;int xz = x*z;int yx = y*x;int yz = y*z;int zx = z*x;int zy = z*y; // coupling the variables! not sure if this is correct
		
		int i = points.length;
		while(i>0) {
			x = points[i].x; // again can't find x, y or z??
			y = points[i].y;
			z = points[i].z;
			
			xy = cx*y - sx*z;
			xz = sx*y + cx*z;
			
			yz = cy*xz - sy*x;
			yx = sy*xz + cy*x;
			
			zx = cz*yx - sz*xy;
			zy = sz*yx + cz*xy;
			
			int scaleRatio = focalLength/(focalLength + yz);
			
			x = zx*scaleRatio;
			y = zy*scaleRatio;
			
			TransformedPoints = new Make2dPoint(x,y); // not set up correctly??
			i=i-1;
		}
		
		return TransformedPoints;
	}
	List pointsArray;{  // making points in 3d space! wanted ";" but not sure if correct
		Make3dPoint(-50, -50, -50);
	    Make3dPoint(50, -50, -50);
	    Make3dPoint(50, -50, 50);
	    Make3dPoint(-50, -50, 50);
	    Make3dPoint(-50, 50, -50);
	    Make3dPoint(50, 50, -50);
	    Make3dPoint(50, 50, 50);
	    Make3dPoint(-50, 50, 50);
	}
	
	float UserX = (float) -0.01;
	float UserY = (float) 0.01;
	List cubeAxisRotation = make3dPoint(0,0,0);
	
	public void paint(Graphics g) {
		cubeAxisRotation.x = cubeAxisRotation.x + UserX; // again not recognising x or y value
		cubeAxisRotation.y = cubeAxisRotation.y + UserY;
		
		List sp = new Trans3dTo2d(pointsArray, cubeAxisRotation); // doesn't like this!
		
        g.setColor(Color.green);
        g.drawLine(sp[1].x, sp[1].y, sp[2].x, sp[2].y); // not recognising this in all lines! 
        g.drawLine(sp[2].x, sp[2].y, sp[3].x, sp[3].y);
        g.drawLine(sp[3].x, sp[3].y, sp[4].x, sp[4].y);
        g.drawLine(sp[4].x, sp[4].y, sp[1].x, sp[1].y);
        
        g.setColor(Color.red);
        g.drawLine(sp[5].x, sp[5].y, sp[6].x, sp[6].y);
        g.drawLine(sp[6].x, sp[6].y, sp[7].x, sp[7].y);
        g.drawLine(sp[7].x, sp[7].y, sp[8].x, sp[8].y);
        g.drawLine(sp[8].x, sp[8].y, sp[5].x, sp[5].y);
        
        g.setColor(Color.white);
        g.drawLine(sp[1].x, sp[1].y, sp[5].x, sp[5].y);
        g.drawLine(sp[2].x, sp[2].y, sp[6].x, sp[6].y);
        g.setColor(Color.blue);
        g.drawLine(sp[3].x, sp[3].y, sp[7].x, sp[7].y);
        g.drawLine(sp[4].x, sp[4].y, sp[8].x, sp[8].y);
	}
}

Я даже не знаю, будет ли работать метод рисования.Это произошло по ссылке, приведенной ниже.Я не копировал и не вставлял, так как распечатал и не смог найти его до сих пор, и на это ушло несколько часов.Это может дать лучшее представление о том, как это работает, и если кто-то захочет его использовать.

https://gist.github.com/Ipad41001/1335691

Я в основном застрял в работе с массивами и вызовом методов, простых вещей, но в то же время это трудно.

Спасибо за любую помощь!

:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...