Re: [osg-users] Textuiring a simple quad

2017-10-18 Thread Sebastian Messerschmidt

Hi Jochen,

can you please provide a minimal compiling example, or at least the 
vertex shader you use.

The

Cheers
Sebastian

Hi, all :)

I have so a simple quastion but I can solve the problem.

I want to draw a quad attach a simple Shader with a simple texture operation.
But I only get a black quad. The shader works when a color each fragmnent with 
the color red, but wen I want to get texture-colors... its only got black.

Some Code:

Code:

osg::Vec2Array* textureCoordinates = new osg::Vec2Array;
osg::Vec3Array* quadVertices = new osg::Vec3Array;
osg::Geometry* quadGeometry = new osg::Geometry();

// *** Vertices ***
quadVertices->push_back(osg::Vec3(x - rad, y - rad, 0.0));
quadVertices->push_back(osg::Vec3(x + rad, y - rad, 0.0));
quadVertices->push_back(osg::Vec3(x + rad, y + rad, 0.0));
quadVertices->push_back(osg::Vec3(x - rad, y + rad, 0.0));

quadGeometry->setVertexArray(quadVertices);
// *** Vertices - Ende ***

// *** Texturkorrdinaten ***
textureCoordinates->push_back(osg::Vec2(0, 0));
textureCoordinates->push_back(osg::Vec2(1, 0));
textureCoordinates->push_back(osg::Vec2(1, 1));
textureCoordinates->push_back(osg::Vec2(0, 1));

quadGeometry->setTexCoordArray(0, textureCoordinates, 
osg::Array::BIND_PER_VERTEX);
// *** Texturkorrdinaten-Ende ***


// *** Faces-Idizes ***
osg::DrawElementsUInt* gridFace = new 
osg::DrawElementsUInt(osg::PrimitiveSet::QUADS, 0);
gridFace->push_back(0);
gridFace->push_back(1);
gridFace->push_back(2);
gridFace->push_back(3);

quadGeometry->addPrimitiveSet(gridFace);
// *** Faces-Idizes - Ende ***

//  Logo - Texture 
{
std::string path("Grafik\\");
std::string fileName = path + std::string("Skull.tga");

osg::Image *image = osgDB::readImageFile(fileName);
if (!image)
{
exit;
}

osg::TextureRectangle* texture = new 
osg::TextureRectangle(image);

osg::TexMat* texmat = new osg::TexMat;
texmat->setScaleByTextureRectangleSize(true);

// setup state
osg::StateSet* state = new osg::StateSet();
state->addUniform(new osg::Uniform("skull_Texture", 
SKULL_TEXTURE));
state->setTextureAttributeAndModes(SKULL_TEXTURE, texture, 
osg::StateAttribute::ON);
state->setTextureAttributeAndModes(SKULL_TEXTURE, texmat, 
osg::StateAttribute::ON);

state->setMode(GL_BLEND, osg::StateAttribute::ON);


quadGeometry->setStateSet(state);
}




Here I attech the shader

Code:

// Shader-Logo
{
osg::StateSet* stateSet = quadGeometry->getOrCreateStateSet();

mShaderProgramLogo = new osg::Program;
mShaderProgramLogo->setName("ProgramLogo");
mVertexShaderLogo = new osg::Shader(osg::Shader::VERTEX);
mFragmentShaderLogo = new osg::Shader(osg::Shader::FRAGMENT);

mShaderProgramLogo->addShader(mFragmentShaderLogo);
mShaderProgramLogo->addShader(mVertexShaderLogo);


mVertexShaderLogo->loadShaderSourceFromFile("Shader\\vertLogo.txt");

mFragmentShaderLogo->loadShaderSourceFromFile("Shader\\fragmentLogo.txt");
stateSet->setAttributeAndModes(mShaderProgramLogo, 
osg::StateAttribute::ON);

quadGeometry->setStateSet(stateSet);
}





and here the fragment-shader code:

Code:

#version 330

uniform sampler2D skull_Texture;

varying vec2 textCoord;

void main(void)
{
 vec4 colSkull = texture2D(skull_Texture, textCoord);

//gl_FragColor = vec4(1.0,0,0,1.0); // => this works fine
gl_FragColor = colSkull;// => every fragment is black!!!
}




Can anybody help my.
OSG is such a nice library...but why it doesn't work? :(

Thank you!

Cheers,
JoseMan[/code]

--
Read this topic online here:
http://forum.openscenegraph.org/viewtopic.php?p=72151#72151





___
osg-users mailing list
osg-users@lists.openscenegraph.org
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org


