LINUX.ORG.RU

Почему не накладывается текстура?


0

0

................................

GLdouble angel = 0.0;
GLdouble angel_pos = 50.0;
GLdouble k = 5;
int n = 0;

tagBITMAPFILEHEADER bmpFileHeader;
tagBITMAPINFOHEADER bmpInfoHeader;

int file_bmp,nCol,nRow;
tagRGBQUAD* flat;

void readFile(void)
{
file_bmp = open ("/home/alexandr/Documents/Coding/C++/MyProjects/sphere/32b.bmp", O_RDONLY);
read (file_bmp, &bmpFileHeader, 14);
read (file_bmp, &bmpInfoHeader, 40);

nCol = bmpInfoHeader.biWidth;
nRow = bmpInfoHeader.biHeight;

n = nCol * nRow;

for (int y = bmpInfoHeader.biHeight; y > 0; y--)
{
for (int x = 0; x < bmpInfoHeader.biWidth; x++)
{
read (file_bmp, &flat[n].r, 1);
read (file_bmp, &flat[n].g,1);
read (file_bmp, &flat[n].b,1);
read (file_bmp, &flat[n].a,1);
n++;
}
}
}

void setTexture(GLuint name)
{
glBindTexture(GL_TEXTURE_2D,name);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST);
glTexImage2D(GL_TEXTURE_2D,0,GL_RGB,nCol,nRow,0,GL_RGB,GL_UNSIGNED_BYTE,flat);
}


void display(void)
{
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); //Function of clear window

///// Plase code here //////

glPushMatrix();
setTexture (2003);
glBegin(GL_POLYGON);
glTexCoord2f(-1*k,1*k);
glVertex3d(-1*k,0*k,1*k);
glTexCoord2f(1*k,1*k);
glVertex3d(1*k,0*k,1*k);
glTexCoord2f(1*k,-1*k);
glVertex3d(1*k,0*k,-1*k);
glTexCoord2f(-1*k,-1*k);
glVertex3d(-1*k,0*k,-1*k);
glEnd();
glPopMatrix();

///////////////////////////////////////////
glFlush();
glutSwapBuffers();
}
........................................................

Остальной код не превожу в следствии того что он работает, т.е. рисует плоскость.
Но вот этот кусок не работает так как надо, т.е. плоскость остаётся чистой и на неё не накладывается изображение. Подскажите что тут не так.

Заранее спасибо!!!

★★★★★

void setTexture(GLuint name)
{
glBindTexture(GL_TEXTURE_2D,name);
(...)
}

(...)
setTexture(2003);



идентификаторы текстур придумываются не от балды а с помощью glGenTextures http://www.3dlabs.com/support/developer/GLmanpages/glgentextures.htm

PS кстати, если закоментировать glBindTexture(GL_TEXTURE_2D,name); - должно заработать


Anonymous ★★★★★
()
Ответ на: комментарий от cyclon

n = nCol * nRow;

for (int y = bmpInfoHeader.biHeight; y > 0; y--)
{
for (int x = 0; x < bmpInfoHeader.biWidth; x++)
{
read (file_bmp, &flat[n].r, 1);
read (file_bmp, &flat[n].g,1);
read (file_bmp, &flat[n].b,1);
read (file_bmp, &flat[n].a,1);
n++;
}

--------------------------------------------------------


чего то меня то что происходит у тебя с n немого смущает ;)




sS ★★★★★
()
Ответ на: комментарий от sS

glEnable(GL_TEXTURE_2D) - использую но не помогло. TO sS а что смущает, сдесь n это индекс массива, который заполняется в цикле.

cyclon ★★★★★
() автор топика
Ответ на: комментарий от cyclon

> что смущает, сдесь n это индекс массива, который заполняется в цикле.

смущает что n - стартует не с 0 а потом начинает инкрементироваться (а не наоборот)

либо ты привел сильно покоцаный код

sS ★★★★★
()
Ответ на: комментарий от sS

Ну не то чтобы сильно но примерно две трети отрезано. Да и как изменяется n не имеет значения так как текстура не выводится вообще, даже искаженной, а только белый цвет.

cyclon ★★★★★
() автор топика
Ответ на: комментарий от cyclon

-

nCol,nRow чему равны? на многих картах должны быть степени 2
еще glTexCoord2f(-1*k,1*k); смущает-
попробуй заменить на glTexCoord2f(0,2*k); итд

Anonymous ★★★★★
()
Ответ на: - от Anonymous

nCol = bmpInfoHeader.biWidth; nRow = bmpInfoHeader.biHeight;

извиняюсь как понянимать "..степени 2..".

