I added animation when zooming in and out. This is achieved by drawing the new fractal level into a buffer, and then resizing and translating both fractal level buffers appropriately over a fixed number of frames to animate a zoom effect. It would, of course, be optimal to redraw the entire fractal on each frame of the animation, but this would be a MAJOR speed hit.
The visual quality doesn’t look as good as I’d like at the moment due to XP’s StretchBlt API not using very good resizing algorithms, but it will do for now. Basically, colors show up too brightly when being resized. I can just plug in another resizing algorithm later that will give better results, possibly using a GPU API (DirectX or OpenGL) for optimal results and speed.
I also cleaned up the comments a little.
Time spent on update: 2.5 hours
So I was required to read up on Mandelbrot Fractals for something this last Tuesday, and was really intrigued by the concept, so I threw this project [v0.1 binary, source] together in 2 hours that night ^_^.
I spent 40 minutes on the program outline and the fractal calculations, 20 minutes on the zooming and panning, and an hour on the coloring. The coloring part is really hard because there are no solid formulas I could find out there for them. It will possibly take a lot of experimenting and playing with algorithms and tweaking numbers if I can’t find a good algorithm for it online. The coloring is actually not technically part of the escape-time fractals (see the picture under “Formal Definition” here), only the solid black part is, and the rest can be white. However, it’s the coloring taken from a result of the algorithm that really makes the most pretty patterns in the fractal, so it’s a very important part.
The current project only shows the Mandelbrot Fractal. Future versions will allow providing parameters dynamically to view any Julia Fractal. [Added in v0.50]
Other planned updates:
- Better coloring!!!: As previously stated, I need to spend a lot of time on coloring calculations :-\. [Added in v0.50]
- Animated zooming: When zooming in or out on an area, the screen will animate the zoom [Added in v0.15]
- Optimization: Speed optimization with intelligent escape (detail) level calculations
- Select zoom area via a dragged box: While clicking will still be supported to zoom in on an area, the user will also be able to drag the mouse to create a selectable box area to zoom in on
- View zoom level information: A dialog box and better visual GUI that allows you to see and change your current zoom level, window coordinate scales, and other information [Added in v0.50]
- Coordinate information: Add to the GUI viewable information about each coordinate (pixel) you are mousing over including time to escape, color, and other information [Added in v0.50]
- Non-XP dependency: Make a Linux port :-)
- Infinite Zoom: Double precision floating point calculations under-run at the 24th zoom level :-(.
This project is too much in its infancy for a higher rating. It will be sure to go up as I work on it and add more features.
- Left click (mouse down, actually): Zoom in by 200% around the point clicked
- Right click (mouse down, actually): Zoom out by 200%
- =: Double the current detail level (This is needed whenever you see scattered lone black pixels in an area)
- -: Halve the current detail level (If things are going too slow, this helps out a lot)
- w/a/s/d: Pan the screen 1/16th in the direction up/left/down/right
... It just took me an hour longer to write this post and all the documentation than it did to write the program XD. Darn documentation!
I finally got around to touching up the paper I wrote in 2003 on how I made the Fractal Landscape, which also includes some theories and stuff. The overview states “The purpose of this paper is to report my discoveries over the last few months from working on my fractal landscape program.”.
I don’t even want to try and relate here how much of a bitch it was converting it from the shit that Microsoft Word outputs into a clean and W3C compliant HTML. But then again, that’s always a problem with Word output, which is why I try to not deal with it often, or convert it to plain text first when possible.
A PDF copy is also available.
The following updates have been made to the Fractal Landscape
- DirectX Bug (reported in last update): The water sometimes overlaps solid objects where it shouldn’t. This is due to some alpha blending setting conflicting with the z-buffer.
- Cause: The problem was my graphics card doesn’t seem to like 16 bit depth buffers much (in this case, the w-buffer, which is mostly the same thing as a z-buffer). Oddly, this wasn’t a problem with any older graphics cards I had tested it on, and OpenGL seems to have no problem with a 16 bit depth buffer.
- Solution: The code now has the graphics cards choose the highest available depth buffer solution for DirectX using “CheckDepthStencilMatch” (32bit, 24DX8 (24bit), or 16bit).
- DirectX Bug (reported in last update): The clouds do not show up at most viewing angles when fogging is turned on.
- Cause: An improper fog rendering setting
- Solution: “SetRenderState(D3DRS_FOGVERTEXMODE, D3DFOG_LINEAR);” has been changed to “SetRenderState(D3DRS_FOGTABLEMODE, D3DFOG_LINEAR);”.
- DirectX Bug (reported in last update): If fogging is turned on while a “Special Effect” is also on, all landscape surfaces show as pure white.
- Cause/Solution: Same as for the above bug (improper fog rendering setting)
- DirectX Bug (reported in last update): When leaving full screen mode the window’s title bar is sometimes pushed off the screen.
- Cause: DirectX does not keep window settings when switching to exclusive video mode.
- Solution: On resuming from full screen, “WS_BORDER” is added back to the window style.
- Code Cleanup (OpenGL): The 1bit stencil buffer has been turned off. Not sure why I even had this on in the first place.
- Code Cleanup (DirectX): Removed “D3DPRESENTFLAG_VIDEO” from the Direct3D present parameters flag and added “D3DPRESENTFLAG_DISCARD_DEPTHSTENCIL”.
- Code Optimization: Added some floating point optimization in the height position determination when the camera position moves.
- Engine Feature/Fix: The Engine now makes sure the user does not start underwater when a new fractal is initialized.
- Solution: The engine detects if the camera starts under the water, and if so, it picks the closest height map point that is above water and sets the camera there.
- Other: I compiled this one using the normal Microsoft Visual C++ compiler instead of the Intel C++ Compiler, which has resulted in a ~40% decrease in the executable size.
I’ve finally gotten around to getting my Fractal Landscape program up with information, yay.
I am currently releasing two “versions”
- The first “version” (which I will henceforth call OrgVer) is the original version I made that was specifically put together for a portfolio I was assembling when looking for a job at game companies in 2003.
- I threw OrgVer together as quick as I could as I was eager to start looking for a job at the time and needed some good working examples. Because of this, I didn’t concentrate on making the code pretty or maintainable like I do with most other code, as I never planned on releasing the source code for it. However, since it is a legacy version and I decided to continue with the project later on, I don’t mind releasing this original version’s source code now.
- I have made slight modifications to OrgVer as following so it can more easily be compiled and such:
- This was originally compiled for a specific version of DirectX 8, and has been updated for DirectX 9. This entailed changing a few function call names and their parameters.
- There were originally 2 separate versions included with OrgVer. One was the normal code base, and the other had just a few modifications to include graphics card occlusion culling. I have haphazardly combined the two files through macros found in the “#if UseOcclusion==1” section (UO, NUO, OrOp).
- Executable version information (which always includes the Hyrulean Productions Icon) has been added.
- The original compile (fully working with the fractal generation, lighting, and some other stuff), which I did not keep, was made in 2 to 3 days in, I estimate, 25 to 30 hours (including research on how to generate fractals and such). I worked on it for 2 or 3 more weeks after that though and finished OrgVer with about 1,411 lines of code.
- It only has a DirectX Engine (no OpenGL version in this one).
- Controls are as follows: (For more detailed information on the controls, see the corresponding keys in the “Controls” section)
- Mouse Movement - Rotates the camera.
- “=\+” - Increase the fractal level by 1.
- “-” - Decreases the fractal level by 1.
- “R” - Re-randomize the current fractal level.
- enter - Re-randomizes all levels back to a level 5.
- “W/A/S/D” - Forward, left, back, right (in order) keys
- “L” - Toggle lighting/sun
- “M” - Re-centers the mouse cursor. Only available in non-FullCPU mode.
- “E” - Example fractal
- “F” - Toggle full screen
- “J/K” - Revolve sun counter-clockwise and clockwise
- “C” - Toggle clouds
- “O” - Toggle wireframe
- esc - Exit the program
- Source Code Definitions (See the “Source Code Definitions” section). The differences are as follows:
- FullCpu: This toggles FullCpu mode for the executable.
- When in FullCpu mode (1), which is the default:
- DirectX handles keyboard and mouse input events.
- Program receives all keyboard/mouse input even if window does not have focus.
- The mouse cursor is locked to the window when it has focus.
- Frames are redrawn consistently, immediately after each other.
- When not in FullCpu mode (0), which is event driven:
- The Windows’ event message system is used to handle keyboard/mouse input
- Frames are only drawn when an update to the screen has occurred via a keyboard/mouse action.
- This mode is less resource intensive.
- UseOcclusion: Turn on hardware occlusion culling
- WinStyle: This is not found in OrgVer
- v0.5 Binaries - There are 3 executables of OrgVer found in this archive that only differ from toggled “Source Code Definitions”:
- v0.5 Source - Important Note: Source code has not been cleaned up and was originally never intended for release. See above information in this update for more details.
- The second “version” I am releasing was finished, I believe, within one to two months after OrgVer, when I decided to pick the project back up for fun and make it more organized, optimized, user friendly, and add some more bells and whistles :-). I completely rewrote the engine infrastructure to use a complex object oriented approach in c++ with polymorphism, multiple inheritance, virtual classes, and such.
- The source code and files of this version have not really been modified since I finished them in 2003, except, as always, for adding in executable version information.
- Downloads: v1.0 Binary
There are also 2 other source trees I made of the project that I need to see to and possibly release. They are DirectX and OpenGL versions that use experimental ray-tracing techniques to speed up height-map rendering, which I wrote a paper about (Aug 2003) and will release it later too under this project after checking over it.
I redid all the screenshots for the project page and added lots of information including: The (formatted and updated) original readme, important notes, features, technical details, controls, and source code options.
[Fixed in v1.05] Regrettably, when I seem to run the engine through the DirectX implementation, there are a lot of bugs on newer graphics cards. The OpenGL implementation seems to still work on all new graphics cards though :-). I am including a list of bugs here that I need to look into that didn’t exist on any of the graphics cards I tried this on when I originally made it, and will see to fixing them later. [Most or all of] these bugs apply to both versions released in this update.
: [Fixed in v1.05
- The water sometimes overlaps solid objects where it shouldn’t. This is due to some alpha blending setting conflicting with the z-buffer.
- The clouds do not show up at most viewing angles when fogging is turned on.
- When leaving full screen mode the window’s title bar is sometimes pushed off the screen.
- If fogging is turned on while a “Special Effect” is also on, all landscape surfaces show as pure white.
Other options I may add in the future:
- Infinite fractal range (this one would take a major rewrite). This would also allow better Level of Detail (LOD) optimizations.
- Running the engine in Windows’ event mode. This is currently available in the OrgVer “first version” available in this update. See “FullCpu” (the turned off version) in Source Code Definitions in this update.
- Re-mappable keyboard shortcuts
- Make “Special effects” available in OpenGL. Unfortunately, when I programmed this, the shaders I wanted weren’t really properly supported in OpenGL.
- Integrate the “ray-tracing” modes
- Dialog box keyboard shortcuts, including enter and escape
- Option to have the engine pause when window loses focus
- Make sure user doesn’t start under water [Added in v1.05]
- Real shadows based upon the height-map (Not likely that I’m going to worry about this)
- Lens flair when looking at the sun. I tried this at one point and failed pretty miserably, heh. Couldn’t get it to look right! This kind of thing is so pas sé/old school though ^_^;.
Two updates have been made in the project page’s layouts. First, thumbnails are now shown in individual project pages. Second, a feature has been added to inform of projects that have multiple downloads, as opposed to just a single binary and/or source file. The two projects this currently affects are Other Web Scripts and Websites.
The following projects have had thumbnails added to them: College Crap, Freedrive URL cracker, Highschool C++ Class, HTTP Zip, Small, Other Web Scripts.
The Eyes project thumbnail has been updated to have a transparent background to better represent it.
The following scripts have been added to the “Other Web Scripts” project
The following fixes have been applied to Directory Manager v1.1
- Base URLs “<base href="...">” are now supported (they no longer break links)
- Type: Feature (Base URLs are common for complex layouts)
- How: All links in the script are now absolute from the base domain instead of relative to the current directory.
- Type: Feature
- Why: Because there should always be confirmation before deleting data.
- User authentication can now be applied only to the script instead of the whole directory
- Type: Feature
- Variable Name: OnlyProtectIndexFile
- Why: Sometimes the user might want to only protect the ability to manipulate the directory, but not the files in it.
- How: This adds a “<files>” directive to the “.htaccess” file around the user authentication section.
- Header and Footer sections have been added to the top of the file right below the user variables section for easier manipulation of the page layout
- Type: Feature
- How: The user can now add layout header and footer information to the “HeaderSection” and “FooterSection” functions.
- Script now only shows normal files (not directories) in its file list
- Type: Bug Fix
- How: The “is_file” function is now used on entries returned from the “read_dir” function before they are added to the list.
- Side Effects: “.” and “..” were removed from the DoNotShowList variable.
- Fixed all improper static strings of “index.php” to properly point to the current file (MyFileName variable)
- The following user variables have been removed: MyFileName, RootDirectory
- Type: Simplification & Bug Fix
- Why: There was no need for the user to define these variables when the script can extract them. This also fixes a bug that occurs when a parent directory is symbolic linked.
- How: Instead of using the “getcwd” function and subtracting that from the provided RootDirectory variable, directory and script name variables can be extract from the $_SERVER['SCRIPT_NAME'] variable.
- Additional comments have been added in the file for code clarification
- The Directory Manager information has been updated to reflect the above updates.
- The “file by file protection” [possible] future update was also added to the information.
- PHP scripts that now only have 1 file to them are available for download as plaintext files with the extension “phpcode” that just need to be renamed to “php”; instead of zipping them.
The description, “how to use”, technical info, and an example have been added to the Image Zoom Effect in Other Web Scripts.
One of the most common requests I get from customers is the ability for their clients to upload files through a web page (HTTP) to the server; so I threw together from scratch[All of the script was written from scratch execept the HumanReadableSize function] a secure and robust script for this in about 6 hours which clocks in at about 360 lines. The single file works on just the directory it resides it, so the file can be uploaded to any directory you want it to work on with no extra hassle.
I know there are a lot of large applications out there for managed file uploading through a web interface, but I decided to make this anyway as it is kind of specific in its goals, being relatively lightweight and working on just a single directory at a time. Also since I made it myself, it’s easier to modify and update for specific clients needs, like direct integration into their website design.
Its main features are:
- Sorted file listing within the directory
- Upload files of allowed type (invalid extensions are renamed)
- Delete and rename files
- Create and delete user logins
- Logged in users can change their password
- All features are toggleable in three tiers:
- No user file found (Directory access is currently unrestricted)
- Normal user
- Admin user
- Easy basic configuration through a short variable list at the top of the file. Once it is configured the first time for a website, it is unlikely the configuration would need to be changed when copying (or symbolic linking) the file to other directories.
Finally got my laptop hard drive reencrypted with TrueCrypt 6.0 and got the hibernation and wakeup results in. The result lines for “Laptop** w/ no encryption” and “Laptop** w/ TrueCrypt 6.0 full drive encryption” have been filled in.
I added a subsection to the Projects list that just shows Games and Graphics projects. I’ll be concentrating on getting all of these project’s contents sections flushed out as soon as possible, as well as getting their downloads up where applicable.
Updated the UVLD
section of the “Websites
” project page with a new paragraph at the end (thumbnail creation). I've been moving the site to a new server for the client and stumbled upon that section, which I built a few years after the main website as an add-on, and had forgotten about.
Version 1.0 of the 3D Engines project has been uploaded, along with source code.
The content section has been written up (it was basically empty before...) and I redid all the screenshots to reflect the updated versions.
Live copies of the Java and Flash versions have also been put online.
Updated the script so that it now tries to stay within the browser window, and I think I made a minor speed improvement by changing the growing image to an absolute positioning instead of relative.
Found another bug in which the image zoom object might never start growing and stays active if mouseover event is never caught.
I decided the rather clumsy image effects on my posts with thumbnail galleries needed to be redone badly. They originally just displayed the full size pictures centered horizontally in the browser and then slightly above or below the current mouse position vertically, but this really did not work very well.
I just redid the HTML code in each of the thumbnail gallery posts so they are compatible with a new script I just now wrote [v0.9] in about two and a half hours. It kind of zooms in on the images when you mouse over them.
I still see a few bugs in the script and things I need to fix, but this is fine for now as I am exhausted and really need sleep. I thought this up as I was trying to sleep earlier, so I ended up giving up on sleeping in lieu of writing this to get it out of my system.
Things that need fixing still:
- Do not allow picture to overlap browser window (if it can fit)
- The animation seems a little choppy... need to see if it can be speed up
- Possible optional addition later: Position pictures in different directions of the thumbnail (above, below, or centered around each corner)
- IE bug when picture first loads and improper dimensions are read
The original Project Page format
was really overly crowded, as I knew from the beginning and was told by many people. Adam Shen
, whom I have worked with on many web sites
in the past, offered to help me with it by redesigning the structure, which is now completed
. This version is much more clear-cut and user friendly. All of the field captions are mouse-over description popup boxes, but I removed the denoting underlines on them, past the first box, as it was starting to crowd and confuse the layout again. I may add more filtering options for this section later.
I’ve finally completed all of the information and screenshots on the Websites Project page, except for Ixlair. I also had to retitle the last update
I made, as I had accidentally titled it as “Website 'Project' information completed” instead of “Website 'Project' information updated”, oops.
Added screen shots, information, and creation dates for the TicketPro websites.
The “Ixlair” project has been changed to “Websites” in which I will list all the website’s I’ve participated in as the primary programmer.
21 websites with their basic information have been added. Creation dates, screenshots, and more site information to come soon. 2 more websites to possibly come later.
Added a screenshot thumbnails column to the projects list page and screenshots for 25 of the projects.
Google Reader was showing some information in the RSS feeds I didn’t expect so email sections (managingEditor, webMaster, author) no longer show “email@example.com ...” and just have the latter part “Dakusan - see http://www.castledragmire.com/Contact”, and just “Dakusan” for the author of all posts/updates.
This unfortunately means the RSS feeds are no longer completely W3C compliant, but forcing email addresses for those fields is, IMO
, flawed itself because advertising email addresses on the web is just subjecting them to harvesting and mass amounts of spam.
Added my Résumé to the miscellaneous section.
Got in some reports that a lot of the site was hard to read, at which point I realized I had the font color as black on a lot of the pages, oops. I tend to not notice such things as it’s all easy for me to read. I went through the whole site and made sure that now all normal sized text is white (against the normal dark green background) and page titles are black. It will probably be a good idea to have one of my designer buddies to look through stuff soon and tell me if there are any “easy fixes” I can apply to anything that doesn’t look up to par.
- Removed extremely old contact information for the staff and linked the contact reference for me to the contact page on this site.
- Properly ordered the front page’s news posts, and added a note to the archive explaining why the content is missing. Maybe one day I’ll be able to find backups, but I doubt it. The tens of thousands of old unique hits were all lost for the same reason :-\.
Just fixed some HTML
errors on my old Ragnarok
site so now it works with Firefox as well as IE
. Next up, the old Hynes
I’ve owned Riaboy.com
for a little while now, which is used for family email addresses. I moved its launch page into my new site design, mainly because cPanel subdomains/addon domains don’t like my new apache directives for this site much, and it was easier and cleaner to just set it up here.
Highly annoying that apache checks for .htaccess files in parent directories well past the site’s “DocumentRoot”.
There is still a list a mile long of things I want to get up on the site and need to accomplish, but it is now at a state I am happy with to start letting people see it. So as of right now, I am putting it up at the root www.castledragmire.com for all to see. Yay!
Added the Dakusan License to the Licenses Page
, the Copyright
page, and added the license file to all project container (zip) files.
Uploaded version 1.0, updated screenshot, and added content section.
Added to the structure for the updates section so that it can link to multiple pages of updated content instead of just one, and filled in 3 past updates this applied to. This can be seen under “This update also applies to” on this page.
- The source code is really not well organized and hard to understand, so I made a few modifications for the v1.01 release, but I really need to update it more... maybe later.
- Added about window and version information
- Added window resizing routine to resize/move window controls and make sure background stays the proper color
- Updated project's page
- Updated screenshot to reflect new changes
- Updated contents
- Added original ReadMe to contents
- Removed obsolete WriteRam class
Uploaded version 1.0 of the binary and source
, and updated the screenshots to reflect minor GUI
Uploaded version 1.0 binary and source
, and added the content section.
I didn’t worry about cleaning up the code or adding the about window on this one.
Uploaded version 1.0 of the project and integrated the original ReadMe into the contents section.
Added version field to the projects table
Uploaded v1.0 of my Rag Packet Sender and wrote the content section. The original binary file compiled in 2003 is used and has not been modified like most all my other projects with a copyright, author information, and about page.
Uploaded v1.2 of RagExp and wrote the content section. The original binary file compiled in 2002 is used and has not been modified like most all my other projects with a copyright, author information, and about page.
Uploaded version 1.0 of small and wrote the content section. The main download links to the source as that is what is important. The binary is here
, which is just a 420 byte executable that starts and exits.
Uploaded v1.0 Binary and wrote content section.
Version 1.0 uploaded and description finished.
Lots of updates for the first release including:
- Closer clipping to the border so the outline looks sharper
- About window
- Reworked all the code to make it look better, cleaner, and added comments
- Confusion counters now take numbers in half second intervals over 3 seconds instead of just watching 3 full seconds at a time, making the activation timing much more accurate
- Rotation measurements are also now more accurate
Uploaded version 1.0, updated project page with more information, and added browser screenshot.
I decided ~3 hours ago that I needed an easier way to view system fonts, so I threw this together.
Completed project pages for 2 projects (Personal Libraries
Added screenshots for 1 more projects (HalfKey
Got up downloads for 1 project (HalfKey
Completed project pages for 4 projects (College Crap
, Highschool C++ Class
, Armra's Alarm Clock
Added screenshots for 3 more projects (POSTGate
, and more to Eternal Realms
and Armra's Alarm Clock
Got up downloads for 3 project (College Crap
, Highschool C++ Class
, Armra's Alarm Clock
Got up start/end dates for various projects
Changed project page
’s dates to now use text strings instead of physical dates (to allow for months as opposed to individual days)
Programmed the RSS
feeds today, making sure it conforms to RSS standards
, and added a RSS Valid icon to the Site Info page
Also added in screenshots to the content sections of 21 (of the current 53) projects
I’m going to be postponing launch a bit longer while I get up more project information and downloads, as that is technically the main purpose of this site ^_^;.
Finally putting the site up on castledragmire.com, under a subdirectory for now, for friends to start checking it over while I make the finishing touches to put it live, which should be around this Sunday.
Current finished content and sections includes:
Page I still need to finish include:
I worked a bit too hard on the site for a while and got a bit burnt out :-(. So I kinda slacked off on it... again... for 4 months XD. But I’m really determined and serious this time to get it up by Monday morning, so I’ll be working real hard through then. I’ve pretty much had everything finished on the site for a quite a while, I’ve just needed to touch up the posts I’ve done and I just didn’t have the energy to deal with them :-\, and the projects section of course which comes after. So yeah, will hopefully be able to keep pushing after this weekend and get all the projects up too. Wish me luck!
Created the Languages and Libraries
page which contains a list of all of my commonly used languages and software libraries.
I finally went through my hard drive and found all the projects I wanted to include and have written the main information up for all of them. All that’s left to do is fill in the Start/End dates, projected time, and content section. These last fields are by far the most time consuming and will probably take a while to flesh out and research. Wee, old chat log grep
Some stuff has been happening in my current life I don’t want to go into particularly, so I have been working a lot harder on getting everything up here. I will be trying to put the site live sooner than later, hopefully. Got the rest of the pages (only really had 2 of them partially done before) hastily coded, so things are looking relatively good. Things should be as I want them permanently in a very short time after launch, as quality really always comes first. It also really helps me to be working on a clock, as my best and most efficient work is done when being pressed.
I still have a lot to do until I’m ready for an official launch (meaning announcing it to everyone, submitting to search engines, etc) including some pretty big redesigns, but I’m happy with how things are right now to at least get it up. Putting something live helps make it easier to work on too because then immediate results are seen as opposed to “one big massive thing” you are working on that will get shown eventually.