Monday, November 16, 2009

graphics pipeline

It's important to know how shaders work with the graphics pipeline, because the "shader model" of graphics programming is totally different from the "fixed function model"! MSDN says here http://msdn.microsoft.com/en-us/library/ms800169.aspx

"The following user-mode display driver functions are not called by the Direct3D runtime when the vertex shader is enabled
  • * MultiplyTransform
  • * SetTransform
  • * SetMaterial
  • * SetLight
  • * CreateLight
  • * DestroyLight


This means that when you use shaders, you have to compute lighting and transformations! DirectX will also ignore flags like D3DRS_LIGHTING and texture state flags when you use shaders. When you program using the shader model, your shader program has responsibilities!

Contrast the API for the fixed function model, which uses the D3D device functions, with the shader model, which is similar but passeses parameters to your shader effects through the shader interface

IDirect3DDevice9::SetTexture vs ID3DXEffect::SetTexture
IDirect3DDevice9::SetTransform vs ID3DXEffect::SetMatrix
IDirect3DDevice9::SetLight vs ID3DXEffect::SetValue

I'll go over the exact responsibilities of shaders in your program. The MSDN page on the graphics pipeline says has some really important things about this - http://msdn.microsoft.com/en-us/library/ee415715(VS.85).aspx and I will use this gamasutra article for base code - http://www.gamasutra.com/features/20030418/engel_02.shtml



1) "The vertex-shader (VS) stage processes vertices ... performing per-vertex operations such as transformations, morphing, skinning, and per-vertex lighting."

Therefore, the vertex shader is typically responsible for worldview transformations and also calculating light values. The vertex shader sets up a VS_OUTPUT struct that contains transformed vertex information that is rasterized and passed to the pixel shader. The vertex shader outputs a VS_OUTPUT structure

struct VS_OUTPUT
{
float4 Pos : POSITION;
float3 Light : TEXCOORD0;
float3 Norm : TEXCOORD1;
};

VS_OUTPUT VS(float4 Pos : POSITION, float3 Normal : NORMAL)
{
VS_OUTPUT Out = (VS_OUTPUT)0;
Out.Pos = mul(Pos, matWorldViewProj); // transform Position wrt worldview
Out.Light = vecLightDir; // output light vector
Out.Norm = normalize(mul(Normal, matWorld)); // transform normal wrt world
return Out;
}

2) "A pixel shader is a program that combines texture data, per-vertex values, and other data to produce per-pixel outputs...Pixel shader inputs are interpolated from the vertex attributes of the primitive being rasterized"

We basically receive a VS_OUTPUT from our vertex shader as our pixel shader input, but the vertex data is interpolated. We use the NORMAL value to calculate lighting in our pixel shader, because the NORMAL in our pixel shader is interpolated from the rasterizer for our little pixel! The pixel shader outputs is a RGBA

float4 PS(float3 Light: TEXCOORD0, float3 Norm : TEXCOORD1) : COLOR
{
float4 diffuse = { 1.0f, 0.0f, 0.0f, 1.0f};
float4 ambient = {0.1, 0.0, 0.0, 1.0};
return ambient + diffuse * saturate(dot(Light, Norm));
}

Note: The POSITION register is not valid in the pixel shader, we are using pixels and not 3D space, but we still use the NORMAL data for lighting. The rasterization stage that converts our vertex shader data into pixel shader data is interesting. See the wikipedia page is good http://en.wikipedia.org/wiki/rasterization

Monday, October 26, 2009

erasing linux passwords also



I actually forgot my root password on a debian linux, for real! I was actually able to reset the root password on my the linux also pretty easily. I had to boot into single user mode, by way of the grub command line, add the option (see in the picture where it says press e to edit? add this onto the end)

single init=/bin/bash

apparently, it skipped loading the operating system or something, gave me a root shell in single user mode, butthen I was getting the error 'Authentication token lock busy' trying to reset the password. presumably this was because it was read only, so in the bash shell entered

mount -o remount,rw /

this made gave me read-write and then I was able to I was then able to reset the password using the passwd program like normally. wow.

Friday, October 23, 2009

erasing windows passwords



I thought that to fix a windows computer if you've forgotten a password, you needed to like recover the sam file (using like a recovery disk) and crack the password hashes using a program, some complicated process! It turns out that it is actually very simple to just clear the password on the passworded account using a boot disk, without harming anything, using the offline nt password editor - http://pogostick.net/~pnh/ntpasswd/

you burn the boot disk image to a cd using nero or some other program, and the boot disk automatically detects hard drive partitions with windows installed, and the accounts on the computer, and erases the password on the given accounts. It has lots of automatic and default options and is absolutely easy to use, you just literally hit enter a couple times and it will erase the password for you to login to an admin account. too easy

