Advertisement Jump to content
  • Advertisement


  • Content Count

  • Joined

  • Last visited

Community Reputation

181 Neutral

About Ratman

  • Rank

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

  1. You should go to college by any means necessary for the experience alone. Get scholarships, community college for 2 years then transfer, part time job, loan from your parents, etc. Its about the atmosphere, the social setting, its just a great environment that will help you grow as a person and become acclimated to living on your own. This all, IMO, comes before "it'll teach you how to program", because thats honestly 5th or 6th on my list of "why you should go to college". All that being said: having a *great* demo is invaluable for getting noticed and securing interviews when you dont have previous industry experience. We get a ton of applicants here that have virtually no side projects or previous experience in games: we'll never hire someone just because they have a CS degree. We will however interview anyone who is able to show talent through a portfolio of demos/side projects. [Edited by - Ratman on October 4, 2006 2:19:34 PM]
  2. Ratman

    Final year project Help!

    Start small, very small. If you've never made a full game before then what you have so far seems like too big of a project, especially for one person. If you have a drive to create something you are better off taking on something you can handle and *finishing* it and polishing it until it is A+ work, rather than stretching yourself too thin and turning in an incomplete, unpolished game of B- work. Remember that content will almost always be your bottle neck: not tech or programming features. If you decide to make all those materials and ammunition, that is just more content you will have to produce (models, textures, animations, sounds etc). I hate to pimp myself but these are the project I did while in school: Start at the bottom and scroll up. I bit a little off each time and got better with each iteration. Finally by the end I was able to make the game I really wanted. Look at Heart Attack, Marble Bandits, and Space Pool for examples of making games that dont rely on lots of content. Be realistic in your limitations and work around them!
  3. Ratman

    Font Rendering question

    Thank you sir, thats just what I wanted to hear. Also your journal is very helpful :D
  4. Im currently using Free Type to extract font pixel information and blit it to a DX texture. My question is when it comes to rendering each character to a textured quad on screen - what is the best way of doing this? The obvious seems to have a vertex buffer for a triangle strip, fill it out with the proper data and punt it down draw primitive. Is this efficient though? This would require locking/unlocking a vertex buffer each time that I draw text to the screen. I guess thats what D3DUSAGE_DYNAMIC is for, but Im just hesitant to do this as its ingrained in my head to minimize locking/unlocking vertex buffers. The only other option I see is using like D3DXSprite interface, which in the end is probably doing the same thing as described above. Im wondering though if it has any extra optimizations going on behind the seen that would make it a better choice? Any suggestions? Maybe Im overlooking something, just thought I'd toss this out before I got too deep. Thanks
  5. Ratman

    physics engine

    Rigid Bodies may be a good start. Ratman
  6. Ratman

    Do i have the mathskills?

    Go for it. At worse you will see the stuff is over your head but will have given yourself some exposure to linear algerbra so when you do encounter it in school, you will know what its used for. Personally I feel people overstate the amount of math required to make 3D games. Being able to think logically, like solving math problems, is important. Having a deep knowledge of calc and linear algerba of course helps, but isnt 100% necessary to make games at a hobbyist level. But of course, you should always start small. You'll probably want to start with 2D games before doing 3D games (if you have no experience). But dont be afraid to try! Dave
  7. Ratman

    LaTeX in Maths lectures?

    The best solution is to write them by hand then go back and type them in latex. Seriously, you will learn the stuff very well by recopying your notes and you'll have both hand written and digital form. Ratman
  8. Ratman

    Phone Interview - What goes on?

    Bottom line is dont sweat it. Having confidence and talking smoothly is probably the most important thing. I had 3 phone interviews with game companies and they were all pretty different. You can look at who is giving you the interview. If its a programmer expect to get asked stuff like "how do you debug your games" "describe a difficult problem in your last project" etc. If its an administrator type of person it will probably be more of a personality test. "Fuzzy" questions like how you communicate and what your best/worst trait is, where do you see yourself in 5 years, etc. The best thing to do is figure out what kind of interview they are giving you and give them that. Don't try to sound overly technical if they are just trying to get to know you. Be relaxed and be ready to talk about games. Ratman
  9. Ratman

    GLSL model-world-eye space

    Ok, I was way off, nevermind :) [Edited by - Ratman on March 14, 2005 10:29:17 AM]
  10. Hi guys, trying to write my first GLSL shaders and am getting hung up on something silly: I have some bump mapping normals stored in a texture, they are in model space. I need to convert them to eye space so I can do lighting calculations. I see that I can use gl_NormalMatrix to convert from world space to eye space, but I'm lost at going from model space to world space within the fragment shader. Can anyone help me out here? Thanks Ratman
  11. Ratman

    ODE: running out of stack space

    Yes, ODE uses a recursive solver AFAIK (or at least by default). We ran into this exact same problem last year. Theres a compiler flag you can set in visual studio (under project settings) to force a min stack space. We had to set it to like 80mb to get one level working.
  12. Ratman

    Physics Library Opinion?

    Long answer that I already had written for something else. Just copying and pasting: I’ve used 2 physics libraries: ODE and Tokamak. I’ll explain in detail what I think about using 3rd party physics libraries in general, and then compare the two. Then I’ll talk briefly about other 3rd party APIs, in less detail. What they’re good for: Both ODE and Tokamak are great for prototyping game ideas. They are great for getting things up and running quickly, and can give a good indication if something is going to be fun. The idea for Space Pool (http::// came to me from playing around with ODE when I was trying to learn the API. They are great tool for helping spur creative game ideas. What I don’t like about them: First, the physics library you use is probably going to steer a lot of engine design decisions you will make down the road. You’ll probably have to use an event-driven model for game logic (not a bad thing, but it’s the physics library that’s kind of forcing this decision and will influence how you implement it). You end up programming your game around the physics library. I just don’t like giving up that much control. Second, they are still both buggy. When something doesn’t work, there’s not much you can do. For example, in a 48-Game programming contest, my partner and I were using ODE to make our game. We had some simple levels working great. Then we started stacking boxes and making more complex scenes; then everything started breaking. There wasn’t much we could do; the library just wasn’t mature enough to handle what we wanted. What we ended up doing was hacking in work-arounds and setting ridiculous compiler flags (explained below) to get it working for the contest. ODE vs. Tokamak ODE pros: open source, lots of active developers/users, active mailing list, and multi-platform. ODE cons: recursive solver (when I used it), problems with stacking rigid bodies. Tokamak Pros: good at stacking rigid bodies, iterative solver, some nice extra features. Tokamak Cons: Closed source, poor dev community/support, and infrequent updates. ODE really leaves a lot up to the user to squeeze out performance. Users should ideally come up with their own way to partition objects into separate spaces (1 world -> multiple “spaces” -> many objects live in “spaces”) and are expected to deal with the potentially large memory footprint that comes with solving their solver. The best way to deal with the recursive solver was to let ODE run in its own thread, which complicates things more than some users may want. ODE’s solver was recursive: the more active bodies in a system the larger the stack grew which caused problems on some machines. In one case I had to set a compiler flag to allocate at LEAST 80mb for stack space in order for the game not to crash (this certainly wouldn’t fly on a console!). There was no elegant way to tell the solver to only do K iterations as you can with Tokamak. The downside with Tokamak’s iterative solver is that you must specify a max # of rigid and animated bodies when you create Tokamak’s simulator class. Memory usage of the simulation is then constant (not always a bad thing but if you have spikes in the # of rigid bodies in a scene throughout the game, you are potentially wasting resources when there is a small number of bodies). Tokamak also really tries to let the user not worry about how things are working behind the scenes. There seemed a lot less a user could do to tweak performance, or at least there was a lot less the average user has to do. Tokamak was a lot more user friendly and easy to use (good for a small project, for a big project though you want more control). To be fair, the ODE developers were beginning to work on an iterative solver right about the time I unsubscribe from the list. I never got a chance to use it though, so I don’t know how it “stacks” up. Conclusion: I’d recommend using these for prototyping games or if rigid body dynamics are needed as a small portion of a game and there are not enough resources to write a custom physics system. For Moon Wars ( ) I decided the physics was not the focus of the game and that I could get away with writing my own simple physics engine. Instead of using rigid bodies, I just used simple position/velocity/acceleration physics equations and updated objects according to delta time between frames. ------------- Hope that helps. I'm sure some of stuff I've said is out of date by now (been bout a year since I was playing with ODE and 6+ months since Tokamak). So feel free to correct me. Dave
  13. I got my first programming job at 17. It was at a place right near my high school, I didn't even know it existed. I got lucky though, the owner's daughter was in my C++ class and fell behind. I helped her get back up to speed and she talked her dad into giving me an interview. It was a good deal, worked full time in the summers and did a co-op program for school: got credits for working the job and got to leave school 2 hours early. Plus getting paid that much money back then was nice :) Its all in who you know. Anyone who gives a 17 year old a shot is taking a chance. Work your social network, don't lose contacts, and remember that anything is a start. Work your ass off when you get in and prove yourself.
  14. Ratman

    Newbie HLSL Help

    Thanks for the reply, I'll try that out.
  15. So I just hacked together a my first shader in HLSL. It ran perfect on my Geforce 6800, then I ran on a lab computer w/ a Quadro FX1000 and it is brought to a halt. I tried elimanting the # of the light sources and there are noticable performance hits on every setting except 1 light. Im trying to do simple per-pixel diffuse lighting. Im only trying to apply this shader to my terrain, which is pretty small (50x50 vertices) Im totally new to shaders so Im sure Im doing something terribly wrong. I know the distance(...) call in there is pretty bad but even when I replace it with a constant it still runs slow (and doesnt render properly obviously) I just want to get per-pixel diffuse lighting for as many light sources as possible. Im sure there are better ways to do it. Can anyone please help? Thank you Ratman // ------------------------------------------------------------- // variables that are provided by the application // ------------------------------------------------------------- float4x4 matWorldViewProj; float4x4 matWorld; float4 vSpecIC; float4 vDIC1; float4 vLightPos1; float vLightRange1; float4 vDIC2; float4 vLightPos2; float vLightRange2; float4 vDIC3; float4 vSpecIC3; float4 vLightPos3; float vLightRange3; float4 vDIC4; float4 vSpecIC4; float4 vLightPos4; float vLightRange4; float4 vDIC5; float4 vLightPos5; float vLightRange5; float4 vecEye; texture ColorMap; sampler ColorMapSampler = sampler_state { Texture = <ColorMap>; MinFilter = Linear; MagFilter = Linear; MipFilter = Linear; }; // ------------------------------------------------------------- // Output channels // ------------------------------------------------------------- struct VS_OUTPUT { float4 Pos : POSITION; float2 TextUV: TEXCOORD0; float4 Light: TEXCOORD1; float3 Norm : TEXCOORD2; float4 Light2: TEXCOORD3; float4 Light3: TEXCOORD4; float4 Light4: TEXCOORD5; float4 Light5: TEXCOORD6; }; // ------------------------------------------------------------- // vertex shader function (input channels) // ------------------------------------------------------------- VS_OUTPUT VS(float4 Pos : POSITION, float2 Tex: TEXCOORD0, float3 Normal : NORMAL, float3 Tangent : TANGENT) { VS_OUTPUT Out = (VS_OUTPUT)0; Out.TextUV = Tex; // compute the 3x3 tranform matrix // to transform from world space to tangent space // transform Position Out.Pos = mul(Pos, matWorldViewProj); // transform Normal Out.Norm = mul(Normal, matWorld); float3 PosWorld = mul(Pos, matWorld); float range = vLightRange1; float3 light = vLightPos1 - (PosWorld); //Light 1 Stuff float d = distance(,; if(d > range) d = range; Out.Light = vLightPos1 - Pos; Out.Light.w = 1 - d/range; if(range == 0) Out.Light.w = 0; //Lgith 2 stuff d = distance(,; range = vLightRange2; if(d > range) d = range; Out.Light2 = vLightPos2 - Pos; Out.Light2.w = 1 - d/range; if(range == 0) Out.Light2.w = 0; //Light 3 d = distance(vLightPos3, Pos); range = vLightRange3; if(d > range) d = range; Out.Light3 = vLightPos3 - Pos; Out.Light3.w = 1 - d/range; if(range == 0) Out.Light3.w = 0; //Light 4 d = distance(vLightPos4, Pos); range = vLightRange4; if(d > range) d = range; Out.Light4 = vLightPos4 - Pos; Out.Light4.w = 1 - d/range; if(range == 0) Out.Light4.w = 0; //Light 5 d = distance(vLightPos5, Pos); range = vLightRange5; if(d > range) d = range; Out.Light5 = vLightPos5 - Pos; Out.Light5.w = 1 - d/range; if(range == 0) Out.Light5.w = 0; return Out; } // ------------------------------------------------------------- // Pixel Shader (input channels):output channel // ------------------------------------------------------------- float4 PS(float2 TextUV: TEXCOORD0, float4 Light:TEXCOORD1, float3 Norm : TEXCOORD2, float4 Light2:TEXCOORD3, float4 Light3: TEXCOORD4, float4 Light4:TEXCOORD5, float4 Light5:TEXCOORD6) : COLOR { float4 Acolor = tex2D(ColorMapSampler, TextUV); float3 Normal = normalize(Norm); //Light1 float3 LightDir = normalize(Light); float Diff = saturate(dot(Normal, LightDir)); //Light2 float3 LightDir2 = normalize(Light2); float Diff2 = saturate(dot(Normal, LightDir2)); //Light3 float3 LightDir3 = normalize(Light3); float Diff3 = saturate(dot(Normal, LightDir3)); //Light4 float3 LightDir4 = normalize(Light4); float Diff4 = saturate(dot(Normal, LightDir4)); //Light5 float3 LightDir5 = normalize(Light5); float Diff5 = saturate(dot(Normal, LightDir5)); return Acolor * ((.75) + (vDIC1 * Diff * Light.w) + (vDIC2 * Diff2 * Light2.w) + (vDIC3 * Diff3 * Light3.w) + (vDIC4 * Diff4 * Light4.w) + (vDIC5 * Diff5 * Light5.w)); } // ------------------------------------------------------------- // // ------------------------------------------------------------- technique TShader { pass P0 { Sampler[0] = (ColorMapSampler); // compile shaders VertexShader = compile vs_1_1 VS(); PixelShader = compile ps_2_0 PS(); } }
  • Advertisement

Important Information

By using, you agree to our community Guidelines, Terms of Use, and Privacy Policy. is your game development community. Create an account for your GameDev Portfolio and participate in the largest developer community in the games industry.

Sign me up!