// glutEx1.cpp : 定义控制台应用程序的入口点。
//
#include <windows.h>
#include <stdlib.h>
#include <stdio.h>
#include "glut.h"
#include <gl/GLU.h>
#include <gl/glaux.h>
#include <gl/glext.h>
#define BITMAP_ID 0x4D42 //验证是否为bitmap时使用
PFNGLMULTITEXCOORD2FARBPROC glMultiTexCoord2fARB = NULL;
PFNGLACTIVETEXTUREARBPROC glActiveTextureARB = NULL;
PFNGLCLIENTACTIVETEXTUREARBPROC glClientActiveTextureARB= NULL;
#define ImageWidth 128 //纹理宽
#define ImageHeight 128 //纹理高
GLfloat planeCoefficients[4] = {1, 0, 0, 0};
float fTranslate;
float fRotate;
float fScale = 1.0f; // set inital scale value to 1.0f
//static GLfloat xequalzero[] = {1.0, 0.0, 0.0, 0.0};
//static GLfloat *currentCoeff;
static GLuint texName[3];
bool bPersp = false;
bool bAnim = false;
bool bWire = false;
GLfloat lightDirection[]={0,1,1,1};
GLubyte tex[ImageWidth][ImageHeight][3];
int wHeight = 0;
int wWidth = 0;
AUX_RGBImageRec * LoadBMP(char *Filename) // 根据位图文件的名称进行加载
{
FILE *File=NULL; // 文件指针
if (!Filename) // 如果没有指定位图文件名称就返回NULL
{
return NULL;
}
File=fopen(Filename,"r"); // 根据指定的位图文件名称,打开该位图文件
if (File) // 如果位图文件存在
{
fclose(File); // 因为只是需要判断问题是否存在,而不需要对位图文件进行写操作,所以关闭位图文件
WCHAR wfilename[256];
memset(wfilename,0,sizeof(wfilename));
MultiByteToWideChar(CP_ACP,0,Filename,strlen(Filename)+1,wfilename,sizeof(wfilename)/sizeof(wfilename[0]));
return auxDIBImageLoad(wfilename);
// 其实,只需要一个真正存在的位图文件的名称,实现加载位图文件,并返回一个指针
}
else
return NULL; // 位图文件加载失败就返回NULL
}
//生成自定义纹理
void setUserdefinedTexture(int TEXW,int TEXH,GLubyte tex[ImageWidth][ImageHeight][3]){
glPixelStorei(GL_UNPACK_ALIGNMENT,1); //设置像素存储模式控制所读取的图像数据的行对齐方式.
glTexImage2D(GL_TEXTURE_2D,0,3,TEXW,TEXW,0,GL_RGB,GL_UNSIGNED_BYTE,tex);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_REPEAT);
//自动生成纹理坐标
glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR) ;
glTexGenfv(GL_S, GL_OBJECT_PLANE, planeCoefficients) ;
glEnable(GL_TEXTURE_GEN_S) ;
}
void init(void)
{
glClearColor (0.0, 0.0, 0.0, 0.0); // 黑色背景
glShadeModel(GL_SMOOTH); // 启用阴影平滑
glEnable(GL_DEPTH_TEST); // 启用深度测试
glActiveTextureARB=(PFNGLCLIENTACTIVETEXTUREARBPROC)wglGetProcAddress("glActiveTextureARB");
glMultiTexCoord2fARB = (PFNGLMULTITEXCOORD2FARBPROC)wglGetProcAddress("glMultiTexCoord2fARB");
glClientActiveTextureARB=(PFNGLACTIVETEXTUREARBPROC)wglGetProcAddress("glClientActiveTextureARB");
AUX_RGBImageRec *TextureImage[3]; // 创建一个纹理图像数组,这里指定数组大小为6
char *pictures[] = {// 创建一个位图名称数组,对应6幅位图
"picture\\Monet.bmp",
"picture\\Crack.bmp",
"picture\\Spot.bmp"
};
for(int i=0;i<3;i++)
{
TextureImage[i]=LoadBMP(pictures[i]);
glGenTextures(4, &texName[i]); // 为第i个位图创建纹理
glBindTexture(GL_TEXTURE_2D, texName[i]);// 将生成的纹理的名称绑定到指定的纹理上
glPixelStorei(GL_UNPACK_ALIGNMENT, 1); //设置像素存储模式控制所读取的图像数据的行对齐方式
//制定当前纹理的过滤方式
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, TextureImage[i]->sizeX, TextureImage[i]->sizeY,
0, GL_RGB, GL_UNSIGNED_BYTE, TextureImage[i]->data); //在OpenGL中主要用来指定二维纹理和立方体纹理
//glEnable(GL_TEXTURE_GEN_S);
glEnable(GL_TEXTURE_2D);// 启用纹理映射
glEnable(GL_CULL_FACE);//曲面在背面不显示
}
glBindTexture(GL_TEXTURE_2D, texName[3]) ; //生成自定义纹理
int i, j;
for (i = 0; i < ImageWidth; i++)
{
for (j = 0; j < ImageHeight; j++)
{
if ((i/8) % 2 == 0 && (j/8) % 2 == 0)
tex[i][j][0] = (GLubyte)255;
else if ((i/8) % 2 == 1 && (j/8) % 2 == 1)
tex[i][j][0] = (GLubyte)255;
else
tex[i][j][0] = (GLubyte)0;
tex[i][j][1] = (GLubyte)0; //g为0
tex[i][j][2] = (GLubyte)0; //b为0
}
}
setUserdefinedTexture(ImageWidth,ImageHeight,tex);
glEnable(GL_LIGHTING);
GLfloat ambient[] = { 1, 1, 1, 1.0 };
glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, GL_TRUE);
GLfloat white[] = { 1.0, 1.0, 1.0, 1.0 };
GLfloat light_pos[] = {-2,2,2,1};
glLightfv(GL_LIGHT0, GL_POSITION, light_pos);
glLightfv(GL_LIGHT0, GL_AMBIENT, white);
glEnable(GL_LIGHT0);
//glDisable(GL_LIGHT0);
glEnable(GL_AUTO_NORMAL);
glEnable(GL_NORMALIZE);
glFrontFace(GL_CW);
glCullFace(GL_BACK);
glMaterialf (GL_FRONT, GL_SHININESS, 64.0); //材料属性
}
void Draw_cuboid(GLfloat x1, GLfloat x2, GLfloat y1, GLfloat y2, GLfloat z1, GLfloat z2) // 绘制长方体
{
glBegin(GL_QUADS);
//// 前面
//glTexCoord2f(0.0f, 0.0f); glVertex3f(x1, y2, z1); // 纹理和四边形的左下
//glTexCoord2f(1.0f, 0.0f); glVertex3f(x2, y2, z1); // 纹理和四边形的右下
//glTexCoord2f(1.0f, 1.0f); glVertex3f(x2, y2, z2); // 纹理和四边形的右上
//glTexCoord2f(0.0f, 1.0f); glVertex3f(x1, y2, z2); // 纹理和四边形的左上
//// 后面
//glTexCoord2f(1.0f, 0.0f); glVertex3f(x1, y1, z1); // 纹理和四边形的右下
//glTexCoord2f(1.0f, 1.0f); glVertex3f(x1, y1, z2); // 纹理和四边形的右上
//glTexCoord2f(0.0f, 1.0f); glVertex3f(x2, y1, z2); // 纹理和四边形的左上
//glTexCoord2f(0.0f, 0.0f); glVertex3f(x2, y1, z1); // 纹理和四边形的左下
//// 顶面
//glTexCoord2f(0.0f, 1.0f); glVertex3f(x1, y1, z2); // 纹理和四边形的左上
//glTexCoord2f(0.0f, 0.0f); glVertex3f(x1, y2, z2); // 纹理和四边形的左下
//glTexCoord2f(1.0f, 0.0f); glVertex3f(x2, y2, z2); // 纹理和四边形的右下
//glTexCoord2f(1.0f, 1.0f); glVertex3f(x2, y1, z2); // 纹理和四边形的右上
//// 底面
//glTexCoord2f(1.0f, 1.0f); glVertex3f(x2, y2, z1); // 纹理和四边形的右上
//glTexCoord2f(0.0f, 1.0f); glVertex3f(x1, y2, z1); // 纹理和四边形的左上
//glTexCoord2f(0.0f, 0.0f); glVertex3f(x1, y1, z1); // 纹理和四边形的左下
//glTexCoord2f(1.0f, 0.0f); glVertex3f(x2, y1, z1); // 纹理和四边形的右下
//// 右面
//glTexCoord2f(1.0f, 0.0f); glVertex3f(x2, y1, z1); // 纹理和四边形的右下
//glTexCoord2f(1.0f, 1.0f); glVertex3f(x2, y1, z2); // 纹理和四边形的右上
//glTexCoord2f(0.0f, 1.0f); glVertex3f(x2, y2, z2); // 纹理和四边形的左上
//glTexCoord2f(0.0f, 0.0f); glVertex3f(x2, y2, z1); // 纹理和四边形的左下
//// 左面
//glTexCoord2f(0.0f, 0.0f); glVertex3f(x1, y1, z1); // 纹理和四边形的左下
//glTexCoord2f(1.0f, 0.0f); glVertex3f(x1, y2, z1); // 纹理和四边形的右下
//glTexCoord2f(1.0f, 1.0f); glVertex3f(x1, y2,z2); // 纹理和四边形的右上
//glTexCoord2f(0.0f, 1.0f); glVertex3f(x1, y1, z2); // 纹理和四边形的左上
//前面
glMultiTexCoord2fARB(GL_TEXTURE0_ARB,0.0f, 0.0f); glMultiTexCoord2fARB(GL_TEXTURE1_ARB,0.0f, 0.0f);glVertex3f(x1, y2, z1); // 纹理和四边形的左下
glMultiTexCoord2fARB(GL_TEXTURE0_ARB,1.0f, 0.0f);glMultiTexCoord2fARB(GL_TEXTURE1_ARB,1.0f, 0.0f); glVertex3f(x2, y2, z1); // 纹理和四边形的右下
glMultiTexCoord2fARB(GL_TEXTURE0_ARB,1.0f, 1.0f);glMultiTexCoord2fARB(GL_TEXTURE1_ARB,1.0f, 1.0f); glVertex3f(x2, y2, z2); // 纹理和四边形的右上
glMultiTexCoord2fARB(GL_TEXTURE0_ARB,0.0f, 1.0f); glMultiTexCoord2fARB(GL_TEXTURE1_ARB,0.0f, 1.0f); glV
没有合适的资源?快使用搜索试试~ 我知道了~
opengl_texture.zip_OPENGL 纹理_纹理
共86个文件
tlog:64个
bmp:3个
pdb:2个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 25 浏览量
2022-09-24
21:17:41
上传
评论
收藏 10.64MB ZIP 举报
温馨提示
利用opengl实现纹理的加载,纹理的叠合以及自行创建纹理与使用
资源推荐
资源详情
资源评论
收起资源包目录
opengl_texture.zip (86个子文件)
opengl_纹理
Ex6.suo 10KB
Ex6
picture
Spot.bmp 48KB
Crack.bmp 48KB
Monet.bmp 768KB
Ex6.vcxproj 4KB
Ex6.vcxproj.user 143B
main.cpp 16KB
glut
glut32.dll 232KB
glut32.lib 28KB
glut.h 27KB
Debug
link.10164-rc.read.1.tlog 2B
link.10288-cvtres.read.1.tlog 2B
vc110.idb 659KB
link.10288-rc.write.1.tlog 2B
link.10288-cvtres.write.1.tlog 2B
link.10292-cvtres.read.1.tlog 2B
link.11776-cvtres.read.1.tlog 2B
link.12620.write.1.tlog 2B
link.7076.write.1.tlog 2B
link.12620-cvtres.write.1.tlog 2B
CL.write.1.tlog 574B
link.8308.write.1.tlog 2B
link.11776.read.1.tlog 2B
link.10288-rc.read.1.tlog 2B
CL.read.1.tlog 39KB
link.8308-cvtres.write.1.tlog 2B
link.7076-rc.read.1.tlog 2B
link.10288.read.1.tlog 2B
link.10164.write.1.tlog 2B
link.12620-rc.read.1.tlog 2B
link.10164-rc.write.1.tlog 2B
link.10164.read.1.tlog 2B
link.14532-cvtres.write.1.tlog 2B
link.14532.read.1.tlog 2B
link.2816.read.1.tlog 2B
link.11776-rc.write.1.tlog 2B
cl.command.1.tlog 1KB
link-cvtres.read.1.tlog 2B
link.2816-cvtres.write.1.tlog 2B
main.obj 69KB
link.14532-cvtres.read.1.tlog 2B
link.12620-cvtres.read.1.tlog 2B
link.8308-cvtres.read.1.tlog 2B
link.8308.read.1.tlog 2B
link.write.1.tlog 730B
link.2816-rc.write.1.tlog 2B
link.10288.write.1.tlog 2B
link.10292-rc.read.1.tlog 2B
link.2816.write.1.tlog 2B
link.14532-rc.read.1.tlog 2B
link-rc.write.1.tlog 2B
link.14532-rc.write.1.tlog 2B
link.2816-rc.read.1.tlog 2B
link-cvtres.write.1.tlog 2B
link.10292.read.1.tlog 2B
link.7076.read.1.tlog 2B
link.command.1.tlog 2KB
link.10164-cvtres.read.1.tlog 2B
link.10292-cvtres.write.1.tlog 2B
Ex6.log 2KB
link.11776.write.1.tlog 2B
link-rc.read.1.tlog 2B
link.read.1.tlog 6KB
link.8308-rc.read.1.tlog 2B
link.7076-cvtres.read.1.tlog 2B
vc110.pdb 148KB
Ex6.lastbuildstate 97B
link.10292-rc.write.1.tlog 2B
link.14532.write.1.tlog 2B
link.2816-cvtres.read.1.tlog 2B
link.8308-rc.write.1.tlog 2B
link.11776-cvtres.write.1.tlog 2B
link.7076-cvtres.write.1.tlog 2B
link.7076-rc.write.1.tlog 2B
link.12620-rc.write.1.tlog 2B
link.10164-cvtres.write.1.tlog 2B
link.10292.write.1.tlog 2B
link.12620.read.1.tlog 2B
link.11776-rc.read.1.tlog 2B
Ex6.sln 876B
Ex6.sdf 31.19MB
Debug
glut32.dll 232KB
Ex6.exe 69KB
Ex6.ilk 573KB
Ex6.pdb 723KB
Ex6.v11.suo 26KB
共 86 条
- 1
资源评论
weixin_42653672
- 粉丝: 93
- 资源: 1万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功