Example #1
0
    bool handle(const osgGA::GUIEventAdapter &ea, osgGA::GUIActionAdapter &aa)
    {
        switch(ea.getEventType())
        {
        case osgGA::GUIEventAdapter::KEYDOWN:
            switch(ea.getKey())
            {
            case osgGA::GUIEventAdapter::KEY_Space:
                *bRotate = !(*bRotate);
                return false;

            case '1':
                loadTextureImage(strokeTex, "../data/strokeNoise.png");
                return false;

            case '2':
                loadTextureImage(strokeTex, "../data/strokeDiag.png");
                return false;

            default:
                return false;
            }

        default:
            return false;
        }
    }
Example #2
0
void Target_init() {
	loadTextureImage();
	
	glEnableClientState(GL_VERTEX_ARRAY);
	
	Shell_mainLoop();
}
Example #3
0
QImage* Texture::getTextureImage()
{
    if (!imageLoaded) {
        loadTextureImage();
    }
    return &textureImage;
}
Example #4
0
static void cycleTextures(int direction) {
	textureIndex += direction;
	if (textureIndex < 0) {
		textureIndex += NUM_TEXTURES;
	} else if (textureIndex >= NUM_TEXTURES) {
		textureIndex -= NUM_TEXTURES;
	}
	loadTextureImage();
	Shell_redisplay();
}
Example #5
0
void Texture::generateTexture()
{
    if (fileName != "" && textVertexArray != 0) {
        // bind texture to image
        loadTextureImage();

        releaseTexture();
        // generate id
        glGenTextures(1, &textureId);

        glBindTexture(GL_TEXTURE_2D, textureId);
        glTexImage2D(GL_TEXTURE_2D, 0, 4,//GL_RGBA,
                     textureImage.width(), textureImage.height(),
                     0, GL_RGBA, GL_UNSIGNED_BYTE, textureImage.bits());
        glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_CLAMP);
        glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_CLAMP);
        glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
        glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
    }
}
/**
 * Initialisiert das Programm (inkl. I/O und OpenGL) und startet die
 * Ereignisbehandlung.
 * @param title Beschriftung des Fensters
 * @param width Breite des Fensters
 * @param height Hoehe des Fensters
 * @return ID des erzeugten Fensters, 0 im Fehlerfall
 */
