I don't understand what you use those "vectors" for or why they have a last coordinate 1 instead of 0... I am trying to fit what you are saying into the relevant math I know, and it's not working.
Model is centered at <0,0,0,1> 4-D vector or the origin.
So x-axis is <1,0,0,1> and z-axis is <0,0,1,1,>. We arbitrarily define a given vector as "forward" or "backward" or "up" based on which way we preferred. The result is that if you want the "forward" of a model you can just take the "forward" vector and multiply it by the world matrix of a model and get the direction it's facing.
Really 99% of the time we wanted rotation information from the model it was which way is "forward" or "up" or "down" or "left" so we would take the vector denoting the default forward and multiply it by the models world matrix to get which way it was facing. So before model->world transformation we know that forward is the same as the "forward" vector constant. So which way it is facing now is "forward" * WorldMatrix.
Object transformations were simply handled by augmenting this matrix. So you want to rotate it along the Zaxis? Call matrix.RotateZ(float angle) and rotate the object. Want to Translate it? Call matrix.Translate(x,y,z). Was pretty easy overall.
This one matrix inherently had all the information we needed readily available so we just used that.
The only objects we needed that needed to know exact angles was the camera which was handled with a Quaternion.
i really only use quaternion's interpolating rotation based animations, for character movement and whatnot matrices are easier imo. . Want the object to slowly move some direction? Get the vector pointing to the object and slerp all day.
Since your objects are stored at the origin I recently worked with a group that did it a bit differently.
You define a constant forward,right,left,up vectors up = <0,1,0,1> down = <0,-1,0,1> forward = <0,0,1,1> right = <1,0,0,1> left = <-1,0,0,1> To get your "forward" or "down" vector it was just a single matrix multiplication away. Just make sure your "forward" of your model is facing <0,0,1,1> and the rest is easy.
There was than 1 matrix for local rotations and scaling, 1 World Matrix where the bottom 4 floats were the position, 1 vector for recording scale so you can use an absolute scale with models.
You don't actually describe what the problem is. Is it not drawing anything? is the texture not showing? is the texture wrong?
Anyway, various things to think about: As with someone else recently, you have "varying in" and "varying out". Both varying and in / out are storage qualifiers - I'm pretty sure it's not meant to be valid to use both of them. I'd suggest using in / out since varying is deprecated (and I'm not actually sure you can use varying in anything other than vertex / fragment shaders).
I assume "Texture" is a variable containing the location of the sampler retrieved via glGetUniformLocation, and that your BindTexture member correctly calls glActiveTexture and glBindTexture?
Note that you don't have to bind the array buffer as well as the vertex array in the draw call.
You don't appear to be calling glEnableVertexAttribArray anywhere.
Alright I looked into glEnableVertexAttribArray so that's fixed. However I still didn't get anything to show, so i messed with the shader. It seems that for some reason my final value of vec4 vPosition is getting overwritten somehow. If i manually set the height I get a perfect textured quad, but if i try to read it from the incoming vertex I can't see anything.
lol ok, found out the issue. I simply wasn't referencing my position through gl_in instead I was trying to reference through another variable. : P it's working perfectly now.