पर लागू किया गया है, मैं ओपनजीएल के लिए थोड़ा नया हूं और मुझे बनावट का उपयोग करने में समस्या है। बनावट ठीक लगती है, लेकिन जब मैं प्रोग्राम चलाता हूं, तो बनावट के डिस्प्ले बाईं ओर एक पिक्सेल को स्थानांतरित कर देते हैं, जिसमें सेक्शन को दाईं ओर दिखाई देने वाली शिफ्ट से काट दिया जाता है। मुझे नहीं पता कि यहां मेरी समस्या मेरे टीजीए लोडर में है या अगर मैं क्वाड पर बनावट लागू कर रहा हूं। यहाँओपनजीएल बनावट को कुछ हद तक बाईं ओर स्थानांतरित किया गया जब एक क्वाड
#include "texture.h"
#include <iostream>
GLubyte uncompressedheader[12] = {0,0, 2,0,0,0,0,0,0,0,0,0};
GLubyte compressedheader[12] = {0,0,10,0,0,0,0,0,0,0,0,0};
TGA::TGA()
{
}
//Private loading function called by LoadTGA. Loads uncompressed TGA files
//Returns: TRUE on success, FALSE on failure
bool TGA::LoadCompressedTGA(char *filename,ifstream &texturestream)
{
return false;
}
bool TGA::LoadUncompressedTGA(char *filename,ifstream &texturestream)
{
cout << "G position status:" << texturestream.tellg() << endl;
texturestream.read((char*)header, sizeof(header)); //read 6 bytes into the file to get the tga header
width = (GLuint)header[1] * 256 + (GLuint)header[0]; //read and calculate width and save
height = (GLuint)header[3] * 256 + (GLuint)header[2]; //read and calculate height and save
bpp = (GLuint)header[4]; //read bpp and save
cout << bpp << endl;
if((width <= 0) || (height <= 0) || ((bpp != 24) && (bpp !=32))) //check to make sure the height, width, and bpp are valid
{
return false;
}
if(bpp == 24)
{
type = GL_RGB;
}
else
{
type = GL_RGBA;
}
imagesize = ((bpp/8) * width * height); //determine size in bytes of the image
cout << imagesize << endl;
imagedata = new GLubyte[imagesize]; //allocate memory for our imagedata variable
texturestream.read((char*)imagedata,imagesize); //read according the the size of the image and save into imagedata
for(GLuint cswap = 0; cswap < (GLuint)imagesize; cswap += (bpp/8)) //loop through and reverse the tga's BGR format to RGB
{
imagedata[cswap] ^= imagedata[cswap+2] ^= //1st Byte XOR 3rd Byte XOR 1st Byte XOR 3rd Byte
imagedata[cswap] ^= imagedata[cswap+2];
}
texturestream.close(); //close ifstream because we're done with it
cout << "image loaded" << endl;
glGenTextures(1, &texID); // Generate OpenGL texture IDs
glBindTexture(GL_TEXTURE_2D, texID); // Bind Our Texture
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); // Linear Filtered
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexImage2D(GL_TEXTURE_2D, 0, type, width, height, 0, type, GL_UNSIGNED_BYTE, imagedata);
delete imagedata;
return true;
}
//Public loading function for TGA images. Opens TGA file and determines
//its type, if any, then loads it and calls the appropriate function.
//Returns: TRUE on success, FALSE on failure
bool TGA::loadTGA(char *filename)
{
cout << width << endl;
ifstream texturestream;
texturestream.open(filename,ios::binary);
texturestream.read((char*)header,sizeof(header)); //read 6 bytes into the file, its the header. //if it matches the uncompressed header's first 6 bytes, load it as uncompressed
LoadUncompressedTGA(filename,texturestream);
return true;
}
GLubyte* TGA::getImageData()
{
return imagedata;
}
GLuint& TGA::getTexID()
{
return texID;
}
और ट्रैक्टर है::
यहाँ लोडर है
void Square::show()
{
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, texture.texID);
//Move to offset
glTranslatef(x, y, 0);
//Start quad
glBegin(GL_QUADS);
//Set color to white
glColor4f(1.0, 1.0, 1.0, 1.0);
//Draw square
glTexCoord2f(0.0f, 0.0f); glVertex3f(0, 0, 0);
glTexCoord2f(1.0f, 0.0f); glVertex3f(SQUARE_WIDTH, 0, 0);
glTexCoord2f(1.0f, 1.0f); glVertex3f(SQUARE_WIDTH, SQUARE_HEIGHT, 0);
glTexCoord2f(0.0f, 1.0f); glVertex3f(0, SQUARE_HEIGHT, 0);
//End quad
glEnd();
//Reset
glLoadIdentity();
}
एक स्क्रीनशॉट जोड़ने कृपया – Bahbar