Monday, November 18, 2013

Kubus 3D


Hai sahabat blogger...
Yang pada ingin mendalami ilmu grafkom tentang 3D disini ada contohnya nih..
Membuat kubus 3D dimana semua sisinya bisa kita sispkan foto kita masing-masing...

Gak susah kok...!!! Tinggal di copas ajah codingnya di bawah ini...

Tapi ingat yah harus dibuat dua class (class tekstur & class imageloader) dalam projectnya...  Dan jangan lupa foto-foto kalian juga harus disiapkan dengan ukuran yang harus sama persis yah...!!! Gambarnya harus dalam format bitmap (.bmp) dan ukurannya juga gak usah terlalu besar-besar yah takutnya programnya error lagi... Saran dari kita ukurannya kira 400-an x 300-an gitulah atau boleh lebih-lebih dikit juga gak apa-apa kok...
Ini coding buat kelas tekstur.cpp-nya...
#include <iostream>
#include <stdlib.h>
#ifdef __APPLE__
#include <OpenGL/OpenGL.h>
#include <GLUT/glut.h>
#else
#include <GL/glut.h>
#endif
#include "imageloader.h"

using namespace std;

const float BOX_SIZE = 7.0f; //Panjang tiap sisi kubus
float _angle = 0;            //Rotasi terhadap box
GLuint _textureId;           //ID OpenGL untuk tekstur
GLuint _textureId2;           //ID OpenGL untuk tekstur
GLuint _textureId3;           //ID OpenGL untuk tekstur
GLuint _textureId4;           //ID OpenGL untuk tekstur
GLuint _textureId5;           //ID OpenGL untuk tekstur
GLuint _textureId6;           //ID OpenGL untuk tekstur
void handleKeypress(unsigned char key, int x, int y) {
    switch (key) {
        case 27:             //Tekan Escape untuk EXIT
            exit(0);
    }
}

//Membuat gambar menjadi tekstur kemudian berikan ID pada tekstur
GLuint loadTexture(Image* image) {
    GLuint textureId;
    glGenTextures(1, &textureId);
    glBindTexture(GL_TEXTURE_2D, textureId);
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, image->width, image->height, 0, GL_RGB, GL_UNSIGNED_BYTE, image->pixels);
    return textureId;
}

void initRendering() {
    glEnable(GL_DEPTH_TEST);
    glEnable(GL_LIGHTING);
    glEnable(GL_LIGHT0);
    glEnable(GL_NORMALIZE);
    glEnable(GL_COLOR_MATERIAL);
   
    Image* image1 = loadBMP("ilo1.bmp");
    _textureId = loadTexture(image1);
    delete image1;
   
    Image* image2 = loadBMP("yoga1.bmp");
    _textureId2 = loadTexture(image2);
    delete image2;
   
    Image* image3 = loadBMP("vito1.bmp");
    _textureId3 = loadTexture(image3);
    delete image3;
   
    Image* image4 = loadBMP("ilo2.bmp");
    _textureId4 = loadTexture(image4);
    delete image4;
   
    Image* image5 = loadBMP("yoga2.bmp");
    _textureId5 = loadTexture(image5);
    delete image5;
   
    Image* image6 = loadBMP("vito2.bmp");
    _textureId6 = loadTexture(image6);
    delete image6;
}

void handleResize(int w, int h) {
    glViewport(0, 0, w, h);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluPerspective(45.0, (float)w / (float)h, 1.0, 200.0);
}

