# OpenGL **Repository Path**: danni505/OpenGL3D ## Basic Information - **Project Name**: OpenGL - **Description**: 这个是学习工程,OpenGL+GLFW实现简单的图形创建示例 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-10-29 - **Last Updated**: 2025-11-01 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # OpenGL 3.3 + GLFW项目 这是一个基于OpenGL 3.3 + GLFWl的示例和学习项目。 ## 可执行方式1:终端执行 java -jar target/opengl-demos.jar 注意: 1、 Mac OS you need to specify the `-XstartOnFirstThread` JVM argument, so the above becomes: java -XstartOnFirstThread -jar target/opengl-demos-1.0.0.jar 2、如果需要override main class,则 java -XstartOnFirstThread -cp target/opengl-demos-1.0.0.jar org.lwjgl.demo.OpenGL ## 可执行方式2:IDEA中执行 run 时候配置`-XstartOnFirstThread` JVM argument ## demo示例的设计思路: 1、架构图 ![输入图片说明](md/image.png) 根据对象的分类进行构建,具体大的步骤: 先构建基础需要用的对象,主要有三个几何物理、星空背景类、灯光; 再构建着色器类、相机类、几何体类; 再在主函数中,创建出OpenGL的窗口、在窗口中初始化上面定义的资源并添加3D效果; 最后设计退出触发,资源清理方法,并被main函数调用。 ` 3DScene/ ├── src/ │ ├── Main.java │ ├── ShaderProgram.java │ ├── ShaderUtils.java ← 新增的着色器工具类 │ ├── Camera.java │ ├── Mesh.java │ └── geometries/ │ ├── Cube.java │ ├── Sphere.java │ └── Cylinder.java ├── src/resources/ ← 资源目录 │ └── shaders/ │ ├── vertex.glsl ← 从文件读取 │ └── fragment.glsl ← 从文件读取 └── pom.xml ` 2、功能列表 (1)3D 场景搭建 使用 GLFW + GLAD(或 FreeGLUT)搭建 OpenGL 窗口 渲染一个 3D 场景(如房间、简单地形、太阳系等) 至少包含 3 种不同的几何体(立方体、球体、圆柱等) (2) 光照与材质 实现 Phong 光照模型(环境光 + 漫反射 + 镜面反射) 至少 2 个点光源/平行光,可调整颜色和强度 (3)纹理映射 为物体应用 纹理贴图(如木箱、砖墙、天空盒等) (4)相机控制 实现 第一人称/第三人称相机(WASD 移动 + 鼠标旋转视角) 3、实现的功能: GLFW + OpenGL 窗口系统 - 跨平台的图形窗口 现代着色器渲染 - 使用 GLSL 330 核心配置 三种几何体 - 立方体、球体、圆柱体 星空背景 - 1000颗随机分布的星星 相机系统 - 支持鼠标视角控制 动画效果 - 几何体自动旋转 macOS 兼容 - 解决了线程和 OpenGL 上下文问题 Phong 光照模型 - 环境光 + 漫反射 + 镜面反射 两个点光源系统 - 可实时调整颜色和强度 纹理映射 - 木箱、球体、圆柱体各具特色 第一人称相机 - WASD移动 + 鼠标视角控制 三种几何体 - 立方体、球体、圆柱体 星空背景 - 完整的3D场景 4、解决的技术难点: macOS 上的 -XstartOnFirstThread 配置 OpenGL 核心配置与兼容性 着色器编译和链接 顶点数组对象管理 矩阵变换和相机系统 5、控制功能: WASD - 相机移动 鼠标 - 视角旋转 1/2键 - 调整光源1强度 3/4键 - 调整光源2强度 R键 - 切换光源旋转 ESC - 退出程序