This is the fifth post in a series of OpenGL “tutorials” explaining how to get a triangle on your screen using as few lines of code, in as many languages, and on as many platforms as possible.

So, as should be apparent from my last two posts, I’m switching over the front end of my research system to use the Qt GUI framework.  Naturally, since I’m trying out a new platform here, I want to post a simple way to get a triangle up on the screen as quickly as possible.

Read the rest of this entry »

This is just a quick note on how to get up and running really fast with Qt on a mac.

  1. Go ahead and download the installer from the Qt site.
  2. Install Qt and note where you created the QtSDK directory
  3. Add /…/QtSDK/desktop/…/bin to your shell path.  (This ensures qmake is on the path among other things)

That’s it.  I found a reasonable tutorial here.  BUT, there’s one more slight rub.

If you follow through that tutorial, you’ll see that Qt prefers you to use their own autotool-like cross platform build system.  This usually involves issuing the three shell commands “qmake -project” “qmake” and then “make” in succession.  However, on mac, doing this will get you an app bundle.  What if you still want to be able to print to standard out and launch the program from the terminal in the normal unix fashion?

This can be fixed by editing the project_name.pro file generated when you issue “qmake -project”  Simply add the following line:

CONFIG-=app_bundle

Then the qmake toolchain will generate a nice normal unix program.  If you want to create an app bundle to distribute, just remove the line, and you’ll be all set again.

I just decided to try switching over the front end of my project to Qt.  I was trying to make an immediate mode GUI before, but it turns out that’s actually a terrible idea.  There’s a couple of reasons why:

  1. major GUI toolkits have had a lot of people, time, and attention given to them, so they have many more features than you could hope to implement on your own.
  2. major GUI toolkits also have a tremendous amount of HCI wisdom and knowledge embedded in them.  If you use a good GUI toolkit, your program will probably be somewhat more usable even if you don’t know the first thing about usability.
  3. immediate mode GUIs scale poorly to more complicated interfaces.  They don’t have hierarchical layouts and more complex reactive functionality has to be hand coded.

I figured I should throw something up and warn people away from the siren’s call.

“Cyberspace. A consensual hallucination experienced daily by billions of legitimate operators, in every nation, by children being taught mathematical concepts… A graphic representation of data abstracted from banks of every computer in the human system. Unthinkable complexity. Lines of light ranged in the nonspace of the mind, clusters and constellations of data. Like city lights, receding…” — William Gibson, Neuromancer (1984)

Is TRON a good depiction of cyberspace, Gibson’s “nonspace of the mind”? I’m inclined to say no. Space in TRON is very physical and literal. On “the grid” time and space have their usual relationship: to get from point A to point B requires an amount of time proportional to the amount of space. There are concrete forms, buildings, hallways, corridors.  TRON looks really cool, but it fails to capture much of the essence of computers, the internet or digital interaction.

The problem is that cyberspace is a misnomer.  Almost every attempt to make our online experience spatial has failed.  Chat rooms are not rooms; online “stores” are more like mail-order catalogs; the distance between any two points is the same: a hyperlink.  Despite pervasive use of spatial metaphors, the internet is for all practical purposes simply not a space. Still, the idea of cyberspace persists, an alluring, romantic thought.  What does our massive interconnected network of computers, information, and people look like?  What is its shape, its architecture, its landscape? Read the rest of this entry »

Ben Blum-Smith asked the question I’ve been pondering since my last post

I’m a little confused… if a real matrix is not symmetric, there is no guarantee of a real eigenvector (e.g. take a 2-d rotation matrix), so what did you mean “I expect that other arguments along similar lines are possible for non-symmetric real matrices”?

As it turns out, I’ve been spending quite some time repairing my own understanding of linear algebra.  What I should have said is, I expect to find similar arguments for normal matrices.

Normal is a terrible name of course.  Are other matrices weird? non-conformist?

Unfortunately, I haven’t figured out how to pin down a similarly elementary flavored proof for normal matrices.  Instead, I’m going to present an argument for another branch of the family tree: (so to speak) orthonormal matrices.

But first, I realized my last post might have jumped in a bit too deep all at once, so I’m going to try to err the other way and cover some more basic linear algebra this time as well.  Bear with me and let me define orthonormal matrices before I talk about their eigenanalysis.  I’ll give two definitions and suggest why they’re equivalent.
Read the rest of this entry »

Shawn Cornally:

For those of you that have had complex/imaginary numbers tacked onto your curriculum like an aluminum spoiler on a stock Honda Civic, I really think you should teach the Mandelbrot Set.