void drawScene() {
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
   
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
   
    glTranslatef(0.0f, 0.0f, -20.0f);
   
    GLfloat ambientLight[] = {0.3f, 0.3f, 0.3f, 1.0f};
    glLightModelfv(GL_LIGHT_MODEL_AMBIENT, ambientLight);
   
    GLfloat lightColor[] = {0.7f, 0.7f, 0.7f, 1.0f};
    GLfloat lightPos[] = {-2 * BOX_SIZE, BOX_SIZE, 4 * BOX_SIZE, 1.0f};
    glLightfv(GL_LIGHT0, GL_DIFFUSE, lightColor);
    glLightfv(GL_LIGHT0, GL_POSITION, lightPos);   
    glRotatef(-_angle, 50.0f, 50.0f, 2.0f);
   
    //Sisi atas
    glEnable(GL_TEXTURE_2D);
        glBindTexture(GL_TEXTURE_2D, _textureId);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
        glColor3f(1.0f, 1.0f, 1.0f);
   
    glBegin(GL_QUADS);   
        glTexCoord2f(0.0f, 0.0f);
        glNormal3f(0.0, 1.0f, 0.0f);
        glVertex3f(-BOX_SIZE / 2, BOX_SIZE / 2, -BOX_SIZE / 2);
        glTexCoord2f(1.0f, 0.0f);
        glVertex3f(-BOX_SIZE / 2, BOX_SIZE / 2, BOX_SIZE / 2);
        glTexCoord2f(1.0f, 1.0f);
        glVertex3f(BOX_SIZE / 2, BOX_SIZE / 2, BOX_SIZE / 2);
        glTexCoord2f(0.0f, 1.0f);
        glVertex3f(BOX_SIZE / 2, BOX_SIZE / 2, -BOX_SIZE / 2);       
    glEnd();
   
    //Sisi bawah   
    glEnable(GL_TEXTURE_2D);
        glBindTexture(GL_TEXTURE_2D, _textureId2);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
        glColor3f(1.0f, 1.0f, 1.0f);
       
    glBegin(GL_QUADS);   
        glTexCoord2f(0.0f, 0.0f);
        glNormal3f(0.0, -1.0f, 0.0f);
        glVertex3f(-BOX_SIZE / 2, -BOX_SIZE / 2, -BOX_SIZE / 2);
        glTexCoord2f(1.0f, 0.0f);
        glVertex3f(BOX_SIZE / 2, -BOX_SIZE / 2, -BOX_SIZE / 2);
        glTexCoord2f(1.0f, 1.0f);
        glVertex3f(BOX_SIZE / 2, -BOX_SIZE / 2, BOX_SIZE / 2);
        glTexCoord2f(0.0f, 1.0f);
        glVertex3f(-BOX_SIZE / 2, -BOX_SIZE / 2, BOX_SIZE / 2);
    glEnd();
   
    //Sisi kiri
    glEnable(GL_TEXTURE_2D);
        glBindTexture(GL_TEXTURE_2D, _textureId3);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
   
    glColor3f(1.0f, 1.0f, 1.0f);
    glBegin(GL_QUADS);   
        glNormal3f(-1.0, 0.0f, 0.0f);
        glTexCoord2f(0.0f, 0.0f);
        glVertex3f(-BOX_SIZE / 2, -BOX_SIZE / 2, -BOX_SIZE / 2);
        glTexCoord2f(1.0f, 0.0f);
        glVertex3f(-BOX_SIZE / 2, -BOX_SIZE / 2, BOX_SIZE / 2);
        glTexCoord2f(1.0f, 1.0f);
        glVertex3f(-BOX_SIZE / 2, BOX_SIZE / 2, BOX_SIZE / 2);
        glTexCoord2f(0.0f, 1.0f);
        glVertex3f(-BOX_SIZE / 2, BOX_SIZE / 2, -BOX_SIZE / 2);
    glEnd();
   
    //Sisi kanan
    glEnable(GL_TEXTURE_2D);
        glBindTexture(GL_TEXTURE_2D, _textureId4);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
       
    glColor3f(1.0f, 1.0f, 1.0f);
    glBegin(GL_QUADS);   
        glNormal3f(1.0, 0.0f, 0.0f);
        glTexCoord2f(0.0f, 0.0f);
        glVertex3f(BOX_SIZE / 2, -BOX_SIZE / 2, -BOX_SIZE / 2);
        glTexCoord2f(1.0f, 0.0f);
        glVertex3f(BOX_SIZE / 2, BOX_SIZE / 2, -BOX_SIZE / 2);
        glTexCoord2f(1.0f, 1.0f);
        glVertex3f(BOX_SIZE / 2, BOX_SIZE / 2, BOX_SIZE / 2);
        glTexCoord2f(0.0f, 1.0f);
        glVertex3f(BOX_SIZE / 2, -BOX_SIZE / 2, BOX_SIZE / 2);
    glEnd();
   
    //Sisi depan
    glEnable(GL_TEXTURE_2D);
        glBindTexture(GL_TEXTURE_2D, _textureId5);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
       
    glColor3f(1.0f, 1.0f, 1.0f);
    glBegin(GL_QUADS);   
        glNormal3f(0.0, 0.0f, 1.0f);
        glTexCoord2f(0.0f, 0.0f);
        glVertex3f(-BOX_SIZE / 2, -BOX_SIZE / 2, BOX_SIZE / 2);
        glTexCoord2f(1.0f, 0.0f);
        glVertex3f(BOX_SIZE / 2, -BOX_SIZE / 2, BOX_SIZE / 2);
        glTexCoord2f(1.0f, 1.0f);
        glVertex3f(BOX_SIZE / 2, BOX_SIZE / 2, BOX_SIZE / 2);
        glTexCoord2f(0.0f, 1.0f);
        glVertex3f(-BOX_SIZE / 2, BOX_SIZE / 2, BOX_SIZE / 2);
    glEnd();
   
    //Sisi belakang
    glEnable(GL_TEXTURE_2D);
        glBindTexture(GL_TEXTURE_2D, _textureId6);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
       
    glColor3f(1.0f, 1.0f, 1.0f);
    glBegin(GL_QUADS);
        glNormal3f(0.0, 0.0f, -1.0f);
        glTexCoord2f(0.0f, 0.0f);
        glVertex3f(-BOX_SIZE / 2, -BOX_SIZE / 2, -BOX_SIZE / 2);
        glTexCoord2f(1.0f, 0.0f);
        glVertex3f(-BOX_SIZE / 2, BOX_SIZE / 2, -BOX_SIZE / 2);
        glTexCoord2f(1.0f, 1.0f);
        glVertex3f(BOX_SIZE / 2, BOX_SIZE / 2, -BOX_SIZE / 2);
        glTexCoord2f(0.0f, 1.0f);
        glVertex3f(BOX_SIZE / 2, -BOX_SIZE / 2, -BOX_SIZE / 2);
    glEnd();
   
    glDisable(GL_TEXTURE_2D);
    glutSwapBuffers();
}

