Мне трудно понять, как загружать объекты во время выполнения. Я перепробовал много методов, но мне нужна помощь. вот код - это небольшой движок, который я встроил в себя, чтобы он сформировался примерно за несколько часов. Это похоже на мой первый настоящий Java-проект, поэтому у меня нет особых навыков, и я много катаюсь на онлайн-форумах в поисках алгоритмов.
Вот ВЕСЬ код, начинающийся с трёх важных файлов:
Main.java:
package neptunian_engine;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Main {
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> {
JFrame frame = new JFrame("3D Engine");
Scene scene = new Scene();
Camera camera = new Camera(new Vector3D(0, 0, 5), new Vector3D(0, 0, 0));
Renderer renderer = new Renderer(scene, camera);
SoundBox soundbox = new SoundBox(); // Initialize your SoundBox and load sounds
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(800, 600);
frame.add(renderer);
frame.setVisible(true);
// Add a sample object
try {
Object3D object = ObjLoader.loadObj("Guard_torso.obj"); // Ensure the file path is correct
Object3D object2 = ObjLoader.loadObj("test1.obj"); // Ensure the file path is correct
scene.addObject(object);
scene.addObject(object2);
} catch (Exception e) {
e.printStackTrace();
}
// Camera controls
CameraController cameraController = new CameraController(camera, soundbox);
MouseController mouseController = new MouseController(camera);
renderer.addKeyListener(cameraController);
renderer.addMouseMotionListener(mouseController);
renderer.setFocusable(true);
renderer.requestFocusInWindow();
// Timer to update the scene
Timer timer = new Timer(16, e -> {
cameraController.updateCameraMovement();
renderer.repaint();
});
timer.start();
});
}
}
package neptunian_engine;
import java.util.ArrayList;
import java.util.List;
public class Scene {
private List objects;
public Scene() {
objects = new ArrayList();
}
public void addObject(Object3D object) {
objects.add(object);
}
public List getObjects() {
return objects;
}
}
package neptunian_engine;
import java.util.Vector;
public class Physics {
public void velocity3D (){
// add all the junk so I can have my HEADCRABS idk
}
}
}
Я пробовал так много вещей
слои хэш-карты
Программа чтения файлов, но я ничего не мог понять и отказываюсь испачкать свой код с помощью чата
тоже камера не работает.
Мне трудно понять, как загружать объекты во время выполнения. Я перепробовал много методов, но мне нужна помощь. вот код - это небольшой движок, который я встроил в себя, чтобы он сформировался примерно за несколько часов. Это похоже на мой первый настоящий Java-проект, поэтому у меня нет особых навыков, и я много катаюсь на онлайн-форумах в поисках алгоритмов. Вот ВЕСЬ код, начинающийся с трёх важных файлов: Main.java: [code]package neptunian_engine;
public class Main { public static void main(String[] args) { SwingUtilities.invokeLater(() -> { JFrame frame = new JFrame("3D Engine"); Scene scene = new Scene(); Camera camera = new Camera(new Vector3D(0, 0, 5), new Vector3D(0, 0, 0)); Renderer renderer = new Renderer(scene, camera); SoundBox soundbox = new SoundBox(); // Initialize your SoundBox and load sounds
// Add a sample object try { Object3D object = ObjLoader.loadObj("Guard_torso.obj"); // Ensure the file path is correct Object3D object2 = ObjLoader.loadObj("test1.obj"); // Ensure the file path is correct scene.addObject(object); scene.addObject(object2); } catch (Exception e) { e.printStackTrace(); }
// Camera controls CameraController cameraController = new CameraController(camera, soundbox); MouseController mouseController = new MouseController(camera);
// Timer to update the scene Timer timer = new Timer(16, e -> { cameraController.updateCameraMovement(); renderer.repaint(); }); timer.start(); }); } }
public class ObjLoader { public static Object3D loadObj(String filename) throws IOException { List vertices = new ArrayList(); List faces = new ArrayList(); BufferedReader reader = new BufferedReader(new FileReader(filename)); String line; while ((line = reader.readLine()) != null) { if (line.startsWith("v ")) { String[] parts = line.split(" "); float x = Float.parseFloat(parts[1]); float y = Float.parseFloat(parts[2]); float z = Float.parseFloat(parts[3]); vertices.add(new Vector3D(x, y, z)); } else if (line.startsWith("f ")) { String[] parts = line.split(" "); int[] face = new int[parts.length - 1]; for (int i = 1; i < parts.length; i++) { face[i - 1] = Integer.parseInt(parts[i].split("/")[0]) - 1; // assuming faces are 1-indexed } faces.add(face); } } reader.close(); return new Object3D(vertices, faces); } }
private void drawObject(Graphics g, Object3D object) { List vertices = object.getVertices(); List faces = object.getFaces(); Random rand = new Random();
for (int[] face : faces) { Polygon polygon = new Polygon(); for (int vertexIndex : face) { Vector3D vertex = vertices.get(vertexIndex); int x = (int) ((vertex.x + object.getPosition().x) * 100 + getWidth() / 2); int y = (int) ((-vertex.y - object.getPosition().y) * 100 + getHeight() / 2); polygon.addPoint(x, y); } g.setColor(new Color(rand.nextFloat(), rand.nextFloat(), rand.nextFloat())); g.fillPolygon(polygon); } } }
public SoundBox() { this.soundMap = new HashMap(); // Initialize sound loaders here loadSound("Gunfire", "sound_effects/Beefy-custom-rife.wav"); // guns //loadSound("Gunfire2", "sound_effects/Beefy-custom-rife.wav"); // Example sound // Add more sounds here in a list }
private void loadSound(String soundName, String filePath) { try { File soundFile = new File(filePath); if (!soundFile.exists()) { throw new FileNotFoundException("File not found: " + filePath); }
public void loadAnimation(String name, String filePath) { List keyframes = new ArrayList(); float duration = 0; float ticksPerSecond = 24; List transforms = new ArrayList();
try (BufferedReader br = new BufferedReader(new FileReader(filePath))) { String line; while ((line = br.readLine()) != null) { String[] tokens = line.split(" "); switch (tokens[0]) { case "duration": duration = Float.parseFloat(tokens[1]); break; case "ticks_per_second": ticksPerSecond = Float.parseFloat(tokens[1]); break; case "bone": // No operation, handled below in keyframe break; case "keyframe": float time = Float.parseFloat(tokens[1]); float px = Float.parseFloat(tokens[2]); float py = Float.parseFloat(tokens[3]); float pz = Float.parseFloat(tokens[4]); float qx = Float.parseFloat(tokens[5]); float qy = Float.parseFloat(tokens[6]); float qz = Float.parseFloat(tokens[7]); float qw = Float.parseFloat(tokens[8]); Vector3D position = new Vector3D(px, py, pz); Quaternion rotation = new Quaternion(qx, qy, qz, qw); transforms.add(Matrix4x4.fromPositionRotation(position, rotation)); keyframes.add(new Keyframe(time, new ArrayList(transforms))); transforms.clear(); break; } } } catch (IOException e) { e.printStackTrace(); }
Animation animation = new Animation(name, keyframes, duration); animations.put(name, animation); }
public void play(String animationName, float deltaTime) { Animation animation = animations.get(animationName); if (animation == null) { System.out.println("Animation not found: " + animationName); return; }
animationTime += deltaTime; if (animationTime > animation.duration) { animationTime = 0; // Loop the animation }
List boneTransforms = animation.getTransformsAtTime(animationTime); skeleton.applyPose(boneTransforms); }
// Class definitions public static class Matrix4x4 { // Placeholder for matrix data and operations public static Matrix4x4 identity() { return new Matrix4x4(); }
public static Matrix4x4 fromPositionRotation(Vector3D position, Quaternion rotation) { return new Matrix4x4(); }
public Matrix4x4 multiply(Matrix4x4 other) { return new Matrix4x4(); }
public void set(Matrix4x4 other) { // Set this matrix to the values of the other matrix } }
public static class Vector3D { public float x, y, z;
public Vector3D(float x, float y, float z) { this.x = x; this.y = y; this.z = z; } }
public static class Quaternion { public float x, y, z, w;
public Skeleton(List bones) { this.bones = bones; }
public void applyPose(List boneTransforms) { for (int i = 0; i < bones.size(); i++) { Bone bone = bones.get(i); if (bone.parentIndex >= 0) { boneTransforms.get(i).set(boneTransforms.get(bone.parentIndex).multiply(Matrix4x4.fromPositionRotation(bone.position, bone.rotation))); } else { boneTransforms.get(i).set(Matrix4x4.fromPositionRotation(bone.position, bone.rotation)); } } } }
public static class Keyframe { public float time; public List transforms;
public Keyframe(float time, List transforms) { this.time = time; this.transforms = transforms; } }
public static class Animation { public String name; public List keyframes; public float duration;
public Animation(String name, List keyframes, float duration) { this.name = name; this.keyframes = keyframes; this.duration = duration; }
public List getTransformsAtTime(float time) { // Interpolate between keyframes to get bone transforms at the given time // This is a simplified example, actual interpolation logic should be implemented Keyframe current = keyframes.get(0); for (Keyframe kf : keyframes) { if (kf.time > time) break; current = kf; } return current.transforms; } } }
// add all the junk so I can have my HEADCRABS idk
}
}
}
[/code] Я пробовал так много вещей слои хэш-карты Программа чтения файлов, но я ничего не мог понять и отказываюсь испачкать свой код с помощью чата тоже камера не работает.
Я наполовину закончил изучение C++, но не понимаю, как превратить этот код в приложение. Например, в HTML вы можете сохранить его как (имя).html, чтобы превратить его в веб-сайт. Тогда как превратить C++ в приложение?
Кстати, я использую кодовые...
Я работаю над оптимизацией приложения Spring Boot, загружая зависимости во время выполнения, а не упаковывая их в окончательный JAR-файл. Хотя я успешно реализовал механизм загрузки, Spring Boot не может распознать эти динамически загружаемые...
Можно ли хранить структурированные данные в Dabase, используя C# и .NET Core, если вы знаете структуру во время выполнения? Как только данные в памяти, как я могу сохранить их в базе данных, основываясь на структуре в памяти?
Можно ли хранить структурированные данные в базе данных, используя C# и .net Core, если вы знаете структуру во время выполнения? Как только данные в памяти, как я могу сохранить их в базе данных, основываясь на структуре в памяти?
Может ли кто-нибудь помочь создать веб-сайт, на который пользователи будут загружать видео или что-то в этом роде, и если они дадут разрешение, я загружу их на популярный веб-сайт, например, на Facebook или YouTube. Пожалуйста, дайте решение на...