Página 1 de 1

[C++] Malicious Leet Library (Sua biblioteca de imagens)

Enviado: Sex Abr 23, 2010 7:36 pm
por Rico
Nem sei como começar o tópico :P
Desculpem-me, mas se vocês esperam algo de mim para cena doom com um wad... esqueçam, no máximo um que está por vir com parceria com Zman.
BrDOOM Chat 2? -> Comingo Soon, resolvendo se faço C# ou C++ (mas enquanto isso eu pretendo entrar na faculdade, então, esperem).

Explicação

Nome do Grupo.

O nome veio de uma brincadeira na verdade, no técnico feliz da vida com meus 3 amigos jogando Worms 4 Mayhem, cada um criou um time, sempre tem um no grupo que não sabe o que escrever, Abóbora, colocou inocentemente Malicious L33T no nome de uma das minhocas. Assim ao ler, rimos, e assim nasceu o nome do grupo de programadores imaturos, irresponsáveis, e que fizeram um TCC com 2 pessoas a menos do limite mínimo e com apenas 1 computador de meia tijela que demorava 3 horas pra compilar um simples programa.

Nome da Biblioteca e por quê.

Tenho meus motivos:

: Por puro prazer de conhecimento.
: Existe bibliotecas de TGA antigas, :/, totalmente funcionais, mas teoricamente difíceis até de se usar... aí eu pensei, por quê não?!
: É uma DLL/SO (<- e?) Faça seu programa sem problemas!

A Biblioteca

A Malicious Leet tem um orgulho de apresentar uma biblioteca de imagens, de fácil uso!

Funções:
Ler TGA----------> 10% ):
Após criar a biblioteca usando as Especificações TGA 2.0, mesmo asism errei o código e lê apenas TGA 32 Bits lol (não menos)
Ler BMP----------> 0% (SUX, mas acho que não posso excluir)
Ler PNG----------> 0% (já existe uma boa lib, só implementar comandos)
Ler DDS----------> 0% (DirectDraw Surface, tem boa qualidade)
Ler PCX----------> 0% (Antigo, mas ainda é usado)
Ler JPEG---------> 0% (Bosta, mas blz)
Ler GIF----------> 0% (?)
Ler LUMP IMAGE---> 0% (Bem possível, tenho muitos códigos de Lump Images comigo)
Dicas de outras imagens existentes serão bem vindas, PSD POSSO pensar no caso.

Escrever? Bem possível ter funções, mas não vou criar um editor.

Re: [C++] Malicious Leet Library (Sua biblioteca de imagens)

Enviado: Sex Abr 23, 2010 8:02 pm
por Rico
Toda a API vai ser reescrita.
Mas vou dar um exemplo do que ela já fazia.
Versão 0.0.1 Ou seja, BEM PRIMITIVO!

Código: Selecionar todos

#include "ml\mltga.h"

int main(int argc, char *argv[]) {
    TGA tga;

    if(tga.LoadTGA(argv[1]) != TGA_OK) { // Carrega TGA
        return(0);
    }
    printf("%d BPP\n",tga.GetBPP()); // Pega Bits Per Pixel
    printf("%d Width, %d Height \n",tga.GetWidth(),tga.GetHeight()); // Pega tamanho da imagem
    printf("%X",tga.GetImg()); // Pega a IMAGEM, como não mexemos ainda com gráfico neste exemplo... só vai ver Unsigned Char
    printf("%X",tga.GetPalette()); // Pega Paleta de cores, também Unsigned Char.
    return(0);
}
Hmm, mas queremos ver imagens!!
Tá bom! Tomem!
Imagem

Segue o Código do demo acima:

Código: Selecionar todos

/// Mostrando como funciona MLTGA. Usando OpenGL

#if defined(_WIN32)
#include <windows.h>
#endif
#include <GL\glut.h>
#include "ml\mltga.h"

GLuint texID;

/// Vou criar um Loader para textura, afinal o MLTGA carrega a imagem

GLuint LoadTexture(char *nome) {
    TGA tga;
    GLuint tex;

    if(tga.LoadTGA(nome) != TGA_OK)
        return(-1);

    glGenTextures(1,&tex);
    glBindTexture(GL_TEXTURE_2D,tex);

    if(tga.GetBPP() == 24)
        glTexImage2D(GL_TEXTURE_2D,0,3,tga.GetWidth(),tga.GetHeight(),0,GL_RGBA,GL_UNSIGNED_BYTE,tga.GetImg());
    if(tga.GetBPP() == 32)
        glTexImage2D(GL_TEXTURE_2D,0,4,tga.GetWidth(),tga.GetHeight(),0,GL_RGBA,GL_UNSIGNED_BYTE,tga.GetImg());
    else
        return -1;

    /// Setup de renderizaçao
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_CLAMP);
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_CLAMP);

    return tex;
}

static void displayTGA() {
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glLoadIdentity();

    glEnable(GL_TEXTURE_2D);
    glBindTexture(GL_TEXTURE_2D,texID);

    /// Vamos desenhar o quadrado... O:
    glTranslatef(0.0,0.0,-5.0);

    glBegin(GL_QUADS); // Quadrado com resoluçoes FLOAT (sim EXISTE imgs de loucos com numeros quebrados)
        glTexCoord2f(0.0f,0.0f);
        glVertex2f(-1.0f,-1.0f);

        glTexCoord2f(1.0f,0.0f);
        glVertex2f(1.0f,-1.0f);

        glTexCoord2f(1.0f,1.0f);
        glVertex2f(1.0f,1.0f);

        glTexCoord2f(0.0f,1.0f);
        glVertex2f(-1.0f,1.0f);
    glEnd();

    glDisable(GL_TEXTURE_2D);
    glutSwapBuffers();
}

static void reshape(int w,int h) {
    if(h == 0)
        h = 1;

    glViewport(0,0,(GLsizei)w,(GLsizei)h);

    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluPerspective(45.0,w/(GLdouble)h,0.1,1000.0);

    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();

    glutPostRedisplay();
}

GLuint init(char *filename) {
    glClearColor(0.5f,0.5f,0.5f,1.0f); // RGBA
    glShadeModel(GL_SMOOTH);

    glEnable(GL_DEPTH_TEST);

    glEnable(GL_BLEND);
    glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);

    texID = LoadTexture(filename);
    if(!texID)
        exit(EXIT_FAILURE);
}

void cleanup() {
    glDeleteTextures(1,&texID);
}

GLint main(int argc, char *argv[]) {
    if(argc < 2) {
        fprintf(stderr,"Sintax: %s <filename.tga>\n",argv[0]);
        return(-1);
    }

    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH);
    glutInitWindowSize(640,480);
    glutCreateWindow("Malicious Leet TGA Texture Demo");

    atexit(cleanup);
    init(argv[1]);

    glutReshapeFunc(reshape);
    glutDisplayFunc(displayTGA);

    glutMainLoop();

    return(0);
}