//Panggil setiap 25ms
void update(int value) {
    _angle += 1.0f;
    if (_angle > 360) {
        _angle -= 360;
    }
    glutPostRedisplay();
    glutTimerFunc(25, update, 0);
}

int main(int argc, char** argv) {
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
    glutInitWindowSize(400, 400);
   
    glutCreateWindow("ilo yoga vito");
    initRendering();
   
    glutDisplayFunc(drawScene);
    glutKeyboardFunc(handleKeypress);
    glutReshapeFunc(handleResize);
    glutTimerFunc(25, update, 0);
   
    glutMainLoop();
    return 0;
}



Ini buat kelas imageloader.cpp-nya...

#include <assert.h>
#include <fstream>
#include "imageloader.h"

using namespace std;

Image::Image(char* ps, int w, int h) : pixels(ps), width(w), height(h) {
   
}

Image::~Image() {
    delete[] pixels;
}

namespace {
    //Konversi 4 buah karakter ke integer, menggunakan bentuk little-endian
    int toInt(const char* bytes) {
        return (int)(((unsigned char)bytes[3] << 24) |
                     ((unsigned char)bytes[2] << 16) |
                     ((unsigned char)bytes[1] << 8) |
                     (unsigned char)bytes[0]);
    }
   
    //Konversi 2 buah karakter ke integer, menggunakan bentuk little-endian
    short toShort(const char* bytes) {
        return (short)(((unsigned char)bytes[1] << 8) |
                       (unsigned char)bytes[0]);
    }
   
    //Membaca 4 byte selanjutnya sebagai integer, menggunakan bentuk little-endian
    int readInt(ifstream &input) {
        char buffer[4];
        input.read(buffer, 4);
        return toInt(buffer);
    }
   
    short readShort(ifstream &input) {
        char buffer[2];
        input.read(buffer, 2);
        return toShort(buffer);
    }
   
    template<class T>
    class auto_array {
        private:
            T* array;
            mutable bool isReleased;
        public:
            explicit auto_array(T* array_ = NULL) :
                array(array_), isReleased(false) {
            }
           
            auto_array(const auto_array<T> &aarray) {
                array = aarray.array;
                isReleased = aarray.isReleased;
                aarray.isReleased = true;
            }
           
            ~auto_array() {
                if (!isReleased && array != NULL) {
                    delete[] array;
                }
            }
           
            T* get() const {
                return array;
            }
           
            T &operator*() const {
                return *array;
            }
           
            void operator=(const auto_array<T> &aarray) {
                if (!isReleased && array != NULL) {
                    delete[] array;
                }
                array = aarray.array;
                isReleased = aarray.isReleased;
                aarray.isReleased = true;
            }
           
            T* operator->() const {
                return array;
            }
           
            T* release() {
                isReleased = true;
                return array;
            }
           
            void reset(T* array_ = NULL) {
                if (!isReleased && array != NULL) {
                    delete[] array;
                }
                array = array_;
            }
           
            T* operator+(int i) {
                return array + i;
            }
           
