Advertisement Jump to content
  • Advertisement


  • Content Count

  • Joined

  • Last visited

Community Reputation

307 Neutral

About socrates200X

  • Rank
  1. socrates200X

    Cool music genome graph

    Yup, is it! Thanks!
  2. socrates200X

    Cool music genome graph

    Soooo, I dig the Pandora Music Player (, which, for the uninformed, chooses music similar to a band you enter based on crazy ninja music comparsion algorithms gathered by the Music Genome Project. Anywho, I distinctly remember a similar but different page on the Net somewhere, where you would enter a band and the page would display a graph of bands, with your seed band in the center, and all the similar bands branching off in different directions. The bands' names were within circles colored based on perceived genre and sized based on famousness / number of records sold(?). It was really cool, but I can't remember the URL. I didn't just dream this, did I? It wouldn't be the first time...
  3. socrates200X

    HLSL and matrix multiplication

    Ah-ha!! A pox on Direct3D and their screwy transpose matrices, and on myself for not ferreting that out sooner. Thanks a bunch!
  4. This issue has been bugging me for some time now. The following is code from an application that performs simple transformation and lighting with an HLSL shader. First, the application source: /// Set effect constants D3DXMATRIX WorldViewProj, World, View, Proj; /// Matrices D3DXMatrixIdentity(&WorldViewProj); m_pD3DDevice->GetTransform(D3DTS_WORLD, &World); m_pD3DDevice->GetTransform(D3DTS_VIEW, &View); m_pD3DDevice->GetTransform(D3DTS_PROJECTION, &Proj); WorldViewProj = World * View * Proj; m_pEffect->SetMatrix("WorldViewProjMat", &WorldViewProj); And the shader source: /// Constants float4x4 WorldViewProjMat; /// Model space -> Projected space matrix /// Vertex shader. Transforms vertices from model space to projected /// space. VSOutput VS (float4 Position : POSITION) { VSOutput Out = (VSOutput)0; Out.Position = mul(Position, WorldViewProjMat); return Out; } This code produces the correct transformation for my scene. Now, my question is this: The mul() intrinsic used in the shader is defined such that if a vector is the first parameter and a matrix is the second, the vector is treated as a row vector. Assume p is my position vector in column form and W,V,P are my world, view, and projection matrices, respectively. This means that the two statements are equivalent: mul(Position, WorldViewProjMat) <=> pTWVP which leads to: pT(WVP) <=> (WVP)Tp <=> PTVTWTp But, this contradicts what I believe to be the correct matrix equation for 3D transformations, namely: PVWp which would, from right to left, apply first the world transform, then the view, then the projection to the position vector. For this to match what I calculate for the result of the mul() intrinsic, then each of the transforms has to be equal to its own transpose, i.e. they're symmetric. However, I don't necessarily think this is always the case. I'm stuck at this point mathematically, and the practical evidence of my working app shows that the shader code is correct. Can someone help sort me out?
  5. socrates200X

    Open/Save dialogs in DX9

    Yeah, I had a ball of a time sifting through the MSDN documentation trying to get GetOpenFileName() to work. Here's a code sample from one of my projects that uses it to open up a .txt file: /// Name: OpenFileProcess /// Description: Creates a Windows open file dialog box for loading the /// user-selected scene from file /// Params: NONE /// Return Value: NONE void OpenFileProcess() { OPENFILENAME OpenDialogInfo; const DWORD lMaxNameLen = 256; char strPathname[lMaxNameLen]; char strDialogTitle[20] = "Open File"; /// Init file dialog box info OpenDialogInfo.lStructSize = sizeof(OPENFILENAME); OpenDialogInfo.hwndOwner = g_Window.GetWindowHandle(); OpenDialogInfo.lpstrFile = strPathname; OpenDialogInfo.lpstrFilter = "Scene file (*.txt)\0*.TXT\0"; OpenDialogInfo.nMaxFile = lMaxNameLen; OpenDialogInfo.lpstrTitle = strDialogTitle; OpenDialogInfo.Flags = OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST; /// Create file dialog BOOL bFileChosen = GetOpenFileName(&OpenDialogInfo); /// If user presses Cancel button, skip remaining function if (!bFileChosen) { return; } /// Use filename to load scene g_pScreen->LoadScene(strPathname, g_hDC); }
  6. socrates200X

    Steal this article!

    In case any of you find yourself my current proverbial pair of shoes of searching for a game job out here in the Wild East, take heed. After putting my resume up on various resume-put-up sites, I get a call from an HR staffer at Comsys, inquiring into my experience with C++ and DirectX. I replied enthusiatically, not having much luck as of late in the "getting interviews" department. We traded back and forth info on my credentials and set up a phone interview time for Friday, 1 PM. It's only after I hang up that I realize, in my haste, I forgot to inquire as to the job description. Friday comes and goes with nary a cute ringtone from my cell phone. At this point, I'm wary but still desperate, so I call Comsys back, inquiring into the lack of interviewing and knowing what the job is and all that. Call back comes a few days later. Oh, I'm sorry, we meant to reschedule you for Monday as it works out better for our interviewers. We'll also send you an e-mail concerning the job description. Does that work for me? Sure, my steady diet of Chipotle and Coke is draining my bank account slowly but surely. I'll tag along a little longer. The sun rises and sets on Monday; no interview, no e-mail. My crisp professional persona and witty but appropiately demure interview quips are collecting dust. I decide, out of morbid curiosity, to call back Comsys again to get some explanation. Oh, the interviewers totally forgot! We're so sorry! Is Wednesday, 1 PM OK with you? Sure, lady. At this point, I've written off the company as a joke. Even if I did get hired by them (eventually), the thought that future business matters like, I don't know, my paycheck would be treated with such obliviousness freaks me out. I guess the lesson here don't trust companies that call you out of the blue after trudging your CV out of the millions on a resume website. I'll keep you informed if this third proto-interview comes to pass... On a lighter note, I've taken that first tentative step into the realm of "I think I'm pretty sure I know what I'm doing...sort of" by authoring what I believe to be a Gamedev article. The article provides and discusses a windowing class that I use regularly which encapsulates much of the perenially reused Windows code into nice, neat methods. I would greatly appreciate any feedback from the journal reading community (since you're reading stuff anyway) on my nascent article and/or the corresponding code. Thanks a whole bunch!
  7. socrates200X

    How would I loop this? (newbie question)

    for(;;) is equivalent to while(true), that is it's an infinite loop. You can leave any of the three for fields blank if you don't need them (the second field defaults to true), e.g.: int g_iLoopCt = 0; for (; g_iLoopCt < 8; ++g_iLoopCt) { /// ...blah }
  8. socrates200X

    Game Schools

    To reiterate what jwalsh brought up, the two big schools that game companies know and trust currently are Full Sail (Florida) and DigiPen (Washington), both because they've been around long enough and they've produced good developers. There are a lot of schools trying to get onto the "Game Design degree" bandwagon with varying success. Most of these curricula have had much less time to fully blossom, and some schools just want your money(!), so you have to be very critical of exactly what you're getting for your cash. First off, classes. The school should offer classes that move you towards your final job goal. If you want to program, they should offer a lot of programming classes, etc. Also, you want to maximize your class-to-portfolio ratio, i.e. you want walk out of each class with as much to add to your living body of work as possible. If you see "Advanced Animation Techniques", you think, "Ah, I'll get a good animation demo or three out of this." and so on. "Game Project" classes are golden as ideally you walk out of them with a full, hopefully impressive game. Plus, they give you the best feel for how working on a game development team will be. Secondly, auxillary resources. How hooked up is your school, resource-wise? Schools like UAT and DigiPen have access to SDKs, computer labs, books, people, etc. that smaller schools may not. Any good program can teach a student to program real-time graphics and game engines (note the adjective "good" [smile]), so resources can be the tipping point for whether or not you decide to drop $40K and 4 years on a school. All in all, the name of the game is scrutiny. Look up various programs' curricula and compare. See which has more comprehensive classes, more opportunities to develop your demo reel, more tools to help you develop more impressive content while you're there. Any classes / resources that a school is lacking you'll have to make up on your own in addition to the money/time you're paying the school. Make sure not to waste either.
  9. socrates200X

    Game Schools

    I feel compelled to speak up in agreement with rileyriley, another UMD alum. [smile] I didn't know that I wanted to do game programming until my junior year of my Comp Sci degree. I don't think I had much of idea what to do at all until then. I dabbled in writing, physics, math, and philosophy until I settled on programming, something I wouldn't have been able to do had I gone to DigiPen at first. The specialization that DP specializes in is a two-edged sword; you'll be ahead of the game in the game industry, but not much in any other field. As cool as programming 3D model animations is, there's not much call for it outside game development. That being said, I amend my earlier advice. If you're absolutely sure you want to go into game development and nothing else, do a game school. If, like 90% of anyone else, you're just not sure what the hell you want yet, do a traditional school. The broadened perspectives are worth it, and are a far sight better than being stuck in one field for the rest of your career.
  10. socrates200X

    Game Schools

    Quote:Original post by DragonGeo2 Quote: I was in a hiring position for nearly a year and I can tell you that there are primarily two schools which employers look at seriously for game development. Full Sail and DigiPen. Both have relatively solid programs and good repuations. I can, however, tell you from my past experience in grading programming tests, etc...that by and large DigiPen students faired better than Full Sail applicants. Very good! I was recently accepted to attend DigiPen for it's four-year bacchelor's degree program in "Real-Time Interactive Simulations". I had heard it was *quite* the hard course, however. Do you know how well students who have attended that course have faired? Congrats in getting into DigiPen! It's a tough nut to crack, depending on whom you ask. I'm a recent alumnus from the DP Masters class. The Bachelor's program is tough in the sense that they push a very full course load on you from the start (averaging around 20 creds a semester), expect you to acclimate quickly, and do much of the learning / team building *outside* of class. If you're not a self-pacer, it can be very easy to get left behind. Nevertheless, it's a reputable school for a reason and I found the seniors to be very knowledgable and able to create some fun stuff. (Gooo Rumble Box!) As for the "traditional vs. game college" point, I went traditional and I know a lot of friends that went straight into game school from high school. The main difference I found was fundamentals over specialization. My DigiPen colleagues could code realtime graphics backwards and forwards, leaving me in the dust, whereas basic data structures and algorithmic analysis tripped them up where I excelled. Because of this, DigiPen seniors hit the ground running as they're able to make games right out of school. But without a good grounding in the basics of software engineering, that'll only get you a few years before you burn out, or worse, become obsolete.(!) Since you can compensate for either education by doing a little overtime studying (which you should be doing anyway), I say go for game school. That way, learning about the industry and developing your portfolio will be a lot easier. Not to mention that being there puts you in touch with a lot of contacts, which are very useful in getting your foot in that door. While there, use that precious little free time to bone up on applying data structures and algorithmic analysis to your code so that 5 years down the line, you're in a better position knowledge-wise to outpace your peers for that senior developer position. Neither way's perfect, but game school gets you the industry knowledge you need, without leaving you with a bunch of "helpful" UNIX / Java projects on B+ trees as your "demo reel" for game companies. Not that I would know anything about that...[lol]
  11. socrates200X

    Backwards matrix multiplication

    Ah! Totally useful to know. Thanks!
  12. Correct my thinking on this if I'm wrong: /// For each bone, compute final matrix by computing first by bone offset, /// then by the bone's combined transformation matrix for (unsigned int uiBoneCt = 0; uiBoneCt < uiNumBones; ++uiBoneCt) { D3DXMatrixMultiply(&m_pBoneMatrices[uiBoneCt], &pMesh->pBoneOffsets[uiBoneCt], pMesh->m_ppFrameMatrices[uiBoneCt]); } /// Update mesh with new animation transforms void *SrcPtr, *DestPtr; pMesh->MeshData.pMesh->LockVertexBuffer(D3DLOCK_READONLY, (void**)&SrcPtr); pMesh->m_pSkinMesh->LockVertexBuffer(0, (void**)&DestPtr); pMesh->pSkinInfo->UpdateSkinnedMesh(m_pBoneMatrices, NULL, SrcPtr, DestPtr); pMesh->m_pSkinMesh->UnlockVertexBuffer(); pMesh->MeshData.pMesh->UnlockVertexBuffer(); This is part of an implementation of a skinned mesh animation project. As the theory goes, the bone offset matrix for a bone transforms vertices from the original "bind space" to bone space, then the combined transform takes the vertices from bone space to character space, rotating / translating based on any local animations. Now, this means that if B is the bone offset matrix and C is the combined local bone transform, then the correct matrix multiplication order would be CBv, since matricies multiply from right to left. But, as the code shows, the multiplication is BCv, which seems false. Changing the order messes up my model. Is there some weird way DirectX handles matricies?
  13. socrates200X

    The image of procrastination

    Yesterday, I attempted to rev myself up to restart the animation project I had messed up earlier on (see Feb 26), but the Motivation Gods weren't giving me the juice. I wasn't feeling...animate-y. So, to prevent myself from a complete loss of a workday, I spent the better part of my day toiling over MS Paint, crafting myself a business card logo out of nothingness. The laws of thermodynamics have nothing on my Paint skillz. In hindsight, it looks a lot like the Super Metroid logo, which wasn't my original intent, but I think I can play it off as an homage. As I'm not really any sort of artist, I was impressed with how not horrible this came out. Anywho, it's going on my business cards, so be on the lookout!
  14. socrates200X

    Skinned mesh animation

    Yeah, so, at DigiPen, we had a class in Advanced Animation Techniques, one of which was "hierarchial models and animations", which involved treating a model as composed of "joints", each with its own local translation/rotation matrix. Our first project involved implementing this, which I attempted to do with DirectX. Apparently, they had a very similar but differently named idea called "skinned meshes", where a model is composed of "bones", each with its own matrix. I spent a lot of time and code effort translating between my two interpretations of the concept. For some reason, it didn't hit me that the two were the same until just recently. How I make it out of bed each day, I'll never know...
  15. socrates200X

    First journal entry

    This is my first journal entry. As such, there's not much to report.
  • 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!