<feed xmlns='http://www.w3.org/2005/Atom'>
<title>engine.git/src/o3d, branch main</title>
<subtitle>Small graphics engine.</subtitle>
<link rel='alternate' type='text/html' href='https://git.vimene.fr/engine.git/'/>
<entry>
<title>added mipmaps for the hw renderer, improvements</title>
<updated>2026-02-03T19:26:01+00:00</updated>
<author>
<name>vimene</name>
<email>vincent.menegaux@gmail.com</email>
</author>
<published>2026-02-03T19:26:01+00:00</published>
<link rel='alternate' type='text/html' href='https://git.vimene.fr/engine.git/commit/?id=cbf7d23623b5bb2d2092cb6c86bc965138b4ea75'/>
<id>cbf7d23623b5bb2d2092cb6c86bc965138b4ea75</id>
<content type='text'>
This commit add mipmaps, but for now, mipmaps are generated on the gpu
at runtime. We should generate them in advance.

- added mipmaps for the hardware renderer
- renamed stb_image.c to stb_image.cpp
- add compiler flag to stb_image.cpp to prevent warning
- added pipe notation for various objects to have all clipping functions
  be left to right. We need this for the time being because dot notation
  would considerably complicate the current implementation
- small improvements
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This commit add mipmaps, but for now, mipmaps are generated on the gpu
at runtime. We should generate them in advance.

- added mipmaps for the hardware renderer
- renamed stb_image.c to stb_image.cpp
- add compiler flag to stb_image.cpp to prevent warning
- added pipe notation for various objects to have all clipping functions
  be left to right. We need this for the time being because dot notation
  would considerably complicate the current implementation
- small improvements
</pre>
</div>
</content>
</entry>
<entry>
<title>improved software shaders</title>
<updated>2026-01-16T23:06:31+00:00</updated>
<author>
<name>vimene</name>
<email>vincent.menegaux@gmail.com</email>
</author>
<published>2026-01-16T23:06:31+00:00</published>
<link rel='alternate' type='text/html' href='https://git.vimene.fr/engine.git/commit/?id=0d10b77f77459333c5549711334f417623ab1f3e'/>
<id>0d10b77f77459333c5549711334f417623ab1f3e</id>
<content type='text'>
- unified terminal and graphical software renderer shaders
- added vertex shaders for software renderers
- removed VertexData
- moved shaders from frame buffers to their own class
- added FrameBufferConcept and ShadersConcept
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
- unified terminal and graphical software renderer shaders
- added vertex shaders for software renderers
- removed VertexData
- moved shaders from frame buffers to their own class
- added FrameBufferConcept and ShadersConcept
</pre>
</div>
</content>
</entry>
<entry>
<title>rewrote entirely the triangle clipping algorithm</title>
<updated>2026-01-15T04:15:59+00:00</updated>
<author>
<name>vimene</name>
<email>vincent.menegaux@gmail.com</email>
</author>
<published>2026-01-15T04:15:59+00:00</published>
<link rel='alternate' type='text/html' href='https://git.vimene.fr/engine.git/commit/?id=175c71637b6bea6dcdd0faf3d614339983809bb1'/>
<id>175c71637b6bea6dcdd0faf3d614339983809bb1</id>
<content type='text'>
There is still a lot of work needed to refactor it properly.

- use the Sutherland–Hodgman algorithm, with some minor changes
- made clipping more general, allowing clipping of any coordinate,
  before and after division by w
- compute the z coordinate only at the fragment stage instead of each
  time clipping creates / moves a vertex, in addition to the fragment
  stage
- added VectorCoords to choose at compile-time different coordinates
  based on a template argument
- added transpose struct to allow shuffling of vectors coordinates
- added math::utils::lerp which interpolate linearly a float
- added Vector{2,3,4}::map() which maps a vector from one range to
  another
- added template parameter to DerivedVertex (and therefore
  TriangleDerived) to allow choosing which dimension to use
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
There is still a lot of work needed to refactor it properly.

- use the Sutherland–Hodgman algorithm, with some minor changes
- made clipping more general, allowing clipping of any coordinate,
  before and after division by w
- compute the z coordinate only at the fragment stage instead of each
  time clipping creates / moves a vertex, in addition to the fragment
  stage
- added VectorCoords to choose at compile-time different coordinates
  based on a template argument