            T &operator[](int i) {
                return array[i];
            }
    };
}

Image* loadBMP(const char* filename) {
    ifstream input;
    input.open(filename, ifstream::binary);
    assert(!input.fail() || !"File tidak ditemukan!!!");
    char buffer[2];
    input.read(buffer, 2);
    assert(buffer[0] == 'B' && buffer[1] == 'M' || !"Bukan file bitmap!!!");
    input.ignore(8);
    int dataOffset = readInt(input);
   
    int headerSize = readInt(input);
    int width;
    int height;
    switch(headerSize) {
        case 40:
            width = readInt(input);
            height = readInt(input);
            input.ignore(2);
            assert(readShort(input) == 24 || !"Gambar tidak 24 bits per pixel!");
            assert(readShort(input) == 0 || !"Gambar dikompres!");
            break;
        case 12:
            width = readShort(input);
            height = readShort(input);
            input.ignore(2);
            assert(readShort(input) == 24 || !"Gambar tidak 24 bits per pixel!");
            break;
        case 64:
            assert(!"Tidak dapat mengambil OS/2 V2 bitmaps");
            break;
        case 108:
            assert(!"Tidak dapat mengambil Windows V4 bitmaps");
            break;
        case 124:
            assert(!"Tidak dapat mengambil Windows V5 bitmaps");
            break;
        default:
            assert(!"Format bitmap ini tidak diketahui!");
    }
   
    //Membaca data
    int bytesPerRow = ((width * 3 + 3) / 4) * 4 - (width * 3 % 4);
    int size = bytesPerRow * height;
    auto_array<char> pixels(new char[size]);
    input.seekg(dataOffset, ios_base::beg);
    input.read(pixels.get(), size);
   
    //Mengambil data yang mempunyai format benar
    auto_array<char> pixels2(new char[width * height * 3]);
    for(int y = 0; y < height; y++) {
        for(int x = 0; x < width; x++) {
            for(int c = 0; c < 3; c++) {
                pixels2[3 * (width * y + x) + c] =
                    pixels[bytesPerRow * y + 3 * x + (2 - c)];
            }
        }
    }
   
    input.close();
    return new Image(pixels2.release(), width, height);
}


nah diatas kan ada 2 class (teksture & imageloader) class teksture itu fungsinya untuk mengatur putaran pada kubusnya, bentuk kubusnya, serta jendela tampilan programnya
kalau class imageloader itu agar kita dapat memuat gambar yang kita inginkan kedadlam setiap sisi kubus 3D kita

selain itu gambar yang kita inginkan harus diletakan pada folder tempat project kita disimpan..

Sekian dan terimaksih. selamat mencoba :)

44 comments:

Ojanx said...

Wah keren banget, thanks ya tutorialnya.
iklan gratis

Ankur Sahu said...

Thanks for sharing such a great blog..Keep posting Please visit for More information about -
Packers and Movers India @ http://www.expert5th.in/
Packers and Movers in Hyderabad @
http://www.expert5th.in/packers-and-movers-hyderabad/

Ankur Sahu said...

Sometimes we can also get allows from others who remain nearby or family affiliates associates or buddies who will be useful little bit. Bangalore Packers and Movers
Hyderabad Packers and Movers
Mumbai Packers and Movers
Pune Packers and Movers

Ankur Sahu said...

Getting assistance from nearby family affiliates associates or others who remain nearby will be flexible but not more than useful like getting from packers and moving companies. Chennai Packers and Movers
Delhi Packers and Movers
Gurgaon Packers and Movers
Noida Packers and Movers

Seoman Link said...

pesugihan tanpa tumbal atau islami dengan aliran putih
pesugihan tanpa tumbal | pesugihan tanpa tumbal | pesugihan tanpa tumbal | pesugihan tanpa tumbal | pesugihan tanpa tumbal | pesugihan tanpa tumbal | pesugihan tanpa tumbal | pesugihan tanpa tumbal | pesugihan tanpa tumbal | pesugihan tanpa tumbal | pesugihan tanpa tumbal | pesugihan tanpa tumbal | pesugihan tanpa tumbal | pesugihan tanpa tumbal | pesugihan tanpa tumbal | pesugihan tanpa tumbal | pesugihan tanpa tumbal | pesugihan tanpa tumbal | pesugihan tanpa tumbal | pesugihan tanpa tumbal | pesugihan tanpa tumbal | pesugihan tanpa tumbal | pesugihan tanpa tumbal | pesugihan tanpa tumbal | pesugihan tanpa tumbal

Seoman Link said...