Monday, October 5, 2009

Tuesday, September 29, 2009

doctor fill

I set up emacs to run with the sml/nj for one of my classes, and it turns out for my sanity that emacs comes with this artificial intelligence psychotherapist named doctor fill. it's pretty funny -- here's some things it says
F: Maybe your life have something to do with this.
F: What makes you believe your life has nothing to do with this?
F: Can you elaborate on that?
F: Is it because of the people you hang around with that you are going through all this?
F: I would appreciate it if you would continue.
F: Go on, don't be afraid.
F: Is it because of problems at school that you say you say arghh?
F: My secretary will send you a bill.
F: Bye bye.
It's pretty funny, it just keeps asking you to explain your reasoning, which is pretty good if you're being irrational in the first place. If you want a pretty good personal psychotherapist you can download it here (http://ftp.gnu.org/pub/gnu/emacs/windows/)
get the bin, the barebin download you have to download the sources also so just get the bin. you can use the sml-mode if you create a site-start.el file in the emacs/site-start/ directory.. follow the instructions here http://www.smlnj.org/software.html.

also very newest version (23.1, 07/30/09) has M-x butterfly ... "Do you really want to unleash the powers of the butterfly? (yes or no)"

Saturday, September 19, 2009

record last.fm radio with foobar

I found a weird applciation of some foobar components that allows you to record last.fm radio.

I posted about foo_lastfm_radio earlier, the component let's you not just stream, but sample from a playlist of like 4-8 songs on average. interestingly you can also copy this stream using the foo_converter component. the converter tool automatically comes with foobar. just select any number of songs in the playlist, and then use the converter utility to download the songs.



unfortunately, this method generates transcodes, because of the converter utility, but if you don't care very much about the quality, then this method works pretty well. unfortunently, you cannot use foo_fileops to 'copy' the file from the last.fm radio but there might be a way to copy the radio stream without transcoding it.

Thursday, August 27, 2009

analog-to-digital

I have recently learned how to 'rip' cassettes and stuff to digital so I thought I'd share some tips. I used this technique to rip cassettes but you can defintiely take this advice for ripping vinyl, the procedure is the same, it's just the set up is different. anyways, here's what you need to get started

1) you should get one of these monster icables, or something that joins the rca->1/8'' for your line-in
2) you need 'exact audio copy' [1] to record the audio from the line-in and it helps create a 'cue sheet'
3) then cuetools [2] to split the wav into tracks using the cue sheet


so set it up so you have the cables running into your computers mic slot or line-in and run eac -> tools -> 'record wav'. you should be able to see levels, but if you can't try going into the volume control panel and go to properties -> recording controls and select the line-in checkbox



after you get the levels, just let it record the whole tape, both sides, and then select 'process wav'

in the 'process wav' tool, first delete the leading and ending silence, but not the silence on the tape though, just the silence that is recorded when the tape wasn't even playing. then you place the 'track start' and 'gap start' markers to create a 'cue sheet'. track changes are marked by 'silence' on the tape, and the silence is much easier to see if you use the spectral view instead of the waveform view (view -> spectral).



inserting track start markers generates track n index 1 and gap markers generate track n index 0. insert a track start at the beginning of the tape's first song, and change the first marker marked track 1 index 1 into track 1 index 0 (effectively making the beginning of the recording a pregap until the first song). I also make the end of the tape silence a whole track that I edit into the cue sheet as a postgap.

go through the whole tape and then you basically get a cue sheet that looks like this




tell eac to save this cue sheet and the open it in a text editor to make sure it's correct (sometimes it doesn't export the gaps correctly, or some of the gaps correctly! see [3] you might have to manually edit the cue sheet, the syntax is easy enough) after you have saved the cue sheet then load cuetools and use the default settings

audio output - wav
output style - gaps left out



this will generate all the tracks
Directory of C:\Music\Kites - 2007 - Deny 1\New

01.wav
02.wav
03.wav
04.wav
05.wav
06.wav
07.wav
08.wav
09.wav
CUESheet.cue
the final step is to tag the files and compress the wav. use either musicbrainz or foo_discogs to tag the files, and either foobar2000's converter utility or eac to compress the wav's.

my favorite way to do it is to load the cue sheet into foobar, select the cue sheet and tag it with the foo_discogs plugin, this writes the track metadata into the cue sheet, and then you can give the cue sheet to eac and it outputs the compressed files with properly formatted filenames!

I hope this can help you create proper rips of your music, either with your cassettes or your vinyl