teaching machines

CS 430: Lecture 11 – History

Dear students, We’ve spent the semester lifting up the hood on programming languages to see their technical details. Today we do something different: we look at the languages through a more historical lens. Mechanical Computers The earliest computers used machinery like gears and springs to perform mathematical calculations. The most famous of these was the […]

CS 488: Lecture 25 – THREE.js

Dear students: Managers and experts like to tell their juniors not to reinvent the wheel. That’s because they are more interested in getting a product to market than in your learning. In an educational setting, our goals are very different. In a classroom, the product is you. If an activity helps you learn, then we […]

CS 488: Lecture 24 – Shadow Mapping

Dear students: Today is the culmination of many topics we’ve discussed earlier: perspective projections, projective texturing, and rendering to textures. It’s also a day I dread. We are talking about implementing shadows. Shadows are an important to realism. They communicate size and depth, and our visual system is accustomed to having them to reinforce or […]

CS 430: Lecture 10 – Concurrency and Exceptions

Dear students, When you’re converting Celsius to Fahrenheit, a single machine with a single thread of execution can handle the job done. However, many of the computational problems that will earn you a living will require a more sophisticated approach to problem solving. Perhaps you will have to enlist many computers to get the job […]

CS 488: Lecture 23 – Framebuffer Objects and Billboards

Dear students: Normally we draw our objects directly into the framebuffer that shows up on our screens. Sometimes, however, we’d like to draw into some other raster, perhaps because we’re doing offline rendering or because we want to synthetically generate textures. To change the destination of our pixels in WebGL, we use framebuffer objects (FBOs). […]

CS 430: Lecture 9 – Abstraction and Object-oriented Programming

Dear students, Computer scientists spend considerable time tinkering under the hood of their systems. Their clients, however, are happy to only have a few buttons to push to make those systems work. A simpler view of a complex system is called an abstraction. When a humane abstraction is available, clients can ignore irrelevant and low-level […]

CS 488: Lecture 21 – Perspective

Dear students: Why do things farther away appear smaller? And how do we achieve that effect in our renderers? We answer these questions today as we explore the perspective matrix. How Real Eyes Work Our eyes are complex organs, and we will reduce them to an abstraction that is easier to model in code. In […]

CS 488: Lecture 22 – Spotlights and Projective Texturing

Dear students: Today we examine two new lighting effects. First we focus light along a particular direction to produce a spotlight effect. Second we broadcast an image from a light source, just as our projectors broadcast input from a DVD player or our computer. Such textures are not bound to a particular object, like our […]

CS 488: Lecture 19 – Value Noise

Dear students: Algorithms produce visual content that is too perfect. We humans see the artifice and find it distasteful. When we explore the physical world, we see surfaces full of splotches and cracks. To achieve similar imperfections in algorithmic content, we introduce randomness. But pure randomness will take us to the opposite extreme of chaos. […]

CS 488: Lecture 20 – Perlin Noise

Dear students: Last time we examined value noise as a means of adding coherent randomness to too-perfect surfaces to make them feel more natural and less algorithmic. We continue that discussion today, but explore a different noise generation scheme invented by Ken Perlin. The Rise and Fall of Value Noise The algorithm for generating value […]

1 2 3 103