rss2
Alex on software development
alexsyniakov.com · English
rss2 wordpress content media slash wfw atom dc sy
https://alexsyniakov.com/feed/
- Last post
- Jul 10, 2026
- Posts in 24 h · 7 days · 30 days
- 0 · 0 · 0
- Our last check
- Answering
- Served from
- United States
- Text score at discovery
- 46,906
- Format
- rss2
- Features in the feed
- content, media, slash, wfw, atom, dc, sy
- Community
- wordpress
Posts
What our queue read from this feed. Open one to read it here, or go to the site that published it.
- How I Stopped Designing Architecture and Started Writing a 3D Editor. Part 1
Jul 10, 2026 · original
Today’s post is a bit different from my usual deep dives into mesh geometry. It’s a story about architecture – and about going back to the beginning. Think back to how you learned to program. Almost certainly, you started with procedural code: a program was a sequence of steps, maybe split into functions. Input, transformation, output. Simple. Then someone opened the door to a whole new world: object-oriented programming. Everything is an object! Objects have state and behavior! Model the real world! And we believed it. We spent years – years – learning how to carve reality into classes. Is a Circle an Ellipse ? Should Document own View , or observe it? Composition or inheritance? Then we discovered that plain OOP doesn’t really scale, and we fell into the world of patterns: MVC, MVVM, Observer, Dependency Injection, service locators, factories of factories. Each pattern solved a real pr - Half-Edge Data Structure. Part 2
Jul 7, 2026 · original
In the previous post we covered the basics of the half-edge data structure and how to traverse its elements using OpenMesh. This time, we’ll look under the hood of add_face – the function that builds the entire structure on the fly. When you call: mesh . add_face ( vh0 , vh1 , vh2 ) ; OpenMesh performs a sequence of operations to wire up the entire topological graph. Let’s trace through what happens step by step. Imagine two triangles forming a quad, and a third triangle attached to its right side. Let’s start with simple quad described in Post 1 . And add a third triangle attached to its right side. auto v0 = mesh . add_vertex ( { 0 , 0 , 0 } ) ; auto v1 = mesh . add_vertex ( { 1 , 0 , 0 } ) ; auto v2 = mesh . add_vertex ( { 1 , 1 , 0 } ) ; auto v3 = mesh . add_vertex ( { 0 , 1 , 0 } ) ; auto v4 = mesh . add_vertex ( { 2 , 0.5 , 0 } ) ; // the new triangle's tip mesh . add_face ( v0 , v - Converting My Codebase to C++20 Modules. Part 1
Nov 25, 2025 · original
Today’s post is about C++20 modules and my own journey of converting an existing codebase into modules. After years of waiting, I can finally say the attempt was successful. Back in 2022, trying to use modules in Visual Studio always ended in ICEs. But after three years, the MSVC team has fixed most of the serious issues. During my latest conversion effort, I hit only one ICE , and it was a harmless one (although, please fix it). So, what are modules? I won’t explain the basics here – there are already great introductions here , here , and here . Instead, I’ll share the main problems I ran into while converting my own project into a full module-based solution. Jumping ahead, I’ll say that in some cases I couldn’t connect the modules without modifying the third-party code. I should also mention right away that I did this for my own pet project, so while this post does share my experience - How to Check If Two Triangles Intersect: Geometric Algorithms Explained
Jun 16, 2025 · original
I’ve looked at a lot of triangle-triangle intersection code across different projects. And every time, one thing stood out: there’s no single implementation that covers all the edge cases. That’s not surprising. The requirements vary wildly depending on the use case – fast-and-loose for games, watertight for CAD, approximated for physics engines. But in this post, I’ll describe a method that is as general and precise as possible – something robust enough for CAD systems. The narrative will follow the tone and structure of the earlier post – Is the Point Inside the Triangle? If you haven’t read it, I suggest doing so first – it’ll make everything that follows here feel much more intuitive. Moreover, I recommend opening the post in a separate tab so that you can quickly refer to it. Goals of this post To demonstrate how much easier this post is to follow if you’ve read the first one. To sh - C++23 mdspan
Apr 26, 2025 · original
Today’s post is dedicated to a new feature introduced in C++23 called std::mdspan . There are already a few articles online about it, but it caught my personal attention for three reasons: I’ve wanted to get rid of boost::multi_array in my codebase for a long time, as part of the larger effort to reduce dependencies on Boost. Why reduce them? As strange as it may sound, I’m aiming to migrate the codebase toward C++ Modules as soon as possible. Boost is not designed for modularization, and integrating Boost into a modularized project is extremely painful today. boost::multi_array has been one of the most problematic dependencies in this regard. I really wanted to try out the new mdspan feature and the new bracket subscription operator in C++23. I want to prepare the data structures for C++26 std::linalg . What is std::mdspan ? As you probably know, C++20 introduced std::span , which provi - Is the Point Inside the Triangle?
Mar 22, 2025 · original
Today we’re tackling something that seems simple: how do you tell if a point is inside a triangle? I’ve got five things I want to do here: Make it a story This post will be long, with some detours and extra thoughts. But I think that’s the best way to get tricky stuff. A story keeps it interesting and helps you remember the important bits. So, this won’t just be words – it’ll be a journey with logic and aha moments. Explain the basics simply We’ll look at the building blocks and steps to figure out if a point’s in a triangle. Lots of people write about this, but I think they miss stuff or make it too quick. I’ll do it my way. Focus on what you need I’ll stick to the ideas that help solve this one question. Show it’s not so simple Even something small like this takes more understanding than you’d guess. I want to show that. Try it out This is from a book I’m writing. I’m testing if it wor - Mesh Stitching: Techniques for Repairing Gaps and Cracks in 3D Models
Jan 7, 2025 · original
Today, I’d like to dedicate a post to the topic of mesh stitching. Stitching meshes is usually necessary when they contain gaps , cracks , or thin , narrow holes that can be stitched together instead of being filled. Such cracks might appear due to incorrect data conversion or as a result of geometric algorithms – for example, merging two meshes. This task interests me because it demonstrates how a solution from real life (stitching fabric with a needle) can be applied in programming. Generally, I aim to write posts about the philosophy of programming, but they somehow always end up being very technical. Although there’s nothing revolutionary about this method, it’s extremely useful for developing one’s skills as a geometric programmer. Problem Definition Imagine a half-edge mesh with cracks or narrow, elongated holes. The goal is to stitch the sides of these cracks if their width (or ra - How to Implement Undo/Redo for a Half-Edge Data Structure?
Nov 26, 2024 · original
Recently, I had to review code for undo/redo functionality for a half-edge data structure. This made me reflect on how different programmers approach problem-solving, considering the trade-offs between the development costs and the efficiency of the resulting solution. I would like to discuss all the possible approaches and how they ultimately impact the final solution, its efficiency, and the effort required from the programmer. Let’s explore various approaches. Prerequisites Half-Edge Data Structure. Part 1 Undo/redo pattern The most common undo/redo pattern works as follows: there are two virtual functions undo and redo . The redo function (sometimes called execute ), is triggered when a command (or transaction) is executed. This function performs the operation and saves the object’s state (in this case, the mesh) before the operation ( flip ) that modifies its state. The undo functio - Exploring Mixins
Nov 13, 2024 · original
A mixin is a class designed to inject specific functionality into other classes through inheritance, allowing developers to add behaviors without relying on deep or rigid inheritance hierarchies. Unlike traditional base classes, mixins are often small, focused, and flexible, providing methods or properties that can be combined to enhance functionality across diverse classes. In C++, mixins are often implemented with templates and the Curiously Recurring Template Pattern (CRTP), allowing for compile-time efficiency and minimal overhead. CRTP: Enabling Static Polymorphism The Curiously Recurring Template Pattern (CRTP) is a C++ technique that allows for static polymorphism. In CRTP, a class inherits from a template that takes the inheriting class itself as a parameter. This way, behavior can be defined at compile-time, eliminating the runtime overhead of virtual function calls. Example of - Mesh Clipping Operations with OpenMesh Library
May 3, 2024 · original
In this post, I will discuss the process of clipping operations on meshes using the OpenMesh library. For the purpose of this demonstration, we’ll utilize the OpenMesh library to represent our mesh. For those unfamiliar, OpenMesh provides extensive tools for manipulating polygonal meshes. We will be working with a triangulated mesh version for simplicity. Refer to previous post for more details on the OpenMesh library. Understanding the Plane Equation The fundamental operation in mesh clipping involves a plane, defined uniquely by a point 𝑃 and a direction 𝑁. The plane equation in 3D space passing through point 𝑃 can be represented as: dot (𝑁, point − 𝑃 ) = 0 where: 𝑁 is a unit normal vector (vector length is always 1), point represents any point on the plane. For instance, consider a point at (5,100,0) with a plane normal pointing in the direction (1,0,0) and P (0,0,0). Substituti
Discovered by the rss-feed-index crawler, which checks each feed at most once a month.
Same record as JSON: https://api.agentalog.com/api/feeds/fd_alexsyniakov_com_746901fb949f6953. More from this site: alexsyniakov.com in the Feeds tab.