ورود

View Full Version : مشکل در تکسچر روی مکعب



helisa
شنبه 14 بهمن 1391, 11:45 صبح
با سلام خدمت دوستان محترم
من یک برنامه opengl به زبان سی پلاس پلاس می خوام بنویسم که یک عکس با فرمت bmp رو، روی یک مکعب تکسچر کند
هرچه در اینترنت جستجو کردم، چیزی دستگیرم نشد، چون مثال هایش خیلی پیچیده بودند
از دوستان تقاضا می کنم، به طور ساده نحوه خواندن عکس با فرمت bmp و ذخیره کردن در آرایه و چسباندن آن روی یک مربع را توضیح دهند
من خیلی عجله دارم، ممنون می شوم پاسخ دهید
با تشکر فراوان

mohammadali1375
شنبه 14 بهمن 1391, 21:42 عصر
سلام
با SDL میتونی عکس لود کنی و با اپن جی ال هم ارتباط برقرار کنی و ....
توی GProg.ir میتونی آموزشش هاشو پیدا کنی. اینم کد یک مکعب همراه با تکسچر که خودم نوشتم :

-------------------------------
main.cpp

#include "Texture.h"

int main(int argc,char* argv[])
{
SDL_Init(SDL_INIT_EVERYTHING);
SDL_SetVideoMode(800,600,32,SDL_OPENGL);
glEnable(GL_DEPTH_TEST);
glEnable(GL_TEXTURE_2D);
glClearColor(0,0,0,1);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(45,800/600,1,100);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(7,7,7,
0,0,0,
0,1,0);
Texture* textre=new Texture((IMG_Load("Texture.png")));
int rot=0;
while(1)
{

glLoadIdentity();

gluLookAt(2,2,2,
0,0,0,
0,1,0);

glRotatef(rot,0,1,0);

glBindTexture(GL_TEXTURE_2D,textre->textureID);
glBegin(GL_QUADS);

glTexCoord2f(0,0);
glVertex3f(-.5f , -.5f , .5f);
glTexCoord2f(1,0);
glVertex3f(.5f , -.5f , .5f);
glTexCoord2f(1,1);
glVertex3f(.5f , .5f, .5f);
glTexCoord2f(0,1);
glVertex3f(-.5f , .5f , .5f);


glTexCoord2f(0,0);
glVertex3f(-.5f , -.5f , -.5f);
glTexCoord2f(0,1);
glVertex3f(.5f , -.5f , -.5f);
glTexCoord2f(1,1);
glVertex3f(.5f , .5f , -.5f);
glTexCoord2f(1,0);
glVertex3f(-.5f , .5f , -.5f);


glTexCoord2f(0,0);
glVertex3f(-.5f , .5f , -.5f);
glTexCoord2f(0,1);
glVertex3f(.5f , .5f , -.5f);
glTexCoord2f(1,1);
glVertex3f(.5f , .5f , .5f);
glTexCoord2f(1,0);
glVertex3f(-.5f , .5f , .5f);


glTexCoord2f(0,0);
glVertex3f(.5f , -.5f , -.5f);
glTexCoord2f(0,1);
glVertex3f(.5f , .5f ,-.5f);
glTexCoord2f(1,1);
glVertex3f(.5f , .5f , .5f);
glTexCoord2f(1,0);
glVertex3f(.5f , -.5f , .5f);


glTexCoord2f(0,0);
glVertex3f(-.5f , .5f , .5f);
glTexCoord2f(0,1);
glVertex3f(-.5f , -.5f ,.5f);
glTexCoord2f(1,1);
glVertex3f(-.5f , -.5f , -.5f);
glTexCoord2f(1,0);
glVertex3f(-.5f , .5f , -.5f);

glTexCoord2f(0,0);
glVertex3f(.5f , -.5f , .5f);
glTexCoord2f(0,1);
glVertex3f(-.5f , -.5f , .5f);
glTexCoord2f(1,1);
glVertex3f(-.5f , -.5f , -.5f);
glTexCoord2f(1,0);
glVertex3f(.5f , -.5f , -.5f);

glEnd();
SDL_GL_SwapBuffers();
rot++;
SDL_Delay(16);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
}


return 0;
}

-------------------------
texture.h

#pragma once

#include <SDL.h>
#include <SDL_image.h>
#include <SDL_opengl.h>

class Texture
{
public:
Texture(SDL_Surface* surface)
{
unsigned int nOfColor=surface->format->BytesPerPixel;
unsigned int textureFormat;
if(nOfColor==4)
{
if(surface->format->Rmask==0x000000ff)
{
textureFormat=GL_RGBA;
printf("RGBA");
}
else
{
textureFormat=GL_BGRA;
printf("BGRA");
}
}
else
{
if (surface->format->Rmask==0x000000ff)
{
textureFormat=GL_RGB;
printf("RGB");
}
else
{
textureFormat=GL_BGR;
printf("BGR");
}
}
glGenTextures(1,&textureID);
glBindTexture(GL_TEXTURE_2D,textureID);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTE R,GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTE R,GL_LINEAR);
glTexImage2D(GL_TEXTURE_2D,0,nOfColor,surface->w,surface->h,0,textureFormat,GL_UNSIGNED_BYTE,surface->pixels);
SDL_FreeSurface(surface);
}
unsigned int textureID;
};

UfnCod3r
یک شنبه 15 بهمن 1391, 09:47 صبح
بهتر بود اول خودتون یکم سرچ می کردین ! خدایی هزار تا اموزش هست !:عصبانی++:
بعد اگه مشکل داشین می پرسیدین !
نه اینکه ما بیایم و اینجا کد کپی کنیم !