Hello TanZJ,
Thank you for the information. I don't think I quite understood your
intention though. I apologize if this is obvious but as I said my
OpenGL skills are lacking... Here is my code after applying your
suggestion about applying the texture to the state:
class MyDrawable {
osg::ref_ptr<osg::Texture2D> texture[3];
public:
MyDrawable()
{
for (int i : {0, 1, 2})
{
const std::string filename = std::to_string(i + 1) + ".png";
if (osg::Image * image = osgDB::readImageFile(filename))
{
texture[i] = new osg::Texture2D;
texture[i]->setImage(image);
}
else
{
std::cerr << "ERROR LOADING IMAGE " << filename << std::endl;
}
}
}
virtual void drawImplementation(osg::RenderInfo & renderInfo)
const override
{
const float Z = 0.f;
osg::State * state = renderInfo.getState();
osg::GLBeginEndAdapter & gl = state->getGLBeginEndAdapter();
state->setActiveTextureUnit(0);
gl.Color4f(1.f, 1.f, 1.f, 1.f);
float x = 50.f, y = 50.f, w = 64.f, h = 64.f, offset;
offset = 0.f;
// apply the first texture so it will draw on the first rect
texture[0]->apply(*state);
gl.Begin(GL_QUADS);
gl.TexCoord2f(0.f, 0.f);
gl.Vertex3f(offset + x, y, Z);
gl.TexCoord2f(0.f, 1.f);
gl.Vertex3f(offset + x + w, y, Z);
gl.TexCoord2f(1.f, 1.f);
gl.Vertex3f(offset + x + w, y + h, Z);
gl.TexCoord2f(1.f, 0.f);
gl.Vertex3f(offset + x, y + h, Z);
gl.End();
offset = 256.f;
// apply the second texture so it will draw on the second rect
texture[1]->apply(*state);
gl.Begin(GL_QUADS);
gl.TexCoord2f(0.f, 0.f);
gl.Vertex3f(offset + x, y, Z);
gl.TexCoord2f(0.f, 1.f);
gl.Vertex3f(offset + x + w, y, Z);
gl.TexCoord2f(1.f, 1.f);
gl.Vertex3f(offset + x + w, y + h, Z);
gl.TexCoord2f(1.f, 0.f);
gl.Vertex3f(offset + x, y + h, Z);
gl.End();
offset = 512.f;
// apply the third texture so it will draw on the third rect
texture[2]->apply(*state);
gl.Begin(GL_QUADS);
gl.TexCoord2f(0.f, 0.f);
gl.Vertex3f(offset + x, y, Z);
gl.TexCoord2f(0.f, 1.f);
gl.Vertex3f(offset + x + w, y, Z);
gl.TexCoord2f(1.f, 1.f);
gl.Vertex3f(offset + x + w, y + h, Z);
gl.TexCoord2f(1.f, 0.f);
gl.Vertex3f(offset + x, y + h, Z);
gl.End();
}
};
Can you see what I'm doing wrong? No textures show up at all when I
try this code.
Thank you,
Aaron
Quoting tianzjyh <[email protected]>:
Hi, Andersen,
Let's say you have three images, then you can wrap them using
osg::Texture2D, something like this:
>
osg::Image* image0 = osgDB::readImageFile("filename0.xxx");
osg::Texture2D* tex0 = new osg::Texture2D(image0);
tex1->setWrap(..., ...);
tex1->setFilter(..., ...);
And then you can apply them in the drawImplementation() of your
drawable like this :
osg::State& state = *renderInfo.getState();
state.setActiveTextureUnit(0); //set texture unit 0 as
current texture
tex0->apply(state); //apply texture paras to
current texture
...drawQuad0...
...deal with other two quads...
--
Cheers,
---
TianZJ
At 2016-12-29 07:32:01, "Aaron Andersen" <[email protected]> wrote:
Hello,
There is some code in a library which I want to adapt for OSG. The
code is pretty old and uses the old style OpenGL. I don't have the
time it would take to rewrite this code so I would like to use the
GLBeginEndAdapter to make this code work with OSG.
Looking at the GLBeginEndAdapter there isn't much documentation so I
was hoping someone could help me out. Please keep in mind my OpenGL
skills are lacking (which I why enjoy using a rendering engine like
OSG :-).
I've created a subclass to the Drawable class called "MyDrawable". In
the drawImplementation function I'm have a couple
gl.Begin(GL_QUADS)/gl.End() calls to draw 3 simple rectangles. I'm
unsure of how to apply 3 separate textures to these 3 rectangles. From
reading the ShapeDrawable class it looks like the state of the
Drawable applies the texture to everything you draw.
So how can I apply many different textures to my drawing, with 1
texture per shape I draw with GL_QUADS?
Thank you for any insight you can provide.
Aaron
_______________________________________________
osg-users mailing list
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
_______________________________________________
osg-users mailing list
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org