[index]

Anton's Research Ramblings

Latest Posts:

2022-10-14: Reading Filesystem Directory Contents in C

This post explains how I wrote directory-reading code for use in C, with links to working code.

[read more...]

2021-12-17: Screen Melt Shader

Animation of the recreated screen melt effect from Doom.

[read more...]

2021-04-12: The Platonic Solids

For testing and debugging 3D rendering it is convenient to have the ability to generate some three-dimensional "primitive" shapes from code. You might think of a placeholder mesh to use when a mesh file doesn't load properly, or a variety of generic mesh shapes to test a new shader on. I didn't have this in my graphics helper code. I remembered reading about generation of the Platonic Solids in Jim Blinn's Corner: A Trip Down the Computer Graphics Pipeline, Chapter Four, 1996. I have the book, so thought this might be an interesting exercise to start with.

A screen capture of a demo rendering the 5 platonic solids as wireframe meshes.

[ read more...]

2020-04-03: Software Rasterisation

a rasterised 3D model

I talked about building a software 3D rasteriser in some of my recent live streams, and people asked if I could share my resources. If you start with a program that can write out an image then you can progressively add features one by one, which is quite fun. If you find a triangle fill algorithm to rasterise one triangle (colour the correct pixels between 3 corner points) then you're on the right path. It's easier, and arguably more fun, to write a simple software rasteriser than get a modern 3D API started, which is kind of silly. Yes, it is a good way to learn 3D graphics concepts, much like writing a software ray tracer. Here is some of my demo code.

[ read more...]

2020-03-25: Live Stream Schedule

During virus lock-in I'm doing some streaming of educational/hobby coding. My warm-up was an introduction to computer programming using the C programming language. Other requested topics are an intro to 3D programming with OpenGL, some bits relevant to a book I'm working on - especially how to use fuzzers - and just me coding some 3D game stuff.

Here is a tentative schedule...

[ read more...]

2020-03-24: My apg_bmp Mini-Library

This week Binomial LLC adopted my little BMP image loader library into Basis Universal, which is a Google partner project. Here is a Google blog post from 20 March 2020, which provides more information.

[ read more...]

2019-03-10: Managing Code Projects Part One: Header Files

I'll write a few blog posts to share some experience about working on larger projects or coordinating with teams. I want to start out easy so here's a little aside about avoiding code tangles. Even projects that start off simple can quickly become quite complicated to follow as they grow, and as more people work on parts of them.

[ read more...]

2018-12-20: Anton's OpenGL Stuff End of Year Sale

I'm on holidays since yesterday! I have a bit of time get back to side projects (and lifting weights). What better to celebrate this auspicious occasion than to bundle my OpenGL learning resources together in a sale.

[ read more...]

2018-07-11: Rendering Multilingual Text

I have always been interested in languages. I have been adding multilingual text rendering support to my kick-around hobby game project over the last year or so. The project is written in C99 and OpenGL. Here's an overview of rendering text and how I support various other languages.

[ read more...]

2018-03-08: Minimalism, or "How I Structure Code Quickly in C Without Getting Log-Jammed"

Because I was asked, here is an overview of how I code quickly in C without getting log-jammed in structural mess. A lot of this should work for other languages too. Key concepts - keep it quick to get stuff on screen, keep it fun, let structure emerge on it's own, write code that's low cost to throw out if it doesn't work out, don't make refactoring work for yourself. Basically don't follow any of the rules™!

[ read more...]

2017-09-04: Dissolve Effect

I made a simple dissolve effect in WebGL. The idea was to replicate something like the dematerialisation shader effect you see in video games as a way of removing 3D models of dead monsters.

[ read more...]

2017-07-11: 3D Graphics Optimisation Resources

I am collecting optimisation guides, tools, and resources for 3D graphics programming, with particular focus on OpenGL. I'll put these on my OpenGL page in a little article when I have collected a few resources. I'll update this post as I get more things. Send me a message if you have a suggestion!

[ read more...]

