|
1 | 1 | <!DOCTYPE html> |
2 | 2 | <html lang="en"> |
3 | 3 | <head> |
4 | | - <meta charset="UTF-8"> |
5 | | - <meta name="viewport" content="width=device-width, initial-scale=1.0"> |
6 | | - <title>Machine Learning Compatible Game Engine Lab - GitHub Pages</title> |
7 | | - <meta name="description" content="Research lab for experimental graphics, simulation loops, editor tooling, and C++/OpenGL rendering engines moving toward ML-agent compatibility."> |
8 | | - <link rel="preconnect" href="https://fonts.googleapis.com"> |
9 | | - <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> |
10 | | - <link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&family=Outfit:wght@400;500;600;700;800&display=swap" rel="stylesheet"> |
11 | | - <link rel="stylesheet" href="assets/styles.css"> |
| 4 | + <meta charset="UTF-8"> |
| 5 | + <meta name="viewport" content="width=device-width, initial-scale=1.0"> |
| 6 | + <meta name="theme-color" content="#ead8ca"> |
| 7 | + <meta name="description" content="A C++ and OpenGL research lab for simulation, rendering, editor tooling, and game-engine interfaces designed with machine-learning agents in mind."> |
| 8 | + <title>Machine Learning-Compatible Game Engine Lab</title> |
| 9 | + <link rel="preconnect" href="https://fonts.googleapis.com"> |
| 10 | + <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> |
| 11 | + <link href="https://fonts.googleapis.com/css2?family=Caveat:wght@500;600;700&family=Inter:wght@400;500;600;700;800&family=Source+Serif+4:opsz,wght@8..60,500;8..60,650&display=swap" rel="stylesheet"> |
| 12 | + <link rel="stylesheet" href="assets/styles.css"> |
12 | 13 | </head> |
13 | | -<body> |
14 | | - <header class="navbar"> |
15 | | - <div class="nav-container"> |
16 | | - <a href="https://dragosandreibobu.github.io" class="nav-brand-back"> |
17 | | - ← <span class="brand-text">Personal Hub</span> |
18 | | - </a> |
19 | | - <div class="nav-org-title">Machine Learning Compatible Game Engine Lab</div> |
20 | | - <nav class="nav-links"> |
21 | | - <a href="#mission">About</a> |
22 | | - <a href="#connections">Network</a> |
23 | | - <a href="#projects">Work</a> |
24 | | - <a href="#docs">Notes</a> |
25 | | - <a href="https://github.com/Machine-Learning-Compatible-Game-Engine" target="_blank" class="nav-btn">GitHub</a> |
26 | | - </nav> |
27 | | - </div> |
28 | | - </header> |
| 14 | +<body style="--accent:#b57555;--accent-deep:#80503b;--accent-soft:#ead8ca"> |
| 15 | + <a class="skip-link" href="#main">Skip to content</a> |
| 16 | + <header class="topbar"> |
| 17 | + <div class="topbar-inner"> |
| 18 | + <a class="back-link" href="https://dragosandreibobu.github.io">← Personal portfolio</a> |
| 19 | + <div class="site-name">MLCGE Lab</div> |
| 20 | + <nav class="nav" aria-label="Primary navigation"> |
| 21 | + <a href="#projects">Projects</a><a href="#notes">Notes</a><a class="github-link" href="https://github.com/Machine-Learning-Compatible-Game-Engine" target="_blank" rel="noreferrer">GitHub</a> |
| 22 | + </nav> |
| 23 | + </div> |
| 24 | + </header> |
29 | 25 |
|
30 | | - <main class="container"> |
31 | | - <!-- Hero --> |
32 | | - <section id="mission" class="hero-section"> |
33 | | - <div class="hero-glow"></div> |
34 | | - <span class="badge">Graphics research lab</span> |
35 | | - <h1 class="hero-title">Machine Learning Compatible Game Engine Lab</h1> |
36 | | - <p class="hero-bio">A C++/OpenGL playground for small engines, renderers, editor tools, and simulation.</p> |
37 | | - </section> |
| 26 | + <main id="main" class="workspace"> |
| 27 | + <section class="hero" aria-labelledby="site-title"> |
| 28 | + <article class="hero-paper"> |
| 29 | + <p class="badge">Graphics and simulation research</p> |
| 30 | + <h1 id="site-title">Machine Learning-Compatible <span>Game Engine</span></h1> |
| 31 | + <p class="hero-summary">A C++ and OpenGL playground for reusable rendering, simulation loops, editor tooling, and environments that can eventually expose clean observation and action interfaces to machine-learning agents.</p> |
| 32 | + <div class="hero-actions"><a class="button button-primary" href="#projects">Explore projects</a><a class="button button-secondary" href="https://github.com/Machine-Learning-Compatible-Game-Engine/full-suite" target="_blank" rel="noreferrer">Open main project ↗</a></div> |
| 33 | + <p class="hero-note">Simulation first. Agents as first-class users.</p> |
| 34 | + </article> |
| 35 | + <article class="hero-visual" aria-label="Visual summary"> |
| 36 | + <div class="visual-top"><span>Workspace overview</span><span aria-hidden="true">● ● ●</span></div> |
| 37 | + <div class="visual-content"><div class="illustration cube-scene" aria-hidden="true"><div class="axis-lines"></div><div class="cube"><span class="front"></span><span class="back"></span><span class="right"></span><span class="left"></span><span class="top"></span><span class="bottom"></span></div></div></div> |
| 38 | + <div class="visual-label"><strong>Render · simulate · expose</strong><span>A small engine architecture shaped around explicit state, actions, and reusable components.</span></div> |
| 39 | + </article> |
| 40 | + </section> |
38 | 41 |
|
39 | | - <!-- Connection --> |
40 | | - <section id="connections" class="info-card-section"> |
41 | | - <div class="info-card"> |
42 | | - <h3>Connected work</h3> |
43 | | - <p>Connects graphics experiments with teaching tools, AI exploration, and computer-science work.</p> |
44 | | - <div class="related-orgs"> |
45 | | - <strong>Related organizations:</strong> |
46 | | - <div class="related-links"> |
47 | | - <a href="https://DigitalChalkLab.github.io" class="related-link">DigitalChalkLab</a> <a href="https://Hyperspace-Intelligence.github.io" class="related-link">Hyperspace-Intelligence</a> <a href="https://UAIC-BSc-ComputerScience.github.io" class="related-link">UAIC-BSc-ComputerScience</a> |
48 | | - </div> |
49 | | - </div> |
50 | | - </div> |
51 | | - </section> |
| 42 | + <section class="workbench" aria-label="Context and facts"> |
| 43 | + <article class="connection-card"><p class="badge">Connected work</p><h2 class="object-heading">Part of a wider desk.</h2><p>The lab combines Computer Science foundations, graphics experiments, software architecture, and machine-learning questions while remaining small enough to understand and rebuild.</p><div class="related-links"><a href="https://UAIC-BSc-ComputerScience.github.io" target="_blank" rel="noreferrer">Computer Science archive</a><a href="https://curricula-live.github.io" target="_blank" rel="noreferrer">curricula.live</a><a href="https://dragosandreibobu.github.io" target="_blank" rel="noreferrer">Personal portfolio</a></div></article> |
| 44 | + <aside class="facts-card"><p class="badge">At a glance</p><h2 class="object-heading">Working notes</h2><dl class="facts"><div><dt>Core</dt><dd>C++ · OpenGL · rendering and simulation loops</dd></div><div><dt>Interface goal</dt><dd>Explicit observations · actions · resets · rewards</dd></div><div><dt>Origin</dt><dd>BSc thesis and independent engine experiments</dd></div><div><dt>Direction</dt><dd>Web-facing demos, reusable modules, and ML bridges</dd></div></dl></aside> |
| 45 | + </section> |
52 | 46 |
|
53 | | - <!-- Projects grid --> |
54 | | - <section id="projects" class="section"> |
55 | | - <div class="section-header"> |
56 | | - <h2 class="section-title">Projects</h2> |
57 | | - <p class="section-desc">Focused prototypes for rendering, interaction, and simulation.</p> |
58 | | - <div class="filters"> |
59 | | - <button class="filter-btn active" data-filter="all">All</button> |
60 | | - <button class="filter-btn" data-filter="active">Active</button> |
61 | | - <button class="filter-btn" data-filter="research">Research</button> |
62 | | - <button class="filter-btn" data-filter="teaching">Teaching</button> |
63 | | - <button class="filter-btn" data-filter="archived">Archived</button> |
64 | | - </div> |
65 | | - </div> |
66 | | - <div class="projects-grid" id="projects-container"> |
67 | | - <!-- Dynamically populated --> |
68 | | - </div> |
69 | | - </section> |
| 47 | + <section id="projects" class="section" aria-labelledby="projects-heading"> |
| 48 | + <div class="section-heading"><p class="badge">Project notebook</p><h2 id="projects-heading">Selected work</h2><p>Repositories and experiments presented with clear status, scope, and technical context.</p><div class="filters" role="group" aria-label="Filter projects"><button class="filter-btn active" data-filter="all" aria-pressed="true">All</button><button class="filter-btn" data-filter="active" aria-pressed="false">Active</button><button class="filter-btn" data-filter="research" aria-pressed="false">Research</button><button class="filter-btn" data-filter="teaching" aria-pressed="false">Teaching</button><button class="filter-btn" data-filter="archive" aria-pressed="false">Archive</button></div></div> |
| 49 | + <div class="projects-ledger"><div class="projects-grid" id="projects-container"></div></div> |
| 50 | + </section> |
70 | 51 |
|
71 | | - <!-- Docs standard --> |
72 | | - <section id="docs" class="section"> |
73 | | - <div class="section-header"> |
74 | | - <h2 class="section-title">Reference notes</h2> |
75 | | - <p class="section-desc">Short records for context, architecture, planning, and standards.</p> |
76 | | - </div> |
77 | | - <div class="docs-grid"> |
78 | | - <a href="docs/overview.md" class="doc-card"> |
79 | | - <h4>Overview & Context</h4> |
80 | | - <p>Comprehensive description of this workspace's mission and targets.</p> |
81 | | - </a> |
82 | | - <a href="docs/architecture.md" class="doc-card"> |
83 | | - <h4>Architecture & Topology</h4> |
84 | | - <p>Internal software architecture and design pattern guidelines.</p> |
85 | | - </a> |
86 | | - <a href="docs/roadmap.md" class="doc-card"> |
87 | | - <h4>Ecosystem Roadmap</h4> |
88 | | - <p>Milestones, feature integrations, and future project phases.</p> |
89 | | - </a> |
90 | | - <a href="docs/projects.md" class="doc-card"> |
91 | | - <h4>Project Catalog Specification</h4> |
92 | | - <p>Detailed technical inventory of code repositories.</p> |
93 | | - </a> |
94 | | - <a href="docs/documentation-standard.md" class="doc-card"> |
95 | | - <h4>Engineering Standards</h4> |
96 | | - <p>Source directory structures, naming schemes, and git flow rules.</p> |
97 | | - </a> |
98 | | - </div> |
99 | | - </section> |
100 | | - </main> |
| 52 | + <section id="notes" class="section" aria-labelledby="notes-heading"> |
| 53 | + <div class="section-heading"><p class="badge">Reference notes</p><h2 id="notes-heading">Context before code.</h2><p>Short documentation records covering architecture, scope, planning, and engineering standards.</p></div> |
| 54 | + <div class="docs-note"><div class="docs-grid"><a class="doc-card" href="docs/overview.md"><h3>Overview & context</h3><p>Mission, scope, and how this workspace fits the broader ecosystem.</p></a><a class="doc-card" href="docs/architecture.md"><h3>Architecture & topology</h3><p>Design boundaries, components, and technical decisions.</p></a><a class="doc-card" href="docs/roadmap.md"><h3>Roadmap</h3><p>Milestones, pending work, and future directions.</p></a><a class="doc-card" href="docs/projects.md"><h3>Project catalog</h3><p>A structured inventory of repositories and experiments.</p></a><a class="doc-card" href="docs/documentation-standard.md"><h3>Documentation standard</h3><p>Conventions for readable repositories, Git workflow, and technical notes.</p></a></div></div> |
| 55 | + </section> |
| 56 | + </main> |
101 | 57 |
|
102 | | - <footer class="footer"> |
103 | | - <div class="footer-container"> |
104 | | - <p>Part of the Dragoș-Andrei Bobu project ecosystem • <a href="https://dragosandreibobu.github.io">https://dragosandreibobu.github.io</a></p> |
105 | | - <p><a href="https://github.com/Machine-Learning-Compatible-Game-Engine" target="_blank">GitHub Organization</a></p> |
106 | | - </div> |
107 | | - </footer> |
| 58 | + <footer class="footer"><p>Part of the Dragoș-Andrei Bobu project ecosystem · 2026</p><p><a href="https://dragosandreibobu.github.io">Personal portfolio</a> · <a href="https://github.com/Machine-Learning-Compatible-Game-Engine" target="_blank" rel="noreferrer">GitHub organization</a></p></footer> |
108 | 59 |
|
109 | | - <script> |
110 | | - const projects = [ |
| 60 | + <script> |
| 61 | + const projects = [ |
111 | 62 | { |
112 | | - "name": "Machine Learning Compatible Game Engine (full-suite)", |
113 | | - "slug": "mlcge-full-suite", |
114 | | - "organization": "Machine-Learning-Compatible-Game-Engine", |
115 | | - "status": "Research / Thesis", |
116 | | - "summary": "Experimental graphics suite combining a C++/OpenGL rendering core, PyQt editor interface, and simulation loops prepared for future ML-agent bridges.", |
| 63 | + "name": "Machine Learning-Compatible Game Engine — full suite", |
| 64 | + "status": "Research Thesis", |
| 65 | + "summary": "A modular C++ engine combining rendering, simulation environments, editor tooling, and reusable interfaces intended to support future machine-learning agent integration.", |
117 | 66 | "repo": "https://github.com/Machine-Learning-Compatible-Game-Engine/full-suite", |
118 | 67 | "live": "", |
119 | 68 | "tags": [ |
120 | 69 | "C++", |
121 | 70 | "OpenGL", |
122 | 71 | "PyQt", |
123 | | - "Game Engine", |
124 | | - "Simulation" |
125 | | - ], |
126 | | - "related": [ |
127 | | - "DigitalChalkLab", |
128 | | - "Hyperspace-Intelligence", |
129 | | - "UAIC-BSc-ComputerScience" |
| 72 | + "Simulation", |
| 73 | + "Architecture" |
130 | 74 | ] |
131 | 75 | }, |
132 | 76 | { |
133 | 77 | "name": "supEngine", |
134 | | - "slug": "sup-engine", |
135 | | - "organization": "Machine-Learning-Compatible-Game-Engine", |
136 | | - "status": "Active / Research", |
137 | | - "summary": "Focused C++/FreeGLUT engine prototype supporting primitive drawing, simple component-based game objects, and input layers.", |
| 78 | + "status": "Active Research", |
| 79 | + "summary": "A focused C++ and FreeGLUT prototype for primitive rendering, component-oriented game objects, input handling, and compact experimentation.", |
138 | 80 | "repo": "https://github.com/Machine-Learning-Compatible-Game-Engine/supEngine", |
139 | 81 | "live": "", |
140 | 82 | "tags": [ |
141 | 83 | "C++", |
142 | | - "OpenGL", |
143 | 84 | "FreeGLUT", |
144 | | - "Simulation Core" |
145 | | - ], |
146 | | - "related": [ |
147 | | - "DigitalChalkLab" |
| 85 | + "Components", |
| 86 | + "Rendering" |
148 | 87 | ] |
149 | 88 | }, |
150 | 89 | { |
151 | | - "name": "abstract-template-for-opengl-render-engine", |
152 | | - "slug": "opengl-render-engine", |
153 | | - "organization": "Machine-Learning-Compatible-Game-Engine", |
154 | | - "status": "Research", |
155 | | - "summary": "Shader compilation wrappers, vertex array layouts, textures, and ImGui diagnostics diagnostics helper engine.", |
| 90 | + "name": "Abstract OpenGL render-engine template", |
| 91 | + "status": "Research Archive", |
| 92 | + "summary": "Reusable wrappers for shaders, vertex arrays, textures, layouts, and ImGui diagnostics, kept as a practical reference for future renderer work.", |
156 | 93 | "repo": "https://github.com/Machine-Learning-Compatible-Game-Engine/abstract-template-for-opengl-render-engine", |
157 | 94 | "live": "", |
158 | 95 | "tags": [ |
159 | | - "C++", |
160 | 96 | "OpenGL", |
| 97 | + "Shaders", |
161 | 98 | "ImGui", |
162 | 99 | "Renderer" |
163 | | - ], |
164 | | - "related": [ |
165 | | - "UAIC-BSc-ComputerScience" |
166 | 100 | ] |
167 | 101 | } |
168 | 102 | ]; |
169 | | - const container = document.getElementById('projects-container'); |
170 | | - const filterBtns = document.querySelectorAll('.filter-btn'); |
171 | | - |
172 | | - function renderProjects(filter = 'all') { |
173 | | - container.innerHTML = ''; |
174 | | - projects.forEach(p => { |
175 | | - const statusLower = p.status.toLowerCase(); |
176 | | - let shouldShow = false; |
177 | | - |
178 | | - if (filter === 'all') { |
179 | | - shouldShow = true; |
180 | | - } else if (filter === 'active' && statusLower.includes('active')) { |
181 | | - shouldShow = true; |
182 | | - } else if (filter === 'research' && statusLower.includes('research')) { |
183 | | - shouldShow = true; |
184 | | - } else if (filter === 'teaching' && statusLower.includes('teaching')) { |
185 | | - shouldShow = true; |
186 | | - } else if (filter === 'archived' && statusLower.includes('archived')) { |
187 | | - shouldShow = true; |
188 | | - } |
189 | | - |
190 | | - if (!shouldShow) return; |
191 | | - |
192 | | - const card = document.createElement('div'); |
193 | | - card.className = 'project-card fade-in'; |
194 | | - |
195 | | - const badges = p.tags.map(t => `<span class="tag">${t}</span>`).join(''); |
196 | | - const relatedLinks = p.related ? p.related.map(r => `<span class="related-org-tag">${r}</span>`).join(' ') : ''; |
197 | | - |
198 | | - card.innerHTML = ` |
199 | | - <div class="project-card-header"> |
200 | | - <span class="project-status">${p.status}</span> |
201 | | - </div> |
202 | | - <h3>${p.name}</h3> |
203 | | - <p>${p.summary}</p> |
204 | | - <div class="project-tags">${badges}</div> |
205 | | - ${relatedLinks ? `<div class="project-related-orgs"><strong>Related Orgs:</strong> ${relatedLinks}</div>` : ''} |
206 | | - <div class="project-links"> |
207 | | - <a href="${p.repo}" target="_blank" class="link-btn">Code Repository</a> |
208 | | - ${p.live ? `<a href="${p.live}" target="_blank" class="link-btn primary">Live Demo</a>` : ''} |
209 | | - </div> |
210 | | - `; |
211 | | - container.appendChild(card); |
212 | | - }); |
213 | | - } |
214 | | - |
215 | | - filterBtns.forEach(btn => { |
216 | | - btn.addEventListener('click', (e) => { |
217 | | - filterBtns.forEach(b => b.classList.remove('active')); |
218 | | - btn.classList.add('active'); |
219 | | - renderProjects(btn.dataset.filter); |
220 | | - }); |
221 | | - }); |
222 | | - |
223 | | - renderProjects(); |
224 | | - </script> |
| 103 | + const container = document.getElementById('projects-container'); |
| 104 | + const buttons = [...document.querySelectorAll('.filter-btn')]; |
| 105 | + const escapeHtml = value => String(value).replace(/[&<>'"]/g, char => ({'&':'&','<':'<','>':'>',"'":''','"':'"'}[char])); |
| 106 | + function renderProjects(filter = 'all') { |
| 107 | + const visible = projects.filter(project => filter === 'all' || project.status.toLowerCase().includes(filter)); |
| 108 | + container.innerHTML = visible.map(project => ` |
| 109 | + <article class="project-card"> |
| 110 | + <span class="project-status">${escapeHtml(project.status)}</span> |
| 111 | + <h3>${escapeHtml(project.name)}</h3> |
| 112 | + <p>${escapeHtml(project.summary)}</p> |
| 113 | + <div class="project-tags">${project.tags.map(tag => `<span class="tag">${escapeHtml(tag)}</span>`).join('')}</div> |
| 114 | + <div class="project-links"><a class="link-btn" href="${escapeHtml(project.repo)}" target="_blank" rel="noreferrer">Repository ↗</a>${project.live ? `<a class="link-btn primary" href="${escapeHtml(project.live)}" target="_blank" rel="noreferrer">Live project ↗</a>` : ''}</div> |
| 115 | + </article>`).join(''); |
| 116 | + if (!visible.length) container.innerHTML = '<article class="project-card"><span class="project-status">No entries</span><h3>No projects match this filter yet.</h3></article>'; |
| 117 | + } |
| 118 | + buttons.forEach(button => button.addEventListener('click', () => { buttons.forEach(item => { item.classList.remove('active'); item.setAttribute('aria-pressed','false'); }); button.classList.add('active'); button.setAttribute('aria-pressed','true'); renderProjects(button.dataset.filter); })); |
| 119 | + renderProjects(); |
| 120 | + </script> |
225 | 121 | </body> |
226 | 122 | </html> |
0 commit comments