• Advertisement


  • Content count

  • Joined

  • Last visited

Community Reputation

2297 Excellent

1 Follower

About GoliathForge

  • Rank

Personal Information


  • Twitter

Recent Profile Visitors

7647 profile views
  1. Male Character Introduction

    Today I achieved a good stopping point in the modeling process for a new character. He comes in a little heavy at 10k vertices. Below is a render with vertex colors applied. UV unwrapping and texture painting will come soon. I like using colored materials early and apply to faces to get a feel for a finished piece instead of staring at the default clay gray. The downside perhaps would be vertex counts have the potential of going higher because of additional edge loops that get jammed in to separate material boundaries. It's just how I work. The upside, if you can give it one, is material islands can be easily selected when moving to the texture stage. I tried something a little different this go around with Blender by sculpting the form first and then a full retopology. I've resisted sculpting in the modeler because the tools never felt right coming from zBrush but giving it a fair chance, I happened upon a happy zone. After finishing retopology, I was excited to get a rig on him and have a play. All honesty, I'm going have to work on it, but this quickie test was satisfying. Little dude's pretty cool. I still need to find my way around the graph editor to dial in keyframe curves, refine for anticipation and follow through but the rough keys look pretty good. At least to me. Well, that's my first blog entry for my game project. The GameDev Project I'll publish once there is some game play. Thanks for the visit.
  2. OpenGL glError 1282

    Well, my guess would be re-position your vbo and ebo genBuffer calls ahead of your vao bind. After that, unbind your vao during initialization before you start with the texture loads. edit: The other thing we don't see is when you do your useProgram call before you set your shader uniforms.
  3. C++ precision

    down voted because your truncation leaves a small value after the desired truncation point, the len is misleading being off by one and finally does not address string conversion.
  4. Cel shading edge detect.

    I see you've tagged mobile but did you consider [ this ] from the standard assets package?
  5. C++ use class

    @mike44To me, it appears to be confusion of basic concepts. No disrespect intended. _Silence_ pointed to it from the beginning but you didn't pay attention to return types. FontMgr.drawString returns void. It's FontMgr.loadFont that returns the FontInfo_t* structure with FontHandle being a type alias. I think what you're looking for is FontHandle myFontHandle = m.loadFont("./Ubuntu-B.ttf", NULL, NULL, 16, 0); m.drawString(myFontHandle, #ffffff, 100, 100, align, "Hello World"); A simplified example ignoring function arguments to show the layout of that library portion typedef struct FontInfo_t* FontHandle; struct FontInfo_t { int blah; }; class FontMgr { public: FontHandle loadFont() { FontHandle info = new FontInfo_t; return info; } void unloadFont(FontHandle inFont) { delete inFont; } void drawString(FontHandle inFont) { // do.. } }; int _tmain(int argc, _TCHAR* argv[]) { FontMgr m; FontHandle myFontHandle = m.loadFont(); // stuff my program does m.drawString(myFontHandle); // time to go... m.unloadFont(myFontHandle); return 0; }
  6. Female Character Upgrade

    Ah, I see my wording of old and new was backwards in the blog post. Agreed, I'm sticking with the cartoon style.
  7. 2018 New Year Challenge: Missile Command

    yep, that's pro. The only thing I noticed is when switching fullscreen. I couldn't get it back to windowed.
  8. 2018 New Year Challenge: Missile Command

    Not a fault message, just the app will now close thing. I'm mobile now and can't give specific. When I create a dx11 device on this machine, it succeeds with feature level 10.0. It's interesting that you mention a dx8 fallback. Sounds complicated. I thought feature level only went back to dx9.x. Again, really like your art style. I suppose I should mention that I stopped upgrading visual studio at VS12 or visual studio 2013 depending on how you say it, so maybe its possible being the VC runtime. @lonewolff you too. That background is sexy.
  9. October 2017 GameDev Challenge: Arcade Battle Arena!

    The graphics on Birdie is cool. Perhaps some instructions for the options page might help. I'm guilty of this as well assuming everyone does things the same as I on how a menu interface should work.
  10. November 2017 GameDev Challenge: Pong!

    ah. it was some warning dialog from unknown publisher thing. Very good. this was the first challenge game that actually worked without problems out of the box for me. I'm going back a play some more...
  11. November 2017 GameDev Challenge: Pong!

    @racsoth Sorry, installerphobia. Good Game. This is actually bad ass for a pong. Has a feeling of real time strategy. @frob neat. no VR device so I got presented with three game objects positioned at right angles from each other, a help frame and no game play. @reders cool concept. ball moves at light speed so I'm assuming you don't take frame time into account but I see you're already aware. (I'm on a 60 hrz monitor)
  12. October 2017 GameDev Challenge: Arcade Battle Arena!

    Ah, I see it now. Is that an installer? Need to pass if it is. Whoops, malfunction over here starting apps from the download folder and not paying attention to what the dialog is on about and simply dismissing. Sorry.
  13. October 2017 GameDev Challenge: Arcade Battle Arena!

    @slicer4ever I can't find the executable. Sorry, not gonna build from source. Missing D3DCOMPILER_47.dll error. @Endurion Birdie runs. I finally figured out how to set keys in options but the move right action just cycled through the levels all the way to the 'you win' screen.
  14. 2018 New Year Challenge: Missile Command

    @Endurion Any chance of a video? It crashes on startup so no joy. Looked but who knows...VS14 runtime, my DX10.0 device, etc., dunno, no Xtream access.
  15. @WiredCat That looks great. I'm a huge openGL fan boy... The difference is 4x4 matrix multiplication involves 64 multiplies and 48 additions, while the dot requires 3 and 2 respectively 3 times for the translation assignment which is 9 multiplications and 6 additions. Perhaps not a big deal for a camera, but apply that logic to a ton of objects begins to get wasteful. Here is a visual to compare the two operations to show that matrix multiplication is similar to dot. (pulled from an old openGL project) inline cMatrix4 &cMatrix4::operator*=(const cMatrix4 &rhs) { cMatrix4 tmp; // Row 1. tmp.e[0][0] = (e[0][0] * rhs.e[0][0]) + (e[0][1] * rhs.e[1][0]) + (e[0][2] * rhs.e[2][0]) + (e[0][3] * rhs.e[3][0]); tmp.e[0][1] = (e[0][0] * rhs.e[0][1]) + (e[0][1] * rhs.e[1][1]) + (e[0][2] * rhs.e[2][1]) + (e[0][3] * rhs.e[3][1]); tmp.e[0][2] = (e[0][0] * rhs.e[0][2]) + (e[0][1] * rhs.e[1][2]) + (e[0][2] * rhs.e[2][2]) + (e[0][3] * rhs.e[3][2]); tmp.e[0][3] = (e[0][0] * rhs.e[0][3]) + (e[0][1] * rhs.e[1][3]) + (e[0][2] * rhs.e[2][3]) + (e[0][3] * rhs.e[3][3]); // Row 2. tmp.e[1][0] = (e[1][0] * rhs.e[0][0]) + (e[1][1] * rhs.e[1][0]) + (e[1][2] * rhs.e[2][0]) + (e[1][3] * rhs.e[3][0]); tmp.e[1][1] = (e[1][0] * rhs.e[0][1]) + (e[1][1] * rhs.e[1][1]) + (e[1][2] * rhs.e[2][1]) + (e[1][3] * rhs.e[3][1]); tmp.e[1][2] = (e[1][0] * rhs.e[0][2]) + (e[1][1] * rhs.e[1][2]) + (e[1][2] * rhs.e[2][2]) + (e[1][3] * rhs.e[3][2]); tmp.e[1][3] = (e[1][0] * rhs.e[0][3]) + (e[1][1] * rhs.e[1][3]) + (e[1][2] * rhs.e[2][3]) + (e[1][3] * rhs.e[3][3]); // Row 3. tmp.e[2][0] = (e[2][0] * rhs.e[0][0]) + (e[2][1] * rhs.e[1][0]) + (e[2][2] * rhs.e[2][0]) + (e[2][3] * rhs.e[3][0]); tmp.e[2][1] = (e[2][0] * rhs.e[0][1]) + (e[2][1] * rhs.e[1][1]) + (e[2][2] * rhs.e[2][1]) + (e[2][3] * rhs.e[3][1]); tmp.e[2][2] = (e[2][0] * rhs.e[0][2]) + (e[2][1] * rhs.e[1][2]) + (e[2][2] * rhs.e[2][2]) + (e[2][3] * rhs.e[3][2]); tmp.e[2][3] = (e[2][0] * rhs.e[0][3]) + (e[2][1] * rhs.e[1][3]) + (e[2][2] * rhs.e[2][3]) + (e[2][3] * rhs.e[3][3]); // Row 4. tmp.e[3][0] = (e[3][0] * rhs.e[0][0]) + (e[3][1] * rhs.e[1][0]) + (e[3][2] * rhs.e[2][0]) + (e[3][3] * rhs.e[3][0]); tmp.e[3][1] = (e[3][0] * rhs.e[0][1]) + (e[3][1] * rhs.e[1][1]) + (e[3][2] * rhs.e[2][1]) + (e[3][3] * rhs.e[3][1]); tmp.e[3][2] = (e[3][0] * rhs.e[0][2]) + (e[3][1] * rhs.e[1][2]) + (e[3][2] * rhs.e[2][2]) + (e[3][3] * rhs.e[3][2]); tmp.e[3][3] = (e[3][0] * rhs.e[0][3]) + (e[3][1] * rhs.e[1][3]) + (e[3][2] * rhs.e[2][3]) + (e[3][3] * rhs.e[3][3]); *this = tmp; return *this; } inline float cVector3::dot(const cVector3 &p, const cVector3 &q) { return (p.x * q.x) + (p.y * q.y) + (p.z * q.z); }
  • Advertisement