• Content count

  • Joined

  • Last visited

Community Reputation

127 Neutral

About Beem

  • Rank

Personal Information

  1. How do Rotation Matrix Work?

    I hate to be the bearer of bad news, but all you really need to know right now, is that nobody knows what the matrix is. If you multiply two of them together it catenates them and then both transformations will occur. The reason you can do this is because 4x4 matrix with multiplication and addition defined as we normally do form a ring. In a ring multiplication is associative, so it matters not which matrices gets multiplied when, but only that they are properly pre-multiplied or post-multiplied depending on what you want to accomplish. For now just follow the formulas that tell you how to form the matrix, where to put the cosine and sine of the angles, and you'll have to be careful about transposes, since some graphics libraries use row vectors and some use column vectors. With row vectors, you post multiply by the matrices, with column vectors you pre multiply them, and when you switch from one to the other you must transpose the matrices. This will potentially cause for the most confusion. The best way to think of matrices as some kind of black box, a function, that takes a vector as an input and ouputs a vector that has been transformed. With 4x4 matrices, which is what he use in video games, because they allow us to use the magical homogenous transormation, the input will be a 4x1 vector. Just set the w component to 1 for positional transformations, and you're good to go. Don't worry about setting w to antyhing else. Now the reason I said I had bad news, is because if you truly want to understand matrices, you got to go to college to learn about linear algebra. I'm sorry to say it, but without a strong mathematical background if you tried to just read about matrices you'd think they are just some mystical force in the universe that somehow just work. There are all sorts of interesting reasons why we can pull off what we do in video games using matrices, such as orthogonal transformations, and the like, but it really takes a strong mathematical background to get understand it. I will say this, however, if you get a degree in mathematics, you can still get a job in video games, and also since you have a degree in math and not computer science, people won't ask you to fix their computers all the time cause they don't know you know about computers.
  2. R-value and L-value confusion

    About that generic renderer, you don't actually want to have direct3d resource laying around in plain sight, correct? It seems to me like your master list, wherever "i" is coming from, should be internal to your renderer, and it should just contain a list of poitners to direct3d resourcees, no casting necessary. Then if you do write an OpenGL renderer, it will have it's own list of OpenGL resources. If you want to use the same code for that list, use a template. The only place where a renderer needs to be generic, is in the interface, in which case you might just return a number that represents where the resource is in some master list, but only the renderer knows if the resource is D3D or OpenGL and what information it's going to send to the video card when you want to use it.
  3. I taught my friend C++ over Steam chat, here's how it went.. Enjoy. 5:37 PM - Jack: Also you need to put semicolons all over the place. 5:37 PM - Jack: There's not much ryhme or reason as to where you put them, but trsut me, you need them. 5:39 PM - Scamster: [img][/img] 5:40 PM - Jack: Whenever some comes to me and says their game is broekn, I tell them it's probably a semicolon, and it almost always is. 5:40 PM - Jack: No why I say there is no rhym or reason is because... 5:40 PM - Jack: class SomeClas { }; <= needs semicolon 5:40 PM - Jack: but 5:41 PM - Jack: namespace SomeNamesapce {} <= doesn't ened semicolon. 5:41 PM - Jack: And... 5:41 PM - Jack: switch(somevalue){} <= doesn't need semicolon. 5:41 PM - Jack: but. 5:41 PM - Jack: enum SOMENUM{}; <= needs semicolon. 5:41 PM - Jack: Also 5:41 PM - Jack: for(int i=0; i<3; i++){} <= has semicolons in weird places, but doesn't need one at the end. 5:42 PM - Jack: What's alright though is if you add a semicolon where you don't need one, in many cases it's okay. 5:42 PM - Jack: not the namespace one thugh.
  4. I want to play devil's advocate with this post. Scripting sounds cool and all, but you are making asmall project, and you are going to find that going back in forth between scripting and getting the scripting to work with your engine, is going to be incredibly difficult and take a really long time, and you won't have anything worth showing anyone for a long time. I know a lot of people use Unreal, which is all about scripting, and so when it comes time to make your own engine, you're like "I want scripting, like Unreal". I think you should take a note from id Software, instead of using a scripting language, just use good old C++ and put your AI and game flow into a DLL file, then you just have to write some kind of SDK, a pure virtual class, or list of callback functions. It's going to save you a lot of headache, plus you will know exactly how memory is being managed.
  5. There is no such thing as an alpha channel in the back buffer. If you want to blend with the desktop, you'll probably need to render to a GDI surface, then use a Windows API call to blend it to the desktop. Here is something I found on the topic of alpha blending in the windows API
  6. can somebody clarify this

    [quote name='smasherprog' timestamp='1313878593' post='4851739'] Who knows why that is there. It is perfectly valid to specific an alpha channel in the back buffer. I would ignore this, and move on because it doesn't make any sense. [/quote] This guy sort of right. But the real answer is that technically there is no such thing as alpha on the back buffer since that wouldn't have any effect when getting copied to your monitor. (What would the back buffer get blended with? Your monitor is suddenly going to turn partially transparent in real life!) Alpha channels only have meaning if they are somehow getting blended with something. In my experience, though, most video cards could care less if your back buffer format is specified as having an alpha channel. The final value of the alpha channel in the back buffer will either never be written, or will be ignored. I would stick with the documentation, though, and use D3DFMT_X8R8G8B8, just to be safe.
  7. Yeah I didn't plan on using the mesh or font functions, because I'm using a proprietary format for those. I had written my own texture loading methods, which implemented third party libraries like libpng and libjpg, and my own tga library that I had written a few years back, but after reviewing D3DXCreateTextureFromFileInMemoryEx this seemed to be capable of doing everything I was doing anyway, with DDS support as well, so I figure I'll archive the code I was using so that I can reduce the number of files that need to be compiled. As for my math library, I'll keep it around for a while, as I have been using it for my physics engine and server, and I don't want my physics engine or server to require any Direct3D header files. I've also been playing around with AEGIA and Newton Game Dynamics which use their own math libraries, so if I ultimately decide on one of those for physics I'll probably drop my math library altogether.
  8. Do professional game developers use the D3DX library? Particularly the math library, and texture loading functions? I've been developing a demo engine, and I've programmed my own math library (using SIMD instructions) and texture loading methods, but this all seems like a waste as most of the stuff is just a duplication of functions that are already available in the D3DX library anyway, I understand that there is a similar library available in the OpenGL SDK as well. So I'm wondering if all my programming has been a waste (besides the practice) or if professional game developers use the D3DX library to save time?
  9. Adventure Game Detective Fiction Survey

    Yeah I did the survey. I should mention that I don't play many adventure games, but those two were my favorites. I also recently play a demo of Sherlock Holmes: The Awakened, and it was pretty good. The most important thing, in my opinion, is story. I'd say the story and the interface are the most important parts. The interface has to be easy to use. Blade Runner was strictly point and click. You didn't have to select any complicated menu options, you didn't have to select "Dialog" mode or "Grab" mode. Gabriel Knight 3 was somewhat similar in that when you clicked on something a list of options came up (which was alright). As for story, you need a good one. I never played Myst, but I did hear about it, and I played Timelapse, which I hated. These games were all puzzles and no story. The worst experience I've had in any game (adventure or otherwise) is when I have no clue what I am supposed to be doing, as it happens this is what most of them are like, and so I don't play them often.
  10. Adventure Game Detective Fiction Survey

    When it came to detective games I really like the Gabriel Knight series as well as Westwood's Blade Runner.
  11. DRM Removal

    Hello, I'm getting ready to format my hard drive and reinstall the operating system. However, I have purchased quite a bit of DRM protected music in WMA format. Previously I was able to back up my DRM licenses and restore them through Windows Media Player, but this no longer seems to be an option in WMP11. In the past I have burned my DRM files to audio CDs and then ripped the CDs, but I have noticed that the audio quality is noticeably degraded when I do this. I am wondering if there is any way I can remove the DRM protection without loosing audio quality. Also I am currently running Windows XP Pro, but through my College Microsoft provides software for free so I also have the option of Windows Vista Business Edition. My computer is about two years old, running a Pentium D @ 3200 Ghz, 2GM RAM, Geforce 7600 (512MB) video card. If I do install Vista will it the performance be seriously degraded, and is there any reason to use vista (my Geforece 7600 is DX9, so I'm not sure if DX10 is going to matter at this point)? Any advice would be appreciated. Thanks.
  12. Smooth Collision Question

    Alright I figured it out. I was reading about reflection vector calculation in the book "Mathematics for 3D Game Programming & Computer Graphics" by Eric Lengyel (p. 125) and in explaining how a reflected vector can be calculated he explains that the first part is to find the vector perpendicular to the surface with respect to the vector which is given by: perp N L = L-(N*L)N which is the equation used in the function I mentioned in the previous post. Where N is the normal vector of the plane, and L is the vector representing the velocity of the object.
  13. Hello, I have finally gotten far enough in my game engine development process to deal with objects colliding against the world. My concern was smooth movement when an object collides with a world surface. Unsure of what to search for on the internet, and a review of my mathematic books revealing nothing, I ultimately decided upon referring to the Quake 3 source code and I found the following: void PM_ClipVelocity( vec3_t in, vec3_t normal, vec3_t out, float overbounce ) { float backoff; float change; int i; backoff = DotProduct (in, normal); if ( backoff < 0 ) { backoff *= overbounce; } else { backoff /= overbounce; } for ( i=0 ; i<3 ; i++ ) { change = normal[i]*backoff; out[i] = in[i] - change; } } "overbounce" was typically set to 1.001f when the function was called. "normal" is the the normal vector of the plane that the object is colliding with, "in" is the velocity of the the object, and "out" is the vector that should represent the adjusted velocity of the colliding object. By modifying this code to work with the design of my engine I have achieved the desired effect of smooth movement against surfaces. My question is this: What exactly is this code doing? Can anyone explain it to me or point me to a reference that explains why this solution does what it does. I mean I'm satisfied with the results, but I would like to know why it works. Peace Out.
  14. Ugly Lighting

    Thanks guys, that works, the mesh looks a lot better. Peace Out.
  15. Hello, I am currently experiencing some very ugly lighting using Direct3D 9. I am using a D3DTS_WORLD transform to both transform and SCALE a mesh. I capitalize the world scale because that is where my ugly lighting is showing up. Here is the mesh as it is lit when it is scaled (notice the sort of jagged lighting on the character's back): Here is the mesh not scaled: The lighting is much more smooth when the world transform does not scale the mesh. Here is what I'm doing to set up the world transform: D3DMATRIX matScale, matTrans; D3DXMatrixScaling(&matScale, SCALE_FACTOR, SCALE_FACTOR, SCALE_FACTOR); D3DXMatrixMultiply(&matTrans, &matScale, &m_matOrient); m_pDevice->SetTransform(D3DTS_WORLD, &matTrans); Any help as to what my options are to get the lighting to look more uniform when the mesh is scaled would be appreciated. Peace Out.