int initAndStartIO (char *title, int width, int height)
{
    int windowID = 0;

    /* Kommandozeile immitieren */
    int argc = 1;
    char *argv = "cmd";

    G_Width = width;
    G_Height = height;
    G_NearPlane = 0.1;
    G_FarPlane  = 1000;

    /* Glut initialisieren */
    glutInit (&argc, &argv);

    /* FensterInitialisierung */
    glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
    /* FensterGröße */
    glutInitWindowSize (G_Width, G_Height);
    /* FensterPosition */
    glutInitWindowPosition (0, 0);

    windowID = glutCreateWindow (title);

    if (windowID)
    {
        /* Hintergrund und so werden initialisiert (Farben) */
        if (initScene ())
        {
            G_ShaderID = loadShaders("waterVertexShader.vert", "waterFragmentShader.frag");
            G_ShaderTerrain = loadShaders("textureVertexShader.vert", "textureFragmentShader.frag");
            G_ShaderColor = loadShaders("colorVertexShader.vert", "colorFragmentShader.frag");
            G_ShaderDepth = loadShaders("textureVertexShader.vert", "textureDepthFragmentShader2.frag");

            registerCallBacks ();

            allocateMemoryStuffDepth(&G_TexCamera, &G_TexCameraDepth, &G_fboCam);

            G_sampler2dLoc          = glGetUniformLocation(G_ShaderID, "texsampler");
            G_samplerDepth2dLoc     = glGetUniformLocation(G_ShaderID, "texsamplerDepth");

            Image * imageSand, * imageGrass, * imageRocks, * imageSnow, * imageForest, * imageTundra;
            imageSand  = malloc(sizeof(Image));
            imageGrass = malloc(sizeof(Image));
            imageRocks = malloc(sizeof(Image));
            imageSnow = malloc(sizeof(Image));
            imageForest = malloc(sizeof(Image));
            imageTundra = malloc(sizeof(Image));

            loadTextureImage(imageSand,  "sand1.bmp", &G_TexImageSand );
            loadTextureImage(imageGrass, "gras2.bmp", &G_TexImageGrass);
            loadTextureImage(imageRocks, "rocks.bmp", &G_TexImageRocks);
            loadTextureImage(imageSnow, "snow.bmp", &G_TexImageSnow);
            loadTextureImage(imageForest, "forest.bmp", &G_TexImageForest);
            loadTextureImage(imageTundra, "tundra.bmp", &G_TexImageTundra);

            /* Wasser */
            glGenBuffers (1, &G_WaterBuffer);
            glBindBuffer (GL_ARRAY_BUFFER, G_WaterBuffer);
            glBufferData (GL_ARRAY_BUFFER, sizeof(*getWaterList())*WORLD_SIZE*WORLD_SIZE, getWaterList(), GL_STREAM_DRAW);
            glBindBuffer (GL_ARRAY_BUFFER, 0);

            glGenBuffers (1, &G_WaterBufferIndex);
            glBindBuffer (GL_ELEMENT_ARRAY_BUFFER, G_WaterBufferIndex);
            glBufferData (GL_ELEMENT_ARRAY_BUFFER, sizeof(*getWaterIndices())*WORLD_SIZE*WORLD_SIZE*3*2, getWaterIndices(), GL_STREAM_DRAW);
            glBindBuffer (GL_ELEMENT_ARRAY_BUFFER, 0);

            /* Terrain */
            glGenBuffers (1, &G_TerrainBuffer);
            glBindBuffer (GL_ARRAY_BUFFER, G_TerrainBuffer);
            glBufferData (GL_ARRAY_BUFFER, sizeof(*getTerrainList())*TERRAIN_SIZE*TERRAIN_SIZE, getTerrainList(), GL_STATIC_DRAW);
            glBindBuffer (GL_ARRAY_BUFFER, 0);

            glGenBuffers (1, &G_TerrainBufferIndex);
            glBindBuffer (GL_ELEMENT_ARRAY_BUFFER, G_TerrainBufferIndex);
            glBufferData (GL_ELEMENT_ARRAY_BUFFER, sizeof(*getTerrainIndices())*TERRAIN_SIZE*TERRAIN_SIZE*3*2, getTerrainIndices(), GL_STATIC_DRAW);
            glBindBuffer (GL_ELEMENT_ARRAY_BUFFER, 0);

            glBindFramebuffer(GL_FRAMEBUFFER, 0);
            glClearColor(0.0, 1.0, 1.0, 0.0);
            glClearDepth(1.0f);
            glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

            /* Die Endlosschleife wird angestoßen */
            glutMainLoop ();
            windowID = 0;

            glDeleteFramebuffers(1, &G_fboCam);
            glDeleteTextures(1, &G_TexCamera);
            glDeleteTextures(1, &G_TexCameraDepth);

        }
        else
        {
            glutDestroyWindow (windowID);
            windowID = 0;
        }
    }
    return windowID;
}
Example #7
0
int main()
{
    osg::Node *mesh;
    osg::Group *root;

    osgViewer::Viewer viewer;

    osg::Texture2D *strokeTex;
    osg::Texture2D *backTex;
    osg::Texture2D *renTex;
    osg::ref_ptr<osg::Geode> quadGeode;
    osg::ref_ptr<osg::Camera> texCamera;
    osg::ref_ptr<osg::Camera> screenCamera;

    osg::Vec3 meshPos;
    osg::PositionAttitudeTransform *meshTrans;

    bool bRotate = false;

    float width = 800;
    float height = 600;

    mesh = osgDB::readNodeFile("../data/woman.3ds");

    // preprocess effect - applies shaders
    SketchPre *effSketchPre = new SketchPre();
    // postprocess effect - applies shaders
    SketchPost *effSketchPost = new SketchPost();

    // prepare the base of scene graph
    root = new osg::Group();
    meshTrans = new osg::PositionAttitudeTransform();
    meshTrans->addChild(mesh);

    strokeTex = setupStrokeTexture();
    loadTextureImage(strokeTex, "../data/strokeNoise.png");
    backTex = setupBackTexture();
    loadTextureImage(backTex, "../data/paper.png");

    renTex = setupRenTexture(width, height);
    quadGeode = setupRenQuad(width, height, renTex, strokeTex, backTex);
    texCamera = setupTexCamera(width, height, renTex);
    screenCamera = setupScreenCamera(width, height);

    // prepare the rest of the scene graph
    // first rendering scene to texture
    // second rendering the resulting texture to screen
    texCamera->addChild(effSketchPre);
    effSketchPre->addChild(meshTrans);
    screenCamera->addChild(effSketchPost);
    effSketchPost->addChild(quadGeode.get());

    root->addChild(texCamera.get());
    root->addChild(screenCamera.get());

    // setup keyboard handler
    KeyEventHandler *keyHandler = new KeyEventHandler(&bRotate, strokeTex);
    viewer.addEventHandler(keyHandler);

    // we would like a windowed application
    viewer.setUpViewInWindow(0, 0, width, height);

    viewer.setSceneData(root);
    viewer.realize();

    // position the object proprly so we can see it
    meshPos.set(0, 0, -10);
    meshTrans->setPosition(meshPos);

    // and rotate it a little bit
    osg::Quat quat;
    float angle = 0.5;
    quat.makeRotate(angle, 0.0, 1.0, 0.0);
    meshTrans->setAttitude(quat);

    float timeLast, timeCur = viewer.getFrameStamp()->getReferenceTime();

    while(!viewer.done())
    {
        timeLast = timeCur;
        timeCur = viewer.getFrameStamp()->getReferenceTime();

        if (bRotate)
        {
            // rotate the object according to elapsed time
            // from previous frame
            angle += (timeCur-timeLast) * 0.2;
            quat.makeRotate(angle, 0.0, 1.0, 0.0);
            meshTrans->setAttitude(quat);
        }

        viewer.frame();
    }
    return 0;
}
Example #8
0
static void toggleAutoMipmap() {
	autoMipmap = !autoMipmap;
	loadTextureImage();
	Shell_redisplay();
}
Example #9
0
/**
 * Initializes the program (including io and OpenGL) and starts the
 * event handling.
 */