___
osg-users mailing list
osg-users@lists.openscenegraph.org
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org


[osg-users] Textuiring a simple quad

2017-10-18 Thread Jochen Maier
Hi, all :)

I have so a simple quastion but I can solve the problem.

I want to draw a quad attach a simple Shader with a simple texture operation.
But I only get a black quad. The shader works when a color each fragmnent with 
the color red, but wen I want to get texture-colors... its only got black.

Some Code:

Code:

osg::Vec2Array* textureCoordinates = new osg::Vec2Array;
osg::Vec3Array* quadVertices = new osg::Vec3Array;
osg::Geometry* quadGeometry = new osg::Geometry();

// *** Vertices ***
quadVertices->push_back(osg::Vec3(x - rad, y - rad, 0.0));
quadVertices->push_back(osg::Vec3(x + rad, y - rad, 0.0));
quadVertices->push_back(osg::Vec3(x + rad, y + rad, 0.0));
quadVertices->push_back(osg::Vec3(x - rad, y + rad, 0.0));

quadGeometry->setVertexArray(quadVertices);
// *** Vertices - Ende ***

// *** Texturkorrdinaten ***
textureCoordinates->push_back(osg::Vec2(0, 0));
textureCoordinates->push_back(osg::Vec2(1, 0));
textureCoordinates->push_back(osg::Vec2(1, 1));
textureCoordinates->push_back(osg::Vec2(0, 1));

quadGeometry->setTexCoordArray(0, textureCoordinates, 
osg::Array::BIND_PER_VERTEX);
// *** Texturkorrdinaten-Ende ***


// *** Faces-Idizes ***
osg::DrawElementsUInt* gridFace = new 
osg::DrawElementsUInt(osg::PrimitiveSet::QUADS, 0);
gridFace->push_back(0);
gridFace->push_back(1);
gridFace->push_back(2);
gridFace->push_back(3);

quadGeometry->addPrimitiveSet(gridFace);
// *** Faces-Idizes - Ende ***

//  Logo - Texture 
{
std::string path("Grafik\\");
std::string fileName = path + std::string("Skull.tga");

osg::Image *image = osgDB::readImageFile(fileName);
if (!image)
{
exit;
}

osg::TextureRectangle* texture = new 
osg::TextureRectangle(image);

osg::TexMat* texmat = new osg::TexMat;
texmat->setScaleByTextureRectangleSize(true);

// setup state
osg::StateSet* state = new osg::StateSet();
state->addUniform(new osg::Uniform("skull_Texture", 
SKULL_TEXTURE));
state->setTextureAttributeAndModes(SKULL_TEXTURE, texture, 
osg::StateAttribute::ON);
state->setTextureAttributeAndModes(SKULL_TEXTURE, texmat, 
osg::StateAttribute::ON);

state->setMode(GL_BLEND, osg::StateAttribute::ON);


quadGeometry->setStateSet(state);
}




Here I attech the shader

Code:

// Shader-Logo
{
osg::StateSet* stateSet = quadGeometry->getOrCreateStateSet();

mShaderProgramLogo = new osg::Program;
mShaderProgramLogo->setName("ProgramLogo");
mVertexShaderLogo = new osg::Shader(osg::Shader::VERTEX);
mFragmentShaderLogo = new osg::Shader(osg::Shader::FRAGMENT);

mShaderProgramLogo->addShader(mFragmentShaderLogo);
mShaderProgramLogo->addShader(mVertexShaderLogo);


mVertexShaderLogo->loadShaderSourceFromFile("Shader\\vertLogo.txt");

mFragmentShaderLogo->loadShaderSourceFromFile("Shader\\fragmentLogo.txt");
stateSet->setAttributeAndModes(mShaderProgramLogo, 
osg::StateAttribute::ON);

quadGeometry->setStateSet(stateSet);
}





and here the fragment-shader code:

Code:

#version 330

uniform sampler2D skull_Texture;

varying vec2 textCoord;

void main(void)
{
vec4 colSkull = texture2D(skull_Texture, textCoord);

//gl_FragColor = vec4(1.0,0,0,1.0); // => this works fine
gl_FragColor = colSkull;// => every fragment is black!!!
}




Can anybody help my.
OSG is such a nice library...but why it doesn't work? :(

Thank you!

Cheers,
JoseMan[/code]

--
Read this topic online here:
http://forum.openscenegraph.org/viewtopic.php?p=72151#72151





___
osg-users mailing list
osg-users@lists.openscenegraph.org
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org