cyclon ★★★★★
() автор топика
Ответ на: комментарий от cyclon

>извиняюсь как понянимать "..степени 2..". 2, 4, 8, 16, 32, 64, 128, 256 etc

а вобще, можно весь код посмотреть? судя по отрывку ты каждый кадр заново грузишь текстуру в видеопамять(или каждый раз создаешь новую текстуру), текстура подразумевается то ли в RGB, то-ли в RGBA....

Anonymous ★★★★★
()
Ответ на: комментарий от Anonymous

Прошу не пинать но пишу всё это в KDevelop'e:

/***************************************************************************
main.cpp - description
-------------------
begin : &#240;&#206;&#196; &#243;&#197;&#206; 15 23:30:09 MSD 2003
copyright : (C) 2003 by Alexandr
email : _cyclon_@mtu.ru
***************************************************************************/

/***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************/

#ifdef HAVE_CONFIG_H
#include <config.h>
#endif

#include <iostream.h>
#include <stdlib.h>

#include "bmp.h"

#include "GL/glut.h"
#include "GL/gl.h"
#include "GL/glu.h"

GLdouble angel = 0.0;
GLdouble angel_pos = 50.0;
GLdouble k = 5;
int n = 0;

tagBITMAPFILEHEADER bmpFileHeader;
tagBITMAPINFOHEADER bmpInfoHeader;

int file_bmp,nCol,nRow;
tagRGBQUAD* flat;

void readFile(void)
{
file_bmp = open ("/home/alexandr/Documents/Coding/C++/MyProjects/sphere/32b.bmp", O_RDONLY);
read (file_bmp, &bmpFileHeader, 14);
read (file_bmp, &bmpInfoHeader, 40);

nCol = bmpInfoHeader.biWidth;
nRow = bmpInfoHeader.biHeight;

n = nCol * nRow;

for (int y = bmpInfoHeader.biHeight; y > 0; y--)
{
for (int x = 0; x < bmpInfoHeader.biWidth; x++)
{
read (file_bmp, &flat[n].r, 1);
read (file_bmp, &flat[n].g,1);
read (file_bmp, &flat[n].b,1);
read (file_bmp, &flat[n].a,1);
n++;
}
}
}

void setTexture(GLuint name)
{
glBindTexture(GL_TEXTURE_2D,name);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST);
glTexImage2D(GL_TEXTURE_2D,0,GL_RGB,nCol,nRow,0,GL_RGB,GL_UNSIGNED_BYTE,flat);
}

void Init (void)
{
glEnable(GL_TEXTURE_2D);
glEnable(GL_DEPTH_TEST);
glEnable(GL_ALPHA_TEST);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
}

void resize(int width,int height)
{
glClearColor(0.0,0.0,0.0,0.0);
glViewport(0,0,width,height);
glMatrixMode( GL_PROJECTION );
glLoadIdentity();
glOrtho(-12,12, -12,12, -20,20);
gluLookAt( 3,1,1, 0,0,0, 0,1,0 );
glMatrixMode( GL_MODELVIEW );
}

void display(void)
{
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); //Function of clear window

///// Plase code here //////

GLuint* num;

glPushMatrix();
glGenTextures(1,num);
setTexture (num[0]);
glBegin(GL_POLYGON);
glTexCoord2f(0,2*k);
glVertex3d(-1*k,0*k,1*k);
glTexCoord2f(0,2*k);
glVertex3d(1*k,0*k,1*k);
glTexCoord2f(0,2*k);
glVertex3d(1*k,0*k,-1*k);
glTexCoord2f(0,2*k);
glVertex3d(-1*k,0*k,-1*k);
glEnd();
glPopMatrix();

///////////////////////////////////////////
glFlush();
glutSwapBuffers();
}

void timer(int value)
{
glutPostRedisplay(); //Reshape function
glutTimerFunc(10, timer, 0); //Create loop of timers
angel ++;
}

int main(int argc, char *argv[])
{
glutInit(&argc, argv);

glutInitWindowSize(900, 900); //Position and
glutInitWindowPosition(0, 0); // size of window

glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE ); //Mode of MainWindow
glutCreateWindow(" Created by Cyclon (_cyclon_@mtu.ru) "); //Create window with Caption

Init(); //Initalization function

glutReshapeFunc(resize); //Function for reshape
glutDisplayFunc(display); //Function for resize

glutTimerFunc(25, timer, 0); //Timer with 25ms interval

glutMainLoop(); //Just run main loop

return 0;
}

cyclon ★★★★★
() автор топика
Ответ на: комментарий от cyclon

glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE );

поставил на RGBA, так на всякий пожарный, но не помогло.

cyclon ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.