pesugihan tanpa tumbal atau islami dengan aliran putih
pesugihan tanpa tumbal | pesugihan tanpa tumbal | pesugihan tanpa tumbal | pesugihan tanpa tumbal | pesugihan tanpa tumbal | pesugihan tanpa tumbal | pesugihan tanpa tumbal | pesugihan tanpa tumbal | pesugihan tanpa tumbal | pesugihan tanpa tumbal | pesugihan tanpa tumbal | pesugihan tanpa tumbal | pesugihan tanpa tumbal | pesugihan tanpa tumbal | pesugihan tanpa tumbal | pesugihan tanpa tumbal | pesugihan tanpa tumbal | pesugihan tanpa tumbal | pesugihan tanpa tumbal | pesugihan tanpa tumbal | pesugihan tanpa tumbal | pesugihan tanpa tumbal | pesugihan tanpa tumbal | pesugihan tanpa tumbal | pesugihan tanpa tumbal | pesugihan tanpa tumbal | pesugihan tanpa tumbal | pesugihan tanpa tumbal | pesugihan tanpa tumbal

Seoman Link said...

pesugihan tanpa tumbal atau islami dengan aliran putih
pesugihan tanpa tumbal | pesugihan tanpa tumbal | pesugihan tanpa tumbal | pesugihan tanpa tumbal | pesugihan tanpa tumbal | pesugihan tanpa tumbal | pesugihan tanpa tumbal | pesugihan tanpa tumbal | pesugihan tanpa tumbal | pesugihan tanpa tumbal | pesugihan tanpa tumbal | pesugihan tanpa tumbal | pesugihan tanpa tumbal | pesugihan tanpa tumbal | pesugihan tanpa tumbal | pesugihan tanpa tumbal | pesugihan tanpa tumbal | pesugihan tanpa tumbal | pesugihan tanpa tumbal | pesugihan tanpa tumbal | pesugihan tanpa tumbal | pesugihan tanpa tumbal | pesugihan tanpa tumbal | pesugihan tanpa tumbal | pesugihan tanpa tumbal | pesugihan tanpa tumbal | pesugihan tanpa tumbal | pesugihan tanpa tumbal

Peterpan Boy said...

manfaat yoghurt untuk kesehatan, kecantikan kulit & wajah, diet, bagi ibu hamil
manfaat yoghurt | manfaat yoghurt | manfaat yoghurt | manfaat yoghurt | manfaat yoghurt | manfaat yoghurt | manfaat yoghurt | manfaat yoghurt | manfaat yoghurt | manfaat yoghurt | manfaat yoghurt | manfaat yoghurt | manfaat yoghurt | manfaat yoghurt | manfaat yoghurt | manfaat yoghurt | manfaat yoghurt | manfaat yoghurt | manfaat yoghurt | manfaat yoghurt | manfaat yoghurt | manfaat yoghurt | manfaat yoghurt | manfaat yoghurt | manfaat yoghurt | manfaat yoghurt | manfaat yoghurt | manfaat yoghurt | manfaat yoghurt | manfaat yoghurt | manfaat yoghurt | manfaat yoghurt | manfaat yoghurt | manfaat yoghurt | manfaat yoghurt | manfaat yoghurt | manfaat yoghurt

Peterpan Boy said...

manfaat yoghurt untuk kesehatan, kecantikan kulit & wajah, diet, bagi ibu hamil
manfaat yoghurt | manfaat yoghurt | manfaat yoghurt | manfaat yoghurt | manfaat yoghurt | manfaat yoghurt | manfaat yoghurt | manfaat yoghurt | manfaat yoghurt | manfaat yoghurt | manfaat yoghurt | manfaat yoghurt | manfaat yoghurt | manfaat yoghurt | manfaat yoghurt | manfaat yoghurt | manfaat yoghurt | manfaat yoghurt | manfaat yoghurt | manfaat yoghurt | manfaat yoghurt | manfaat yoghurt | manfaat yoghurt | manfaat yoghurt | manfaat yoghurt | manfaat yoghurt | manfaat yoghurt | manfaat yoghurt | manfaat yoghurt | manfaat yoghurt | manfaat yoghurt | manfaat yoghurt | manfaat yoghurt | manfaat yoghurt

Peterpan Boy said...