I’m a firm believer that if you can’t understand some concept without resorting to complex numbers and invoking the fundamental theorem of algebra, then you don’t have a deep understanding of the concept.  This is particularly a problem for teaching undergraduate mathematics (particularly to scientists and engineers), since some of the most crucial techniques—eigenanalysis and Fourier transforms—make heavy use of complex numbers.  The result of the “complex” arguments presented is that most students have a very difficult time with these subjects.  Ultimately, many treat them as magical tools that are hardly worth the time invested to understand.

Such a perspective is of course hogwash.

I know for a fact that a much more geometric (and in my opinion illuminating) interpretation of eigenanalysis is possible.  However, I had never seen a clear exposition from first principles that one could reasonably expect to present in a beginning linear algebra course.  Every explanation of the geometric perspective that I’ve seen has been post-hoc or relied on machinery like Lagrange multipliers—an unwelcome diversion.

I would not be surprised if someone else has come up with this proof before.  However, I was not able to quickly find a reference for it.  It makes no appeals to (a) the characteristic polynomial, (b) matrix polynomials (c) complex numbers or (d) Lagrange multipliers.  I have only treated the real-symmetric case, although I expect that other arguments along similar lines are possible for non-symmetric real matrices. Read the rest of this entry »

Update: Since writing this post, I’ve changed my mind and decided against immediate mode GUIs rather strongly.  At this point, I would not advise going down this path, but I’m going to leave the post here for posterity.

I just got this hot link from the c0de517e blog (now on my blogroll):

http://mollyrocket.com/861

The video’s 40 minutes long, so—let’s be honest—you’re not going to watch it. I’ll try to give you my best explanation of what I heard, but I’ll probably butcher the idea.  However, I’m planning to try this in my next research project, so maybe I’ll have some more concrete experiences to write up in the future.

Read the rest of this entry »

Demetri Terzopoulos gave the opening keynote titled Biomechanical and Artificial Life Simulation of Humans for Computer Animation and Games, after which there were sessions on simulation, animation and GPU techniques.

I hadn’t heard before, but Demetri’s group recently released this ambitious paper: Comprehensive Biomechanical Modeling and Simulation of the Upper Body

Some particularly cool papers from day 1:

Jonathan Cohen, Sarah Tariq, and Simon Green. Interactive Fluid-Particle Simulation using Translating Eulerian Grids. link
The talk started with some very useful high level observations and motivation. Jonathan emphasized that our goal should be scalable physics, not just fast, realistic physics. Sequential algorithms are insufficient. Parallel algorithms alone are also insufficient. We want parallel algorithms that produce better looking results as hardware gets better. There were some cool ideas here: Use Gallilean invariance to replace translations of the simulation grid with fluctuating boundary conditions (modeling the entrance/exit of matter from the volume). Apply the fluid simulation to particles with less influence as you move towards the edge of the grid. This gets around the simulation/fluid in a box problem. Cool tidbit: They used this technique for jetpacks and one of the guns in the videogame Dark Void.

Christian Miller, Okan Arikan and Donald Fussell. Frankenrigs: Building Character Rigs From Multiple Sources. link
(Full disclosure: I know all of the authors fairly well from my time at UT Austin.) This is an end-to-end system for (semi-)automatically rigging and skinning character meshes. I didn’t know this, but rigging and skinning is tedious for experts and nearly impossible for everyone else. The idea was to take a data-driven approach and leverage previously skinned and rigged character meshes (of which game and movie studios have plenty lying around). The input meshes are cut into limbs and then appropriate limbs are matched to the target mesh and stitched together. Hence the name: Frankenrigs. One very interesting observation: The method handles non-manifold, non-closed meshes, which is the way almost all artists’ meshes come. Christian actually ran into this problem when comparing to previous work: He couldn’t because the past work didn’t work on non-closed meshes.

Samuli Laine and Tero Karras. Efficient Sparse Voxel Octrees. link
This paper had a really killer demo. They managed to voxelize and render at reasonably high fidelity the NVIDIA street scene and the Sibenik cathedral scene. Along with the Gigavoxels paper, this makes it look like adaptive resolution voxel grids may be gaining a lot of traction. The contributions here were mainly an efficient ray marching algorithm, and effectively handling and filtering normals. The authors have open sourced the code base, so if you’re looking to get your hands dirty with some voxel rendering and/or research, this might be a good place to start.

I’m in Washington D.C. this weekend for Interactive 3D (I3D) 2010. I’ve promised myself to try and blog some comments on the whole affair. Hopefully I’ll be able to do this every night, but failing that, I’ll post a summary afterwards.

Also, there is a lot of snow here:

Follow

Get every new post delivered to your Inbox.