opengl: 编程指南例子解析 opengl_wrap
来源:互联网 发布:韩国悬疑电视剧知乎 编辑:程序博客网 时间:2024/05/22 15:29
#include <iostream>using namespace std;#include <GL/glut.h>#include <stdlib.h>#include <stdio.h>#define checkImageWidth 64 //图片宽度#define checkImageHeight 64 //图片高度static GLubyte checkImage[checkImageWidth][checkImageHeight][4];//定义图片,RBGA//生成黑白相间的图片void makeCheckImage(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); makeCheckImage(); //设置纹理图片封包解包的对其方式,1字节对齐, 即每行存储的字节数必须是1的整数倍 glPixelStorei(GL_UNPACK_ALIGNMENT, 1); //s,t方向超过1纹理重复 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); //当所显示的纹理比加载进来的纹理大或小时,采用GL_NEAREST的方法来处理 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, 4, checkImageWidth, checkImageHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, checkImage);}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(); //摄像机在原点,把模型向z轴平移 3.6,不然看不到或看不全。 glTranslatef(0.0, 0.0, -3.6);}void display(void){ //清除深度缓存,颜色缓存 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); //启用2d纹理 glEnable(GL_TEXTURE_2D); //设置纹理和材料颜色混合 glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL); //画两个面 glBegin(GL_QUADS); glTexCoord2f(0.0, 0.0); glVertex3f(-2.0, -1.0, 0.0); glTexCoord2f(0.0, 5.0); glVertex3f(-2.0, 1.0, 0.0); glTexCoord2f(5.0, 5.0); glVertex3f(0.0, 1.0, 0.0); glTexCoord2f(5.0, 0.0); glVertex3f(0.0, -1.0, 0.0); glTexCoord2f(0.0, 0.0); glVertex3f(1.0, -1.0, 0.0); glTexCoord2f(0.0, 1.0); glVertex3f(1.0, 1.0, 0.0); glTexCoord2f(1.0, 1.0); glVertex3f(2.41421, 1.0, -1.41421); glTexCoord2f(1.0, 0.0); glVertex3f(2.41421, -1.0, -1.41421); glEnd(); glFlush(); glDisable(GL_TEXTURE_2D);}void keyboard (unsigned char key, int x, int y){ //设置纹理滤波 switch (key) { case 's': glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); glutPostRedisplay(); break; case 'S': glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glutPostRedisplay(); break; case 't': glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); glutPostRedisplay(); break; case 'T': glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); glutPostRedisplay(); break; case 'a': glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glutPostRedisplay(); break; case 'A': glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glutPostRedisplay(); break; case 'e': glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glutPostRedisplay(); break; case 'E': glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glutPostRedisplay(); break; case 27: exit(0); break; default: 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(); glutDisplayFunc(display); glutReshapeFunc(reshape); glutKeyboardFunc(keyboard); glutMainLoop(); return 0;}
0 0
- opengl: 编程指南例子解析 opengl_wrap
- OpenGL编程指南
- OpenGL编程指南
- OpenGL编程指南
- OpenGL编程指南 - 第一章
- OpenGL编程指南目录
- opengl编程指南
- OPENGL编程指南
- opengl编程指南
- opengl编程指南笔记
- OpenGL编程指南 代码
- opengl编程指南
- OpenGL编程指南-光照
- OpenGL 2.0编程例子
- OpenGL编程指南(OpenGL红宝书)
- OpenGL编程指南-->OpenGL缓冲区对象
- Opengl编程指南读书笔记-Opengl着色器
- OpenGL编程指南1:OpenGL简介
- 电阻瞬时过载
- WCF探索之旅(一)——入门
- 一个电子产品删除照片怎么办
- 音乐
- 暂且叫提问的艺术吧
- opengl: 编程指南例子解析 opengl_wrap
- Ajax中一些特定代码的解释
- Perl数组排序
- libev 设计分析
- 听说别人是注册会计师时的感觉
- JAVA wait(), notify(),sleep详解
- nand could not create temp file for system nand disk image file exists
- 代理模式
- java 对象池 管理 自创