cara merawat rambut rusak kembali sehat secara alami
cara merawat rambut rusak | cara merawat rambut rusak | cara merawat rambut rusak | cara merawat rambut rusak | cara merawat rambut rusak | cara merawat rambut rusak | cara merawat rambut rusak | cara merawat rambut rusak | cara merawat rambut rusak | cara merawat rambut rusak | cara merawat rambut rusak | cara merawat rambut rusak | cara merawat rambut rusak | cara merawat rambut rusak | cara merawat rambut rusak | cara merawat rambut rusak | cara merawat rambut rusak | cara merawat rambut rusak | cara merawat rambut rusak | cara merawat rambut rusak | cara merawat rambut rusak | cara merawat rambut rusak | cara merawat rambut rusak | cara merawat rambut rusak

Peterpan Boy said...

cara merawat rambut rusak kembali sehat secara alami
cara merawat rambut rusak | cara merawat rambut rusak | cara merawat rambut rusak | cara merawat rambut rusak | cara merawat rambut rusak | cara merawat rambut rusak | cara merawat rambut rusak | cara merawat rambut rusak | cara merawat rambut rusak | cara merawat rambut rusak | cara merawat rambut rusak | cara merawat rambut rusak | cara merawat rambut rusak | cara merawat rambut rusak | cara merawat rambut rusak | cara merawat rambut rusak | cara merawat rambut rusak | cara merawat rambut rusak | cara merawat rambut rusak | cara merawat rambut rusak | cara merawat rambut rusak | cara merawat rambut rusak | cara merawat rambut rusak

Peterpan Boy said...

cara merawat rambut rusak kembali sehat secara alami
cara merawat rambut rusak | cara merawat rambut rusak | cara merawat rambut rusak | cara merawat rambut rusak | cara merawat rambut rusak | cara merawat rambut rusak | cara merawat rambut rusak | cara merawat rambut rusak | cara merawat rambut rusak | cara merawat rambut rusak | cara merawat rambut rusak | cara merawat rambut rusak | cara merawat rambut rusak | cara merawat rambut rusak | cara merawat rambut rusak | cara merawat rambut rusak | cara merawat rambut rusak | cara merawat rambut rusak | cara merawat rambut rusak | cara merawat rambut rusak | cara merawat rambut rusak | cara merawat rambut rusak | cara merawat rambut rusak

Endi Alimsyah said...

RENTAL MOBIL MALANG? DI NAHWA.CO.ID AJA
RENTAL MOBIL MALANG? DI NAHWA.CO.ID AJA
RENTAL MOBIL MALANG? DI NAHWA.CO.ID AJA
RENTAL MOBIL MALANG? DI NAHWA.CO.ID AJA
RENTAL MOBIL MALANG? DI NAHWA.CO.ID AJA
Mengapa Saya Memilih REXCO Dibandingkan Merk Lain?
Mengapa Saya Memilih REXCO Dibandingkan Merk Lain?
Mengapa Saya Memilih REXCO Dibandingkan Merk Lain?

fifacosmetic said...

Jasa Interior Jakarta
Jasa Interior kamar anak Jakarta
Jasa Interior kantor Jakarta
Jasa Interior kitchen set Jakarta
cara terbaru
mekanisme terbaru pengangkatan guru
kumpulan soal ulangan pkn smp
jokowi
ahok
Prabowo
SBY

dompet pria kulit pari
dompet wanita kulit pari
dompet kulit pari
go jek
grabbike
gojek bandung
gojek jakarta
uber gratis
uber promo code
uber coupon
atap transparan
atap transparan
cara menghilangkan jerawat cepat
cara menghilangkan jerawat

fifacosmetic said...

jual boneka teddy
boneka teddy jumbo
jual boneka online

fifacosmetic said...

jasa backlink murah berkualitas,
Alat ukur standar Backlink goseopro.net,
Bukti klien jasa backlink goseopro.net
blog manfaat bersama
Cara Mengatasi Widows Help and support yang muncul terus
Cara Membobol atau membuka situs yang di block
cara mengeluarkan akun bbm di android
cara cek page one
jasa backlink manual murah

poker online
capsa susun
capsa online
vimax asli
vimax asli
vimax asli

fifacosmetic said...

Tas Dompet Gelang Sabuk Kulit Pari Ular Sapi Eksklusif
Jual Tas Dompet Gelang Sabuk Kulit Pari Berkualitas
Harga Gelang Kulit Pari Pria Wanita Murah Terbaik
Dompet Kulit Ikan Pari Asli Berkualitas Premium
Jual Ikat Pinggang Pria Kulit Original Murah Branded


Pengobatan Herbal Rematik Sendi
Obat Herbal Pengapuran Tulang
obat herbal asam urat manjur
obat kista ovarium
obat kista ovarium herbal
pengobatan kista ovarium selain operasi
obat herbal
crystal x
obat herbal asam urat