Cracking into Doom WAD Files - Part ][

A did a short talk about rendering the WAD files from DOOM (1993) in OpenGL. The previous blog post discusses extracting the contents of the WAD files with some hexedit hackery. The slides should be embedded here:

Cracking into Doom (1993) WAD Files from Anton Gerdelan


[ read more...]

Cracking Open Doom .wad Files - Part I: Hexin'

A hobby project that has been on my list since about 1994 was to figure out Doom's (Id Software, 1993) data file format - the vaunted DOOM.WAD file. My brother and I used to enjoy making maps with 3rd-party editing tools around 1994/5, which was a nice way to get a grip on the 3D technology involved in the game. When I started programming I occasionally looked at the Doom source code to see

[ read more...]

Archive Index

2017_02_12_maths_textbooks.html

2017_01_04_new_book.html

2016_12_02_algorithms.html

2016_09_25_web_hosting.html

2016_06_19_map_editor.html

2016_04_20_texture_manager.html

2016_04_08_game_on_greenlight.html

2016_03_24_game_finished.html

2016_03_04_review_templ.html

2015_12_08_didnt_learn_in_school.html

2015_09_25_unreal_udk.html

2015_07_07_broken_opengl.html

2015_06_16_debug_draw.html

2015_06_03_python.html

2015_05_20_skills.html

2015_04_15_libraries.html

2015_03_18_interpolation.html

2015_03_11_webgl_extensions.html

2015_03_03_2d_colour_vis.html

2015_02_26_static_analysis.html

2015_02_25_canvas2dcube.html

2015_02_23_svg_d3.html

2015_02_20_netsoc.html

2015_02_17_canvas2d.html

2015_02_10_bresenham.html

2015_02_09_gpu_mem.html

2015_02_05_text_editors.html

2015_02_03_c99.html

2015_01_12_2015.html

2014_12_10_test_drive.html

2014_09_24_doom_src.html

2014_09_15_webgl_server.html

2014_09_05_compute_raytrace.html

2014_09_03_books_games.html

2014_08_12_acronyms.html

2014_06_04_glmapbufferrange.html

2014_05_21_c_cpp.html

2014_05_20_inline_asm.html

2014_05_14_renderbuffer.html

2014_05_06_binary_mesh.html

2014_04_24_gamma.html

2014_04_15_archicad.html

2014_04_14_gimbal_lock.html

2014_03_25_game_boy.html

2014_03_13_touch_webgl.html

2014_03_12_ifc_webgl.html

2014_03_11_webgl.html

2014_03_10_talks.html

2014_02_16_mesa3d.html

2014_01_24_vbo_layouts.html

2014_01_21_bin_mesh.html

2014_01_13_ifc.html

2014_01_10_ifc_conv.html

2014_01_08_blender_plugin.html

2014_01_07_custom_mesh.html

2014_01_06_php_blog.html

2012_12_14_webgl_fonts.html

2012_09_30_deferred.html

2012_09_08_batching.html

2012_09_03_maths_cheat.html

2012_08_17_cam_plot.html

2012_08_15_madness.html

2012_08_14_vertex_displ2.html

2012_08_13_vertex_displ.html

2012_08_10_omni_cam.html

2012_07_16_multi_pass.html

2012_07_12_webgl.html

2012_07_11_colour_pick.html

2012_07_09_open_source.html

2012_07_05_3d_portfolio.html

2012_07_03_vis_todo.html

2012_06_29_talking_head.html

2012_06_27_3d_picking.html

2012_06_26_blending.html

2012_06_25_rt_shaders.html

2012_06_18_morph_anim.html

2012_06_15_ifc_render.html

2012_06_12_optimisations.html

2012_06_08_js_timers.html

2012_06_06_fps.html

2012_05_31_phong.html

2012_05_30_webgl_textures.html

2012_05_29_json_mesh.html

2012_05_28_webgl_js.html

2012_05_25_javascript.html

2012_05_23_webgl.html

2012_05_22_blog.html