Hi all,
Im using the vboInstanced example as a base as I couldn’t get it working on my own code.
What I want to do is a very basic instanced draw of cubes at different locations and colors.
For a start Im trying to push the coordinated via a ofTexture to the shader but Im not getting love back… (I must be missing something very stupid??)
(btw, I can’t use hardcoded vec3/4 arrays in the shader as the number of instances I need changes)
I build a dummy XYZ array to feed to the texture:
float* locations = new float[1024*4];
int c = 0;
for (int i=0; i<1024*4; i+=4) {
locations[i]=ofRandom(100, 200);
locations[i+1]=ofRandom(100, 200);
locations[i+2]=ofRandom(-50, 50);
locations[i+3]=1;
++c;
ofLog() << locations[i] << " " << locations[i+1] << " " << locations[i+2];
}
locTex.loadData(locations, 1024, 1, GL_RGBA);
I draw with:
mShdInstanced->begin();
mShdInstanced->setUniformTexture("tex0", mTexDepth, 0);
mShdInstanced->setUniformTexture("tex1", locTex, 0);
mVboBox.drawInstanced(OF_MESH_FILL, 1024);
mShdInstanced->end();
And the shader looks like this, but I tried a number of things…
#version 150
uniform mat4 projectionMatrix;
uniform mat4 modelViewMatrix;
uniform mat4 modelViewProjectionMatrix;
uniform vec4 globalColor = vec4(1.0);
uniform sampler2D tex1;
in vec4 position;
in vec2 texcoord;
in vec4 color_coord;
in vec3 normal;
out vec4 colorVarying;
out vec2 texCoordVarying;
void main()
{
vec2 sPos = vec2(gl_InstanceID, 0);
//float xx = texture(tex1,samplePos).r;
//float yy = texture(tex1,samplePos).g;
//float zz = texture(tex1,samplePos).b;
vec4 mm = texture(tex1,sPos);
// dummy
colorVarying = vec4(0.1,0.6,0.6,1.0);
vec4 vPos = position + vec4(mm.x ,mm.y,mm.z,0);
gl_Position = projectionMatrix * modelViewMatrix * vPos ;
}
Any ideas more than welcome!