- added transpose struct to allow shuffling of vectors coordinates
- added math::utils::lerp which interpolate linearly a float
- added Vector{2,3,4}::map() which maps a vector from one range to
  another
- added template parameter to DerivedVertex (and therefore
  TriangleDerived) to allow choosing which dimension to use
</pre>
</div>
</content>
</entry>
<entry>
<title>added textures for the hardware renderer</title>
<updated>2026-01-13T01:04:52+00:00</updated>
<author>
<name>vimene</name>
<email>vincent.menegaux@gmail.com</email>
</author>
<published>2026-01-13T01:04:52+00:00</published>
<link rel='alternate' type='text/html' href='https://git.vimene.fr/engine.git/commit/?id=db41d43345ea73cf7c1bbb29448e52ffb822e3e0'/>
<id>db41d43345ea73cf7c1bbb29448e52ffb822e3e0</id>
<content type='text'>
- removed "using" directive in .hpp
- reverse order of arguments for quaternion rotation, i.e. q.rot(v)
  instead of v.rot(q), where q is a quaterinon and v a vector
- pass the inverse of the view matrix to render_and_present_frame, to
  allow light calculation in shaders (we used to just pass the matrix of
  the quaternion of the transformation, i.e. discard scaling and
  translations)
- added another mesh and texture (viking_room) for testing purposes
- added transparent background option
- added Quaternion::look_towards(), which is the equivalent of
  Matrix4::look_at() but only for rotations
- various improvement to .obj parsing
- load texture coordinates from .obj file
- merged duplicate vertices in Mesh::linearize_indices()
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
- removed "using" directive in .hpp
- reverse order of arguments for quaternion rotation, i.e. q.rot(v)
  instead of v.rot(q), where q is a quaterinon and v a vector
- pass the inverse of the view matrix to render_and_present_frame, to
  allow light calculation in shaders (we used to just pass the matrix of
  the quaternion of the transformation, i.e. discard scaling and
  translations)
- added another mesh and texture (viking_room) for testing purposes
- added transparent background option
- added Quaternion::look_towards(), which is the equivalent of
  Matrix4::look_at() but only for rotations
- various improvement to .obj parsing
- load texture coordinates from .obj file
- merged duplicate vertices in Mesh::linearize_indices()
</pre>
</div>
</content>
</entry>
<entry>
<title>fixed wrong header guard</title>
<updated>2026-01-12T21:30:16+00:00</updated>
<author>
<name>vimene</name>
<email>vincent.menegaux@gmail.com</email>
</author>
<published>2026-01-12T21:30:16+00:00</published>
<link rel='alternate' type='text/html' href='https://git.vimene.fr/engine.git/commit/?id=c6e180ed8ba897620327938dc19f6ee792860fd4'/>
<id>c6e180ed8ba897620327938dc19f6ee792860fd4</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>starting to merge vulkan with the engine</title>
<updated>2025-12-29T20:21:09+00:00</updated>
<author>
<name>vimene</name>
<email>vincent.menegaux@gmail.com</email>
</author>
<published>2025-12-29T20:21:09+00:00</published>
<link rel='alternate' type='text/html' href='https://git.vimene.fr/engine.git/commit/?id=8ab4780f134c33a9e11ac0fe0bd866e17d3ee650'/>
<id>8ab4780f134c33a9e11ac0fe0bd866e17d3ee650</id>
<content type='text'>
- refactored scene_main to be able to share code between software and
  hardware renderers, while still sharing code between terminal software
  renderer and graphical software renderer
- made the hardware renderer use scene objects vertices and transforms,
  instead of hardcoded ones
- made the hardware renderer use the scene's camera
- made .obj parser create Vector3 instead of Vector4, which didn't made
  sense
- removed unnecessary std::
- lots of small changes
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
- refactored scene_main to be able to share code between software and
  hardware renderers, while still sharing code between terminal software
  renderer and graphical software renderer
- made the hardware renderer use scene objects vertices and transforms,
  instead of hardcoded ones
- made the hardware renderer use the scene's camera
- made .obj parser create Vector3 instead of Vector4, which didn't made
  sense