int initAndStartIO (char *title, int width, int height)
{
    int windowID = 0;

    G_Width = width;
    G_Height = height;
    G_WindowTitle = title;
    int argc = 1;
    char *argv = "cmd";

    G_NearPlane = 0.5;
    G_FarPlane  = 50.0;

    /* initialize GLUT */
    glutInit (&argc, &argv);

    /* initialize window */
    glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
    /* window size */
    glutInitWindowSize (G_Width, G_Height);
    /* window position */
    glutInitWindowPosition (0, 0);

    windowID = glutCreateWindow (G_WindowTitle);

    if (windowID)
    {

        /* Background color and other stuff initialization */
        if (initScene ())
        {
            printf ("--> Load shaders...\n"); fflush(stdout);

            registerCallBacks ();

            /*
             * Load shaders from file
             */
            G_ShaderTexture = loadShaders("textureVertexShader.vert", "textureFragmentShader.frag");
            G_ShaderColor = loadShaders("colorVertexShader.vert", "colorFragmentShader.frag");
            G_ShaderPosColor = loadShaders("posColorVertexShader.vert", "colorFragmentShader.frag");
            G_ShaderDepthTexture = loadShaders("textureVertexShader.vert", "textureDepthFragmentShader.frag");

            printf ("--> Shaders are loaded.\n"); fflush(stdout);

            /*
             * Load texture from file
             */
            Image * imageRocks;
            imageRocks = malloc(sizeof(Image));
            loadTextureImage(imageRocks, "sunset-red.bmp", &G_TexImageRocks);

            /*
             * Create buffer for the object we want to draw.
             */
            glGenBuffers(1, &G_ObjectsBuffer);
            glBindBuffer(GL_ARRAY_BUFFER, G_ObjectsBuffer);
            glBufferData(GL_ARRAY_BUFFER, sizeof(G_Objects)*sizeof(GLfloat), G_Objects, GL_STATIC_DRAW);
            glBindBuffer(GL_ARRAY_BUFFER, 0);

            allocateMemoryStuffDepth(&G_TexCamera, &G_TexCameraDepth, &G_fboCam);

            printf ("--> Finished Initialization.\n"); fflush(stdout);

            /* Endless loop is started. */
            glutMainLoop ();
            windowID = 0;


        } else {
            glutDestroyWindow (windowID);
            return 0;
        }
    } else {
        return 0;
    }
    glutDestroyWindow (windowID);

    return 1;
}