opengl纹理映射的问题
intLoadGLTextures(){intStatus=FALSE;AUX_RGBImageRec*TextureImage[1];memset(TextureIma...
int LoadGLTextures()
{
int Status=FALSE;
AUX_RGBImageRec *TextureImage[1];
memset(TextureImage,0,sizeof(void *)*1);
if (TextureImage[0]=LoadBMP("tex/1.bmp"))
{
Status=TRUE;
glGenTextures(1, &texture[0]); //载入纹理
glBindTexture(GL_TEXTURE_2D, texture[0]);
glTexImage2D(GL_TEXTURE_2D,0,3,TextureImage[0]->sizeX,TextureImage[0]->sizeY,0,GL_RGB,GL_UNSIGNED_BYTE,TextureImage[0]->data);
}
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); // 线形滤波
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
if (TextureImage[0]) // 纹理是否存在
{
if (TextureImage[0]->data) // 纹理图像是否存在
{
free(TextureImage[0]->data); // 释放纹理图像占用的内存
}
free(TextureImage[0]); // 释放图像结构
}
return Status;
}
void RenderScene(void)
{
static float fElect1 = 0.0f; //公转
static float fElect2 = 0.0f; //月亮转
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity(); // 重置模型视图矩阵
//设置光源的位置
GLfloat position[] = { 0.0f, 0.0f, 1.5f, 1.0f };
glLightfv (GL_LIGHT0, GL_POSITION, position);
glTranslated (0.0f, 0.0f, -200); //向Z负移200
//绘制太阳
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, texture[0]); //加载图片
GLUquadricObj *pSphere =gluNewQuadric();
gluQuadricDrawStyle(pSphere, GL_FILL);
gluQuadricNormals(pSphere, GLU_SMOOTH);
gluQuadricTexture(pSphere, TRUE);
glColor3f (1.0f, 1.0f, 1.0f);
gluSphere(pSphere,30,50,50);
//glutSolidSphere (30.0f, 50.0f, 50.0f);
glPushMatrix(); //保存坐标轴位置
图片加载不上去,这是为什么?
AUX_RGBImageRec *LoadBMP(char *Filename)
{
FILE *File=NULL;
if (!Filename) // 确保文件名已提供。
{
return NULL; // 如果没提供,返回 NULL
}
File=fopen(Filename,"r");
if (File) // 文件存在么?
{
fclose(File); // 关闭句柄
return auxDIBImageLoad(Filename); //载入位图并返回指针
}
return NULL;
} 展开
{
int Status=FALSE;
AUX_RGBImageRec *TextureImage[1];
memset(TextureImage,0,sizeof(void *)*1);
if (TextureImage[0]=LoadBMP("tex/1.bmp"))
{
Status=TRUE;
glGenTextures(1, &texture[0]); //载入纹理
glBindTexture(GL_TEXTURE_2D, texture[0]);
glTexImage2D(GL_TEXTURE_2D,0,3,TextureImage[0]->sizeX,TextureImage[0]->sizeY,0,GL_RGB,GL_UNSIGNED_BYTE,TextureImage[0]->data);
}
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); // 线形滤波
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
if (TextureImage[0]) // 纹理是否存在
{
if (TextureImage[0]->data) // 纹理图像是否存在
{
free(TextureImage[0]->data); // 释放纹理图像占用的内存
}
free(TextureImage[0]); // 释放图像结构
}
return Status;
}
void RenderScene(void)
{
static float fElect1 = 0.0f; //公转
static float fElect2 = 0.0f; //月亮转
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity(); // 重置模型视图矩阵
//设置光源的位置
GLfloat position[] = { 0.0f, 0.0f, 1.5f, 1.0f };
glLightfv (GL_LIGHT0, GL_POSITION, position);
glTranslated (0.0f, 0.0f, -200); //向Z负移200
//绘制太阳
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, texture[0]); //加载图片
GLUquadricObj *pSphere =gluNewQuadric();
gluQuadricDrawStyle(pSphere, GL_FILL);
gluQuadricNormals(pSphere, GLU_SMOOTH);
gluQuadricTexture(pSphere, TRUE);
glColor3f (1.0f, 1.0f, 1.0f);
gluSphere(pSphere,30,50,50);
//glutSolidSphere (30.0f, 50.0f, 50.0f);
glPushMatrix(); //保存坐标轴位置
图片加载不上去,这是为什么?
AUX_RGBImageRec *LoadBMP(char *Filename)
{
FILE *File=NULL;
if (!Filename) // 确保文件名已提供。
{
return NULL; // 如果没提供,返回 NULL
}
File=fopen(Filename,"r");
if (File) // 文件存在么?
{
fclose(File); // 关闭句柄
return auxDIBImageLoad(Filename); //载入位图并返回指针
}
return NULL;
} 展开
1个回答
推荐于2016-10-04 · 知道合伙人互联网行家
关注
展开全部
这里贴的代码也看不出什么问题,检查纹理载入是不是有问题,图像是RGB还是RGBA之类的,我贴一段可执行的例子,你对比看看。。。
#include <GL/glut.h>
#include <stdlib.h>
#include <stdio.h>
/* Create checkerboard texture */
#define checkImageWidth 64
#define checkImageHeight 64
static GLubyte checkImage[checkImageHeight][checkImageWidth][4];
static GLuint texName;
void makeCheckImages(void)
{
int i, j, c;
for (i = 0; i < checkImageHeight; i++) {
for (j = 0; j < checkImageWidth; j++) {
c = ((((i&0x8)==0)^((j&0x8)==0)))*255;
checkImage[i][j][0] = (GLubyte) c;
checkImage[i][j][1] = (GLubyte) c;
checkImage[i][j][2] = (GLubyte) c;
checkImage[i][j][3] = (GLubyte) 255;
}
}
}
void init(void)
{
glClearColor (0.0, 0.0, 0.0, 0.0);
glShadeModel(GL_FLAT);
glEnable(GL_DEPTH_TEST);
makeCheckImages();
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
glGenTextures(1, &texName);
glBindTexture(GL_TEXTURE_2D, texName);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
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_RGBA, checkImageWidth,
checkImageHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE,
checkImage);
glEnable(GL_TEXTURE_2D);
}
void display(void)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glBindTexture(GL_TEXTURE_2D, texName);
GLUquadricObj *pSphere =gluNewQuadric();
gluQuadricDrawStyle(pSphere, GL_FILL);
gluQuadricNormals(pSphere, GLU_SMOOTH);
gluQuadricTexture(pSphere, TRUE);
glColor3f (1.0f, 1.0f, 1.0f);
glPushMatrix();
glRotatef(30.0f,1.0f,0.0f,0.0f);
gluSphere(pSphere,5,50,50);
glPopMatrix();
glFlush();
}
void reshape(int w, int h)
{
glViewport(0, 0, (GLsizei) w, (GLsizei) h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(60.0, (GLfloat) w/(GLfloat) h, 1.0, 30.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glTranslatef(0.0, 0.0, -20);
}
void keyboard(unsigned char key, int x, int y)
{
switch (key) {
case 27:
exit(0);
break;
}
}
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH);
glutInitWindowSize(250, 250);
glutInitWindowPosition(100, 100);
glutCreateWindow(argv[0]);
init();
glutReshapeFunc(reshape);
glutDisplayFunc(display);
glutKeyboardFunc (keyboard);
glutMainLoop();
return 0;
}
光点科技
2023-08-15 广告
2023-08-15 广告
通常情况下,我们会按照结构模型把系统产生的数据分为三种类型:结构化数据、半结构化数据和非结构化数据。结构化数据,即行数据,是存储在数据库里,可以用二维表结构来逻辑表达实现的数据。最常见的就是数字数据和文本数据,它们可以某种标准格式存在于文件...
点击进入详情页
本回答由光点科技提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询