feat(model): 添加模型姿态管理系统- 新增 ModelPose 类用于管理模型部件的姿态数据
- 在 Model2D 中实现姿态保存、应用和混合功能- 支持姿态的序列化和反序列化 - 添加日志记录替代原有的 System.out 和 System.err 输出-优化网格和模型部件的调试信息输出 - 引入 PartPoseData 和 PoseData用于姿态数据持久化- 实现姿态间的平滑过渡和插值计算 - 增加默认姿态初始化和管理机制
This commit is contained in:
@@ -11,6 +11,8 @@ import org.joml.Vector2f;
|
||||
import org.joml.Vector4f;
|
||||
import org.lwjgl.opengl.*;
|
||||
import org.lwjgl.system.MemoryUtil;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import java.nio.ByteBuffer;
|
||||
import java.nio.FloatBuffer;
|
||||
@@ -25,7 +27,7 @@ import static org.lwjgl.opengl.GL20.glGetUniformLocation;
|
||||
* @author tzdwindows 7
|
||||
*/
|
||||
public final class ModelRender {
|
||||
|
||||
private static final Logger logger = LoggerFactory.getLogger(ModelRender.class);
|
||||
private ModelRender() { /* no instances */ }
|
||||
|
||||
// ================== 全局状态 ==================
|
||||
@@ -33,8 +35,8 @@ public final class ModelRender {
|
||||
private static int viewportWidth = 800;
|
||||
private static int viewportHeight = 600;
|
||||
private static final Vector4f CLEAR_COLOR = new Vector4f(0.0f, 0.0f, 0.0f, 1.0f);
|
||||
private static boolean enableDepthTest = false;
|
||||
private static boolean enableBlending = true;
|
||||
private static final boolean enableDepthTest = false;
|
||||
private static final boolean enableBlending = true;
|
||||
|
||||
// 着色器与资源
|
||||
private static final Map<String, ShaderProgram> shaderMap = new HashMap<>();
|
||||
@@ -80,7 +82,7 @@ public final class ModelRender {
|
||||
int loc = glGetUniformLocation(programId, k);
|
||||
if (loc == -1) {
|
||||
// debug 时可以打开
|
||||
// System.err.println("Warning: uniform not found: " + k);
|
||||
logger.warn("Warning: uniform not found: {}", k);
|
||||
}
|
||||
return loc;
|
||||
});
|
||||
@@ -271,7 +273,7 @@ public final class ModelRender {
|
||||
public static synchronized void initialize() {
|
||||
if (initialized) return;
|
||||
|
||||
System.out.println("Initializing ModelRender...");
|
||||
logger.info("Initializing ModelRender...");
|
||||
|
||||
// 需要在外部创建 OpenGL 上下文并调用 GL.createCapabilities()
|
||||
logGLInfo();
|
||||
@@ -283,7 +285,7 @@ public final class ModelRender {
|
||||
try {
|
||||
compileDefaultShader();
|
||||
} catch (RuntimeException ex) {
|
||||
System.err.println("Failed to compile default shader: " + ex.getMessage());
|
||||
logger.error("Failed to compile default shader: {}", ex.getMessage());
|
||||
throw ex;
|
||||
}
|
||||
|
||||
@@ -294,14 +296,14 @@ public final class ModelRender {
|
||||
GL11.glViewport(0, 0, viewportWidth, viewportHeight);
|
||||
|
||||
initialized = true;
|
||||
System.out.println("ModelRender initialized successfully");
|
||||
logger.info("ModelRender initialized successfully");
|
||||
}
|
||||
|
||||
private static void logGLInfo() {
|
||||
System.out.println("OpenGL Vendor: " + GL11.glGetString(GL11.GL_VENDOR));
|
||||
System.out.println("OpenGL Renderer: " + GL11.glGetString(GL11.GL_RENDERER));
|
||||
System.out.println("OpenGL Version: " + GL11.glGetString(GL11.GL_VERSION));
|
||||
System.out.println("GLSL Version: " + GL20.glGetString(GL20.GL_SHADING_LANGUAGE_VERSION));
|
||||
logger.info("OpenGL Vendor: {}", GL11.glGetString(GL11.GL_VENDOR));
|
||||
logger.info("OpenGL Renderer: {}", GL11.glGetString(GL11.GL_RENDERER));
|
||||
logger.info("OpenGL Version: {}", GL11.glGetString(GL11.GL_VERSION));
|
||||
logger.info("GLSL Version: {}", GL20.glGetString(GL20.GL_SHADING_LANGUAGE_VERSION));
|
||||
}
|
||||
|
||||
private static void uploadLightsToShader(ShaderProgram sp, Model2D model) {
|
||||
@@ -438,7 +440,7 @@ public final class ModelRender {
|
||||
public static synchronized void cleanup() {
|
||||
if (!initialized) return;
|
||||
|
||||
System.out.println("Cleaning up ModelRender...");
|
||||
logger.info("Cleaning up ModelRender...");
|
||||
|
||||
// mesh resources
|
||||
for (MeshGLResources r : meshResources.values()) r.dispose();
|
||||
@@ -456,7 +458,7 @@ public final class ModelRender {
|
||||
}
|
||||
|
||||
initialized = false;
|
||||
System.out.println("ModelRender cleaned up");
|
||||
logger.info("ModelRender cleaned up");
|
||||
}
|
||||
|
||||
// ================== 渲染流程 (已修改) ==================
|
||||
@@ -790,7 +792,7 @@ public final class ModelRender {
|
||||
private static void checkGLError(String op) {
|
||||
int e = GL11.glGetError();
|
||||
if (e != GL11.GL_NO_ERROR) {
|
||||
System.err.println("OpenGL error during " + op + ": " + getGLErrorString(e));
|
||||
logger.error("OpenGL error during {}: {}", op, getGLErrorString(e));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user