Advertisement
Guest User

Untitled

a guest
Dec 17th, 2018
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.12 KB | None | 0 0
  1. package jraphics;
  2. import java.awt.*;
  3. import java.lang.management.ManagementFactory;
  4. import java.util.ArrayList;
  5. import java.util.Arrays;
  6.  
  7. import javax.swing.*;
  8.  
  9. public class Jraphics extends JPanel{
  10. static Mesh meshCube;
  11. static Mat4x4 matProj;
  12. static Jraphics panel;
  13. static long delta = 0;
  14. public static void main(String[] args) {
  15. final long startTime = System.nanoTime();
  16. JFrame.setDefaultLookAndFeelDecorated(true);
  17. JFrame frame = new JFrame("Graphics");
  18. frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  19. frame.setBackground(Color.white);
  20. frame.setSize(200,200);
  21.  
  22. panel = new Jraphics();
  23. frame.add(panel);
  24. frame.setVisible(true);
  25.  
  26.  
  27. meshCube = new Mesh();
  28. meshCube.tris.add(new Triangle(new Vector3(0.0,0.0,0.0), new Vector3(0.0,1.0,0.0), new Vector3(1.0,1.0,0.0)));
  29. meshCube.tris.add(new Triangle(new Vector3(0.0,0.0,0.0), new Vector3(1.0,1.0,0.0), new Vector3(1.0,0.0,0.0)));
  30.  
  31. meshCube.tris.add(new Triangle(new Vector3(1.0,0.0,0.0), new Vector3(1.0,1.0,0.0), new Vector3(1.0,1.0,1.0)));
  32. meshCube.tris.add(new Triangle(new Vector3(1.0,0.0,0.0), new Vector3(1.0,1.0,1.0), new Vector3(1.0,0.0,1.0)));
  33.  
  34. meshCube.tris.add(new Triangle(new Vector3(1.0,0.0,1.0), new Vector3(1.0,1.0,1.0), new Vector3(0.0,1.0,1.0)));
  35. meshCube.tris.add(new Triangle(new Vector3(1.0,0.0,1.0), new Vector3(0.0,1.0,1.0), new Vector3(0.0,0.0,1.0)));
  36.  
  37. meshCube.tris.add(new Triangle(new Vector3(0.0,0.0,1.0), new Vector3(0.0,1.0,1.0), new Vector3(0.0,1.0,0.0)));
  38. meshCube.tris.add(new Triangle(new Vector3(0.0,0.0,1.0), new Vector3(0.0,1.0,0.0), new Vector3(0.0,0.0,0.0)));
  39.  
  40. meshCube.tris.add(new Triangle(new Vector3(0.0,1.0,0.0), new Vector3(0.0,1.0,1.0), new Vector3(1.0,1.0,1.0)));
  41. meshCube.tris.add(new Triangle(new Vector3(0.0,1.0,0.0), new Vector3(1.0,1.0,1.0), new Vector3(1.0,1.0,0.0)));
  42.  
  43. meshCube.tris.add(new Triangle(new Vector3(1.0,0.0,1.0), new Vector3(0.0,0.0,1.0), new Vector3(0.0,0.0,0.0)));
  44. meshCube.tris.add(new Triangle(new Vector3(1.0,0.0,1.0), new Vector3(0.0,0.0,0.0), new Vector3(1.0,0.0,0.0)));
  45.  
  46. double fNear = 0.1;
  47. double fFar = 1000.0;
  48. double fFov = 90.0;
  49. double fAspectRatio = (double)panel.getSize().height / (double)panel.getSize().width;
  50. double fFovRad = 1.0 / Math.tan(fFov * 0.5 / 180.0 * 3.14159);
  51.  
  52. matProj = new Mat4x4();
  53. matProj.m[0][0] = fAspectRatio * fFovRad;
  54. matProj.m[1][1] = fFovRad;
  55. matProj.m[2][2] = fFar / (fFar - fNear);
  56. matProj.m[3][2] = (-fFar * fNear) / (fFar - fNear);
  57. matProj.m[2][3] = 1.0;
  58. matProj.m[3][3] = 0;
  59.  
  60. while(true) {
  61. if(System.nanoTime() % 100000000 == 0) {
  62. frame.repaint();
  63. }
  64. long cTime = System.nanoTime();
  65. delta = cTime - delta;
  66.  
  67. }
  68.  
  69. }
  70.  
  71.  
  72. @Override
  73. public void paintComponent(Graphics g) {
  74. g.setColor(Color.BLACK);
  75.  
  76. Mat4x4 matRotZ = new Mat4x4();
  77. Mat4x4 matRotX = new Mat4x4();
  78.  
  79. long fTheta = delta;
  80.  
  81. matRotZ.m[0][0] = Math.cos(fTheta);
  82. matRotZ.m[0][1] = Math.sin(fTheta);
  83. matRotZ.m[1][0] = - Math.sin(fTheta);
  84. matRotZ.m[1][1] = Math.cos(fTheta);
  85. matRotZ.m[2][2] = 1;
  86. matRotZ.m[3][3] = 1;
  87.  
  88. matRotX.m[0][0] = 1;
  89. matRotX.m[0][1] = Math.cos(fTheta * 0.5);
  90. matRotX.m[1][0] = Math.sin(fTheta * 0.5);
  91. matRotX.m[1][1] = - Math.sin(fTheta * 0.5);
  92. matRotX.m[2][2] = Math.cos(fTheta * 0.5);
  93. matRotX.m[3][3] = 1;
  94.  
  95.  
  96.  
  97. for(Triangle tri : meshCube.tris) {
  98. Triangle triProjected = new Triangle(new Vector3(0,0,0), new Vector3(0,0,0), new Vector3(0,0,0));
  99. Triangle triRotatedZ = new Triangle(new Vector3(0,0,0), new Vector3(0,0,0), new Vector3(0,0,0));
  100. Triangle triRotatedZX = new Triangle(new Vector3(0,0,0), new Vector3(0,0,0), new Vector3(0,0,0));
  101.  
  102. triRotatedZ.p.set(0, MultiplyMatrixVector(tri.p.get(0), matRotZ));
  103. triRotatedZ.p.set(1, MultiplyMatrixVector(tri.p.get(1), matRotZ));
  104. triRotatedZ.p.set(2, MultiplyMatrixVector(tri.p.get(2), matRotZ));
  105.  
  106. triRotatedZX.p.set(0, MultiplyMatrixVector(triRotatedZ.p.get(0), matRotX));
  107. triRotatedZX.p.set(1, MultiplyMatrixVector(triRotatedZ.p.get(1), matRotX));
  108. triRotatedZX.p.set(2, MultiplyMatrixVector(triRotatedZ.p.get(2), matRotX));
  109.  
  110. Triangle triTranslated = new Triangle(triRotatedZX.p.get(0), triRotatedZX.p.get(1), triRotatedZX.p.get(2));
  111.  
  112. triTranslated.p.get(0).z = triRotatedZX.p.get(0).z + 3.0;
  113. triTranslated.p.get(1).z = triRotatedZX.p.get(1).z + 3.0;
  114. triTranslated.p.get(2).z = triRotatedZX.p.get(2).z + 3.0;
  115.  
  116.  
  117.  
  118. triProjected.p.set(0, MultiplyMatrixVector(triTranslated.p.get(0), matProj));
  119. triProjected.p.set(1, MultiplyMatrixVector(triTranslated.p.get(1), matProj));
  120. triProjected.p.set(2, MultiplyMatrixVector(triTranslated.p.get(2), matProj));
  121.  
  122. triProjected.p.get(0).x += 1;
  123. triProjected.p.get(0).y += 1;
  124. triProjected.p.get(1).x += 1;
  125. triProjected.p.get(1).y += 1;
  126. triProjected.p.get(2).x += 1;
  127. triProjected.p.get(2).y += 1;
  128.  
  129. triProjected.p.get(0).x *= 0.5 * (double) panel.getSize().width;
  130. triProjected.p.get(0).y *= 0.5 * (double) panel.getSize().height;
  131. triProjected.p.get(1).x *= 0.5 * (double) panel.getSize().width;
  132. triProjected.p.get(1).y *= 0.5 * (double) panel.getSize().height;
  133. triProjected.p.get(2).x *= 0.5 * (double) panel.getSize().width;
  134. triProjected.p.get(2).y *= 0.5 * (double) panel.getSize().height;
  135.  
  136.  
  137. int[] xPoints = {(int)triProjected.p.get(0).x, (int)triProjected.p.get(1).x, (int)triProjected.p.get(2).x};
  138. int[] yPoints = {(int)triProjected.p.get(0).y, (int)triProjected.p.get(1).y, (int)triProjected.p.get(2).y};
  139. g.drawPolygon(xPoints, yPoints, 3);
  140.  
  141.  
  142. }
  143.  
  144. }
  145.  
  146. public static Vector3 MultiplyMatrixVector(Vector3 i, Mat4x4 m) {
  147. Vector3 o = new Vector3(i.x,i.y,i.z);
  148. o.x = i.x * m.m[0][0] + i.y * m.m[1][0] + i.z * m.m[2][0] + m.m[3][0];
  149. o.y = i.x * m.m[0][1] + i.y * m.m[1][1] + i.z * m.m[2][1] + m.m[3][1];
  150. o.z = i.x * m.m[0][2] + i.y * m.m[1][2] + i.z * m.m[2][2] + m.m[3][2];
  151. double w = i.x * m.m[0][3] + i.y * m.m[1][3] + i.z * m.m[2][3] + m.m[3][3];
  152.  
  153. if(w != 0) {
  154. o.x /= w; o.y /= w; o.z/= w;
  155. }
  156. return o;
  157. }
  158. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement