Sau tất cả mọi thứ, tôi đã tìm được một đoạn mã đơn giản chỉ ra cách vẽ hình ảnh 2D bằng 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;
}
Tôi chưa có kinh nghiệm về 2D và khoảng một tuần trước đã bắt đầu nhắn tin với SDL. Xây dựng một số cấu trúc đơn giản để có hình ảnh, trên các lớp, vì vậy tôi có thể có thứ tự vẽ của riêng mình, vì vậy các họa tiết sẽ được vẽ sau nền, v.v., và sau đó thực hiện một "công cụ sprite" nhỏ. Tôi đã nhận được một Megaman sprite đi bên trái và bên phải giống như tôi muốn, trên một hình nền 900x900ish đơn giản.
Điều đáng nói là, CPU gần như đạt 20% trên i5 của tôi ... vì vậy tôi đã nghĩ đến việc sử dụng card đồ họa để thực hiện bản vẽ! Đã bỏ abit vào OpenGL và hôm nay, cuối cùng cũng có thể làm cho gl3w hoạt động!
Vì vậy, bây giờ tôi đang tìm kiếm một cách đơn giản để hiển thị các hình ảnh / hình ảnh của tôi, trên cửa sổ, thông qua việc sử dụng OpenGL. Tôi đã thử tất cả các loại mã tôi đã chạy, nhưng tôi không thể hiển thị bất cứ thứ gì, mặc dù về cơ bản tôi đã thực hiện kiểm tra lỗi và mọi thứ dường như đều đúng!
TL: DR; Tôi đang tìm kiếm một số mã làm việc đơn giản, sử dụng SDL, về cách vẽ hình ảnh 2D (mà nếu nó không hoạt động, chắc chắn tôi đã có gì đó không đúng).
Cảm ơn!