Kewanitaan terbaru said...

salam.
saya senang bisa hadir berkunjung ke sini, beberapa informasi yang sudah di shering sangatlah menarik.
mohon maaf kunjungan saya kesini meninggal jejak atau info yang mungkin berguna buat teman kita yang lain.

toko alat bantu pria dan wanita
jual mainan seksual
alat bantu seksual untuk pria dan wanita dewasa.

Beauty Water Spray said...

Kangen Water
Air Kangen
Jual Mesin Kangen Water
Harga Mesin Kangen Water
Manfaat Kangen Water
Beauty Water
Strong Acid
Kangen Water Adalah
Harga Kangen Water

prashant sediwal said...

brillant piece of information, I had come to know about your web-page  from my friend hardkik, chennai,i have read atleast 9 posts of yours by now, and let me tell you, your webpage gives the best and the most interesting information. This is just the kind of information that i had been looking for, i'm already your rss reader now and i would regularly watch out for the new posts, once again hats off to you! Thanx a million once again, Regards, flipkart discount coupons

prashant sediwal said...

too good piece of information, I had come to know about your site  from my friend sajid, bangalore,i have read atleast 11 posts of yours by now, and let me tell you, your web-page gives the best and the most interesting information. This is just the kind of information that i had been looking for, i'm already your rss reader now and i would regularly watch out for the new post, once again hats off to you! Thanks a lot once again, Regards, flipkart discount coupons

Saepul Anwar said...

kata kata mutiara
kata kata bijak
kata kata indah
kata kata hikamh
monifoto

Master Kiu Kiu said...

wuah, boleh juga dicoba ini nanti, hehe ane jadi penasaran untuk cobain nanti, thanks yah buat artikel dan info sharingnya !! :)
tetap semangat lanjutkan yah !!

domino qiu qiu
adu q ceme
bandar q bandar kiu
capsa susun
domino qq domino qiu qiu
texas poker
panduan hokicapsa
cara bermain adu q di hokicapsa
cara bermain bandar q di hokicapsa
cara bermain capsa susun di hokicapsa
cara bermain domino qq di hokicapsa
cara bermain texas poker di hokicapsa

nara abdel said...

Download Lagu Mp3 Terbaru 2016 di:
-> ProMP3
-> Portal Musik

Meltus Jacob said...

Diabetes 60 system http://http://jrhonest.com/diabetes-60-system-review/
Diabetes 60 system Review http://http://cbreviewfactory.com/diabetes-60-system-review/
Diabetes 60 system Book Review http://https://sites.google.com/site/diabetes60systemfreereview/
Diabetes 60 system http://http://jrreviews.hatenablog.com/entry/2015/10/30/125934
Diabetes 60 system eBook http://https://www.mql5.com/en/blogs/post/657717

Meltus Jacob said...

I really thank you for the valuable info on this great subject and look forward to more great posts. Thanks a lot for enjoying this beauty article with me. I am appreciating it very much! Looking forward to another great article. Good luck to the author! All the best! Diabetes 60 System Review [url=Link]http://jrhonest.com/diabetes-60-system-review/[/url]

Megdalena Blog said...

Awesome article! I want people to know just how good this information is in your article. It’s interesting. compelling content. Your views are much like my own concerning this subject.
http://www.linkedin.com/pulse/millionaires-brain-academy-review-natasha-natvi

Budy said...

tempat download music sepuasnya hanya di

BANKMUSIC.WAPKA.ME
| MYMP3..NEXTWAPBLOG.COM
| MYDANGDUT.WAPKA.MOBI
| MYDANGDUT.NEXTWAPBLOG.COM

Helene Mcconnell said...

Wonderful when I see this. I can get many useful information. Hope more communicate we can. And I want to ask anyone ever use this how to recover usb files . Unfortunately I lost my files. I do not know how to do. Hope somebody can help me.

Rina rosiana said...

obat penggugur
obat penggugur kandungan
jual obat penggugur
harga obat penggugur
cara menggugurkan kandungan
cara menggugurkan kandungan 1 bulan
cara menggugurkan kandungan 2 bulan
cara menggugurkan kandungan 3 bulan
cara pemakaian cytotec usia 1 bulan
cytotec
harga cytotec
harga obat cytotec
harga obat misoprostol
jual cytotec
obat cytotec
harga cytotec di apotik
cara pemakaian cytotec
cara pemakaian obat cytotec
obat telat bulan
harga cytotec

