Who needs raytrace anyway? by Foobug [web]
, .$' $ $' $ $ .$$. .$$. $$m. $ $ .m$$ ,x$s' $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ .$ '$$` '$$` $$$' '$$$ $$$$ .$' $ ' , .$ 'm$' Who needs raytrace anyway? ---------------------------------- a 64k intro for assembly 2k - updated version requirements: windows 98 for sounds: a soundcard with (working) directsound drivers ONLY 32-BIT FULLSCREEN MODES TESTED! YOUR DISPLAY SHOULD SUPPORT 320x240x32BIT MODES IF YOU WANT TO RUN THE INTRO IN FULLSCREEN! voodoo 5 (or something) didn't seem to work too well in fullscreen. it sucked. others have kewl 3d-engines - we have kewl effects (and kewl 2-pole filters, haha :) TO RUN THE INTRO IN A WINDOW, USE: raytrace /w (note: small 'w') added a check for mmx, if it says you don't have mmx but you really do, just run it like: raytrace /m (note: small 'm') -- using MXMPlay/Win32 v0.9.1 by elitegroup, hacked by DaRiuS/RASH -- coder's notes: my first released demo/intro, "This is how we party" got second at asm'98 windemocompo. this is a LOT better than it. the intro was coded during the nights of about two weeks, and finished at the party place. some problems arose: Q: How The Hell Is Someone Supposed To Render Antialiased Windows Fonts Into A Background Buffer? A: i don't know. creating a dc with CreateCompatibleDC() works fine, but the text just isn't antialiased. don't know why. so i did it this way: void RenderFont(void *buf, int w, int h, char *str, int strlen, int size, char *fontname) { HDC hdc=GetDC(our_window_handle); HDC hdcCompat=CreateCompatibleDC(hdc); HBITMAP hb; HGDIOBJ hbold; BITMAPINFO bmi; int *bmdata; bmi.bmiHeader.biSize=sizeof(bmi.bmiHeader); bmi.bmiHeader.biWidth=w; bmi.bmiHeader.biHeight=-h; bmi.bmiHeader.biPlanes=1; bmi.bmiHeader.biBitCount=24; bmi.bmiHeader.biCompression=BI_RGB; bmi.bmiHeader.biSizeImage=0; bmi.bmiHeader.biClrUsed=0; bmi.bmiHeader.biClrImportant=0; hb=CreateDIBSection(hdcCompat, &bmi, DIB_RGB_COLORS, (void**)&bmdata, NULL, 0); hbold=SelectObject(hdcCompat, hb); RECT r; r.top=0; r.left=0; r.right=w; r.bottom=h; FillRect(hdc, &r, (HBRUSH)GetStockObject(BLACK_BRUSH)); HFONT hf=CreateFont(size, 0, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE, ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, ANTIALIASED_QUALITY, DEFAULT_PITCH, fontname); SelectObject(hdc, hf); SetBkMode(hdc, TRANSPARENT); SetTextColor(hdc, 0xFFFFFF); TextOut(hdc, 0, 0, str, strlen); BitBlt(hdcCompat, 0, 0, w, h, hdc, 0, 0, SRCCOPY); // To clear the hdc afterwards // FillRect(hdc, &r, (HBRUSH)GetStockObject(BLACK_BRUSH)); GdiFlush(); unsigned char *colorbuf=(unsigned char*)bmdata; for(int i=0;i<w*h;i++) { ((int*)buf)[i]=colorbuf[i*3]+colorbuf[i*3+1]*256+ colorbuf[i*3+2]*256*256; } SelectObject(hdcCompat, hbold); DeleteObject(hf); DeleteObject(hb); ReleaseDC(winhandle, hdcCompat); ReleaseDC(winhandle, hdc); } so it draws the text into the main window and then copies it into my own dib and then copies the pixels from the dib into memory. if you know how to do this more "cleanly", please mail me, ld0d@saunalahti.fi everything is rendered in 32-bit, and dithered to 256 color if required, at least in a window. and yes, i'm using 2-pole filters, originally from my softsynth :) they look quite nice. tired of those "yes, now you can watch the same effect for two minutes and get a cup of coffee while waiting for the next one"-intros, our intro includes at least 9 different effects, and if you count all the different blendings and other little things, the count is over 14 :) mmx enhanced, of course. not too well optimized, but .. enough. all textures generated. more or less. sources are 185k in size, not counting MXM sources (only the intro), executable compressed with UPX by Markus F.X.J. Oberhumer & Laszlo Molnar. - ld0d @ asm2k - 8/4/0 5:06 ja kyll, kyll ne tekstit rimmaa. ld0d@saunalahti.fi rjv@pp.inet.fi ascii by DiamonDie & ld0d
[ back to the prod ]