My GLSL shader in my game engine has a very odd bug that my roomate found today. On his AMD graphics card any model that is skinned/animated is invisible. The models show up fine on my Nvidia card so this is ATI specific. The shaders compile fine on his card and there are no errors in the AMD GPU shader analyzer which is very odd.
We messed with this for a few hours and I found the block of code that causes the invisible models glitch. It's the part of the GLSL vertex shader that does the rotation for skinned meshes. Something here IS causing the problem. If I comment this out everything renders fine but nothing rotates obviously.
Here are all my uniforms, attributes, and varyings in the vertex shader:
Alright, so to start off I am currently using the native Java Socket implementation and everything works fine. I'm planning on rewriting the networking portion of the game engine to improve and clean it up and I'm not sure if I should move to another API or not.
From what I've read, my options are:
Native Java Socket
Currently I am using bullet physics to calculate my RigidBody physics actors. After each bullet step I basically run this code on my RigidBody game actors to get their position and rotation from bullet.
//the variable "physics" is the bullet RigidBody object
Vector3f c = physics.getCenterOfMassPosition(new Vector3f());
setLocation(new Vertex(c.x, c.y, c.z + 10));
Quat4f q = physics.getOrientation(new Quat4f());
setRotation(MathUtil.convertQuat2Euler3(new Quat(q.x, q.y, q.z, q.w)));
I'm currently converting the Quaternion that is returned by the RigidBody to an Euler angle then applying that to the object and rendering.
I'm like 99% sure thats causing gimbal lock. I can rewrite my renderer to use Quat's instead of Euler angles and solve the problem if that is it. It's a lot of work though so I want to confirm that this is the problem.
I have to add 10 to the location.z value of the RigidBody for some odd reason. I have no idea why.
I've been developing a game engine for the past few years and I'm finally at a point where I want to allow people to make contributions and play with it and stuff. I want to put it up on GitHub, I'm just afraid of the rather unlikely event where my work gets stolen or copyrighted or patented or basically any kind of horrid legal thing that could happen.
I basically want some kind of license agreement that states:
- The engine source belongs to me, any contributions made to the engine by users are *non-exclusively* a part of that.
- Code added to the engine by a contributor is just a part of the engine and the contributor can still use that code outside of the engine freely still.
(EX: someone writes an awesome shadow calculation and puts it in the engine, they can still use that same shadow calculation elsewhere and it's fine)
- The engine is free to use non-profit
- The engine requires a lincse to use commerically which can be negotiated with me.
How should I go about that? I'm broke and I can't really hire a lawyer to write some crazy legal stuff for me.
I've read up on GPL and BSD but neither of those are quite what I want to do.