因此,當涉及將ppm紋理應用到四邊形時,我有一些粗糙的內容。我的問題是顏色不「正確」。Opengl在將紋理應用到對象時出現錯誤的顏色
下面是對木星汞幾個行星。
唯一正確的顏色是地球。
我下載的紋理在線(JPEG文件),然後從Linux命令行
jpegtopnm Mercury.jpg > Mercury.ppm
我沒有這一切,你在上面看到的圖像的轉換他們。
起初的顏色都倒,所以我改變
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, ImgWidth, ImgHeight, 0, GL_RGB,
GL_UNSIGNED_BYTE, TexBits);
到
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, ImgWidth, ImgHeight, 0, GL_BGR,
GL_UNSIGNED_BYTE, TexBits);
和固定的反轉顏色(R,而不是b ... ECT)。現在我被困在這裏了......如何糾正紋理以顯示行星的正確顏色?
這裏是水銀紋理文件
這裏是處理紋理
void read_file(const char * filename)
{
FILE *infile;
char buf[80];
char string[256];
unsigned char *texImage;
int i, temp;
GLubyte *sp;
if ((infile = fopen(filename, "rb")) == NULL)
{
printf("File open error\n");
exit(1);
}
fgets(string, 256, infile);
fgets(string, 256, infile);
while (string[0] == '#')
fgets(string, 256, infile);
sscanf(string, "%d %d", &ImgWidth, &ImgHeight);
if (TexBits != 0)
free(TexBits);
TexBits = (GLubyte *) calloc(ImgWidth * ImgHeight * 3, sizeof(GLubyte));
for (i = ImgHeight - 1; i >= 0; i--)
{
sp = TexBits + i * ImgWidth * 3;
fread (sp, sizeof(GLubyte), ImgWidth * 3, infile);
}
fclose(infile);
}
void bindTexture()
{
glGenTextures(10, texName);
glBindTexture(GL_TEXTURE_2D, texName[1]);
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
read_file("Mercury.ppm");
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, ImgWidth, ImgHeight, 0, GL_BGR,
GL_UNSIGNED_BYTE, TexBits);
///// rest of planets in order.. (same code for each of them)
}
void drawCircle(GLfloat size, GLfloat offset, GLint r)
{
quadratic=gluNewQuadric();
gluQuadricDrawStyle(quadratic, GLU_FILL);
gluQuadricTexture(quadratic, GL_TRUE);
gluSphere(quadratic, size, r, r);
}
void display(void)
{
glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
/* mercury */
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, texName[1]);
glColor4f(1.0, 1.0, 1.0, 1.0);
DrawPlanet(-17.0f, -4.0f, -9.0f, zAxis, .7f, .3f, 25);
glBindTexture(GL_TEXTURE_2D, 0);
glDisable(GL_TEXTURE_2D);
// rest of code is similar to the one above
}
我發現它很難搞清楚爲什麼顏色是鮮豔的顏色的綠色,而不是代碼每個星球的實際顏色..看來,該計劃是棕色問題..任何想法?
你確定你的文件都是'P6',對嗎?並有一個最大值(在維度線上的第三個數字)爲255?我不知道'GLubyte'是什麼,但我知道最大值<= 255的P6每個像素只有1個字節,所以如果'GLubyte'不是1個字節,這可能是一個問題。在任何情況下,P6中的像素順序都是紅色,綠色和藍色。 –
這不是我的問題的解決方案,但它確實解決了我的問題。我做了一些打印語句來獲取標題信息,以便爲您拍攝它的屏幕截圖。我遇到過我沒有將255從混音中拉出來,因此它將255中的一些存儲在我的字節中它搞砸了顏色..我把它拉出來,並將bgr更改爲rgb,它完美的工作! – DWolf
然後我會寫一個答案。 :-) –