Setelah semuanya, saya berhasil menemukan sepotong kode sederhana yang menunjukkan cara menggambar gambar 2D dengan openGL:
#include "SDL/SDL.h"
#include "SDL/SDL_opengl.h"
#include "SDL/SDL_image.h"
const int SCREEN_WIDTH = 640;
const int SCREEN_HEIGHT = 480;
const int SCREEN_BPP = 32;
int tex;
int loadTexture(char* fileName){
SDL_Surface *image=IMG_Load(fileName);
SDL_DisplayFormatAlpha(image);
GLuint object;
glGenTextures(1,&object);
glBindTexture(GL_TEXTURE_2D,object);
glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST);
glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST);
glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_CLAMP_TO_EDGE);
glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_CLAMP_TO_EDGE);
glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA,image->w,image ->h,0,GL_RGBA,GL_UNSIGNED_BYTE,image->pixels);
SDL_FreeSurface(image);
return object;
}
void init(){
glClearColor(0.0,0.0,0.0,0.0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0.0,800,600,1.0,-1.0,1.0);
glEnable(GL_BLEND);
glEnable(GL_TEXTURE_2D);
glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
tex = loadTexture("hi.png");
}
void draw(){
glClear(GL_COLOR_BUFFER_BIT);
glBindTexture(GL_TEXTURE_2D,tex);
glBegin(GL_QUADS);
glTexCoord2f(0,0);
glVertex2f(0,0);
glTexCoord2f(1,0);
glVertex2f(500,0);
glTexCoord2f(1,1);
glVertex2f(500,500);
glTexCoord2f(0,1);
glVertex2f(0,500);
glEnd();
glFlush();
}
int main(int argc,char** argv){
SDL_Init(SDL_INIT_EVERYTHING);
SDL_Surface* screen=SDL_SetVideoMode(800,600,32,SDL_SWSURFACE|SDL_OPENGL);
bool running=true;
Uint32 start;
SDL_Event event;
init();
while(running){
start=SDL_GetTicks();
draw();
while(SDL_PollEvent(&event)){
switch(event.type){
case SDL_QUIT:
running=false;
break;
}
}
SDL_GL_SwapBuffers();
if(1000/60>(SDL_GetTicks()-start))
SDL_Delay(1000/60-(SDL_GetTicks()-start));
}
SDL_Quit();
return 0;
}
Saya tidak berpengalaman dalam 2D, dan sekitar seminggu yang lalu mulai mengacaukan SDL. Membangun beberapa struktur sederhana untuk memiliki gambar, yang akan berlapis-lapis, sehingga saya dapat memiliki urutan gambar saya sendiri, sehingga sprite akan diambil setelah latar belakang, dll, dan kemudian melakukan sedikit "mesin sprite". Saya mendapatkan sprite Megaman yang berjalan kiri dan kanan seperti yang saya inginkan, di atas gambar latar 900x900an sederhana.
Masalahnya, CPU hampir mencapai 20% pada i5 saya ... jadi saya berpikir untuk menggunakan kartu grafis untuk menggambar! Digabungkan abit ke OpenGL dan hari ini, akhirnya berhasil membuat gl3w bekerja!
Jadi sekarang saya sedang mencari cara sederhana untuk menampilkan sprite / gambar saya, di jendela, melalui penggunaan OpenGL. Saya sudah mencoba semua jenis kode yang saya temui, tetapi saya tidak bisa menampilkan apa pun, meskipun saya telah melakukan pemeriksaan kesalahan pada dasarnya di mana-mana, dan semuanya tampak benar!
TL: DR; Saya sedang mencari beberapa kode kerja sederhana, menggunakan SDL, tentang cara menggambar gambar 2D (yang, jika tidak berfungsi, pasti saya punya sesuatu yang salah).
Terima kasih!
Jawaban:
Saya sarankan memuat sprite Anda menggunakan SOIL , dan kemudian merendernya dengan hanya menggambar paha depan bertekstur. Jika Anda melakukannya tanpa fungsionalitas usang (gunakan shader), Anda akan menemukannya sangat cepat.
sumber
Berikut ini adalah titik awal yang agak dasar tetapi bagus untuk menggambar paha depan bertekstur di OpenGL, dari titik awal fungsi ini saya memiliki 7 fungsi lain yang menyediakan fungsionalitas yang sedikit berbeda, untuk menggambar dengan warna gelap, untuk menggambar item dengan nilai alpha yang berbeda dan kemudian kami memiliki rotasi, kliping dll. Tapi ini akan membantu Anda memulai :).
Edit: Kode Diperbarui;
Gambar adalah struktur dasar yang memegang data tekstur (GLuint) dan kemudian dua bilangan bulat untuk menahan lebar & tinggi.
sumber
Apakah SDL diperlukan untuk Anda? SFML adalah alternatif untuk SDL yang menggunakan OpenGL untuk rendering. Mungkin juga lebih mudah bagi pemula, karena API berorientasi objek.
sumber