- removed unnecessary std::
- lots of small changes
</pre>
</div>
</content>
</entry>
<entry>
<title>added uniform buffers, small tweaks</title>
<updated>2025-12-24T00:38:45+00:00</updated>
<author>
<name>vimene</name>
<email>vincent.menegaux@gmail.com</email>
</author>
<published>2025-12-24T00:38:45+00:00</published>
<link rel='alternate' type='text/html' href='https://git.vimene.fr/engine.git/commit/?id=00370c21f107ff2a320fbdef170e24a8b5cda92a'/>
<id>00370c21f107ff2a320fbdef170e24a8b5cda92a</id>
<content type='text'>
- fixed aspect ratio being the inverse of what it's supposed to be
- use std::chrono::high_resolution_clock instead of system_clock
- convert ellapsed time to float representing seconds
- renamed engine::math::Matrix4::projection to perspective
- use [0,1] instead of [-1,1] for the range of z values, to be aligned
  with vulkan
- added engine::math::Matrix4::{look_at,transpose}
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
- fixed aspect ratio being the inverse of what it's supposed to be
- use std::chrono::high_resolution_clock instead of system_clock
- convert ellapsed time to float representing seconds
- renamed engine::math::Matrix4::projection to perspective
- use [0,1] instead of [-1,1] for the range of z values, to be aligned
  with vulkan
- added engine::math::Matrix4::{look_at,transpose}
</pre>
</div>
</content>
</entry>
<entry>
<title>renamed .h to .hpp</title>
<updated>2025-12-10T19:40:42+00:00</updated>
<author>
<name>vimene</name>
<email>vincent.menegaux@gmail.com</email>
</author>
<published>2025-12-10T19:40:42+00:00</published>
<link rel='alternate' type='text/html' href='https://git.vimene.fr/engine.git/commit/?id=761604f9e4815e8f4355637ebb46052314cbed86'/>
<id>761604f9e4815e8f4355637ebb46052314cbed86</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>various improvements</title>
<updated>2025-01-02T12:25:14+00:00</updated>
<author>
<name>vimene</name>
<email>vincent.menegaux@gmail.com</email>
</author>
<published>2025-01-02T12:25:14+00:00</published>
<link rel='alternate' type='text/html' href='https://git.vimene.fr/engine.git/commit/?id=26b4b82a7be2c029491f3009b66b3cbf8db5d93c'/>
<id>26b4b82a7be2c029491f3009b66b3cbf8db5d93c</id>
<content type='text'>
- cleaned up the computation of the camera's matrix
- changed VertexData to being a struct which transmit data between the "vertex shader" and the "fragment shader"
- started working on keyboard and mouse controls
- added fov (field of view)
- changed quaternion to euler angles conversion, from zyx to zxy
- fixed computations of z coordinates in triangle rendering
- improved naming in the triangle rasterizer
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
- cleaned up the computation of the camera's matrix
- changed VertexData to being a struct which transmit data between the "vertex shader" and the "fragment shader"
- started working on keyboard and mouse controls
- added fov (field of view)
- changed quaternion to euler angles conversion, from zyx to zxy
- fixed computations of z coordinates in triangle rendering
- improved naming in the triangle rasterizer
</pre>
</div>
</content>
</entry>
<entry>
<title>various improvements</title>
<updated>2024-12-31T02:40:14+00:00</updated>
<author>
<name>vimene</name>
<email>vincent.menegaux@gmail.com</email>
</author>
<published>2024-12-31T02:40:14+00:00</published>
<link rel='alternate' type='text/html' href='https://git.vimene.fr/engine.git/commit/?id=cc6fb8c33637566a7b116d46440e6063f016deea'/>
<id>cc6fb8c33637566a7b116d46440e6063f016deea</id>
<content type='text'>
- added quaternions and rewrote all rotations to use them
- added transforms to put all object transforms in a single place
- added Wavefront .obj file parser
- removed frame buffer's abstract class
- improved vectors, matrices, triangles, vertices and vertices data by putting all code in header file
- added vector's operations
- changed from NULL to nullptr
- miscellaneous improvements
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
- added quaternions and rewrote all rotations to use them
- added transforms to put all object transforms in a single place
- added Wavefront .obj file parser
- removed frame buffer's abstract class
- improved vectors, matrices, triangles, vertices and vertices data by putting all code in header file
- added vector's operations
- changed from NULL to nullptr
- miscellaneous improvements
</pre>
</div>
</content>
</entry>
</feed>