Radja Pari said...

Salam kenal dari kami,Radja Craft toko online yang menjual kerajinan vinyl unik murah berkualitas Box Jam Tangan Isi 12.Banyak perusahaan yang sedang mencari gift atau souvenir sebagai cinderamata.Kotak Tempat Jam Tangan Maka dari itu kami menawarkan beberapa produk yang mungkin bisa dijadikan alternatif baru sebagai souvenir unik,murah dan berkelas.Radja Craft merupakan online shop yang berpusat di yogyakarta Kotak Jam Tangan.Jika anda sedang mencari kado unik maka kerajinan vinyl bisa manjadi pilihannya.Berbekal pengrajin berpengalaman,kami siap membantu anda untuk memproduksi ratusan produk dan bahkan ribuan produk.Tempat Jam Tangan .Material produk pilihan dan berkualitas menjadi salah satu prioritas kami.Dikerjakan dengan penuh ketelitian akan menghaslkan sebuah produk yang rapi dan presisi.Beberapa produk kamimenggunakan bahan trilek atau kayu lapis agar lebih kuat dan tahan lama,seperti produk kami yang satu ini Box Jam Tangan.Jika anda membeli produk kami dalam jumlah banyak,maka kami juga akan memberikan harga khusus,misalkan harga Grosir Kotak Tempat Jam Tangan Sekian dari kami semoga bermanfaat,salam sukses

Amr Habib said...

موقع شركات.كوم
مصطلحات اقتصادية
الصناعة
منتدى الشركات
دليل شركات مصر
دليل شركات السعودية
دليل شركات الامارات
دليل شركات الكويت
دليل شركات الاردن
دليل شركات
شركات
معلومات سياحيه
شخصيات
اقتصاد
بيانات شركات
ميكانيكا وتكنولجيا

pilpeluntur kandungan said...
This comment has been removed by the author.
pilpeluntur kandungan said...

Kami Akan Memberikan Solusi Dan Tips Yang Aman Dan Baik Cara Menggugurkan Kandungan Dengan Obat Aborsi Cytotec®, demikian artikel dari kami tentang Ciri Cytotec Asli Dan Palsu semoga bermanfaat untuk anda semua yang sedang mencari obat cytotec!

BSM BANGUN said...

Jual Pagar BRC


Atap Alderon

Unknown said...

Obat Kuat Rx24 meningkatkan metabolisme dan menambah Stamina Juga menambah Besar Ukuran Penis pria agar hasil lebih cepat dan efektif. Layakya Minum Obat Kuat Via gra

Chiby Loupatty said...

artikel yang sanga menarik untuk di simak kitchen set

Avijeh Reportage said...

که در صنایع بتن شیمی بکار می رود و نبود آن بدون شک برای بتن مشکل ساز خواهد شد. ما در مقاله ای که امروز برای شما آماده کرده ایم قصد داریم به معرفی گروت و انواع آن بپردازیم؛ با مقاله آشنایی با گروت همراه وبلاگ دانستنی های بتن

Chiby Loupatty said...

good news and very interesting harga pompa kolam renang

FreeeBookPDFDownload said...

http://freepdfebookdownload.org/the-manifestation-millionaire-review/



http://jrhonest.com/the-manifestation-millionaire-review/

Chiby Loupatty said...

this is great article konsultan strategi bisnis

ANDRI VIRUS ANAK MAMI said...

terimakasih untuk informasinya Manajemen SDM

Chiby Loupatty said...

good news and usefull informations jasa pembuatan skt

Bahareh Sarmast said...

ن جزیره های اندونزی است که تجربه تور آن یکی از پیشنهادهای ویژه کاروانیک به شماست. دلیل اصلی جذاب بودن سفر به این جزیره را بی شک باید به جاذبه های فوق العاده دیدنی آن نسبت داد. ساده ترین راه استفاده از دیدنی های این منطقه ی شگفت انگیز، انتخاب یکی از تورهای این جزیره می باشد که از نظر ما تور بالی نوروز
رو بروی خود به شما داده است. مشاهده غروب خورشید و امواج خروشان اقیانوسی پیشنهاد ما برای تور نوروزی 97 در معبد می باشد که باز هم در نوع خود بی نظیر و خاص
جاذبه های گردشگری بالی تبدیل ش
در تور بالی به سادگی می توانید با استفاده از نید و اطلاعات مفید زیادی را نیز کسب کنید. در این تور کوچک یک روزه می توانید از نمایش فیل ها و اورانگو

Post a Comment