孙其功陪你学之——opengl纹理贴图(例程)
来源:互联网 发布:富士康java面试题 编辑:程序博客网 时间:2024/05/23 11:51
本人亲测例程(Opengl宝典提供——略有修改),仅供学习参考
#include <glut.h>//此头文件需注意
#include "glext.h"//此头文件位置需注意
#include <math.h>
#ifndef M_PI
# define M_PI 3.141592649
#endif /* !M_PI */
#include "bitmap.h"
#include "bitmap.c"
/*
* Globals...
*/
int Width; /* Width of window */
int Height; /* Height of window */
BITMAPINFO *TexInfo; /* Texture bitmap information */
GLubyte *TexBits; /* Texture bitmap pixel bits */
static GLfloat xRot = 0.0f;
static GLfloat yRot = 0.0f;
/*
* Functions...
*/
void Redraw(void);
void Resize(int width, int height);
void SpecialKeys(int key, int x, int y)
{
if(key == GLUT_KEY_UP)
xRot-= 5.0f;
if(key == GLUT_KEY_DOWN)
xRot += 5.0f;
if(key == GLUT_KEY_LEFT)
yRot -= 5.0f;
if(key == GLUT_KEY_RIGHT)
yRot += 5.0f;
if(key > 356.0f)
xRot = 0.0f;
if(key < -1.0f)
xRot = 355.0f;
if(key > 356.0f)
yRot = 0.0f;
if(key < -1.0f)
yRot = 355.0f;
// Refresh the Window
glutPostRedisplay();
}
void SetupRC()
{
// Black background
glClearColor(1.0f, 0.0f, 1.0f, 1.0f );
// Set drawing color to green
//glColor3f(0.0f, 1.0f, 0.0f);
}
/*
* 'main()' - Open a window and display a textured sky.
*/
int /* O - Exit status */
main(int argc, /* I - Number of command-line arguments */
char *argv[]) /* I - Command-line arguments */
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE | GLUT_DEPTH);
glutInitWindowSize(792, 573);
glutCreateWindow("冰心玉壶");
glutSpecialFunc(SpecialKeys);
glutReshapeFunc(Resize);
glutDisplayFunc(Redraw);
TexBits = LoadDIBitmap("poot.bmp", &TexInfo);
SetupRC();
glutMainLoop();
return (0);
}
/*
* 'Redraw()' - Redraw the window...
*/
void
Redraw(void)
{
static GLfloat dark[4] = { 0.0, 0.0, 0.0, 1.0 };
static GLfloat normal[4] = { 0.5, 0.5, 0.5, 1.0 };
static GLfloat bright[4] = { 1.0, 1.0, 1.0, 1.0 };
static GLfloat pos[4] = { -0.2588, 0.0, 0.9659, 0.0 };
/* Clear the window */
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
/* Setup for drawing... */
glDepthFunc(GL_LEQUAL);
glEnable(GL_DEPTH_TEST);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glPushMatrix();
glTranslatef(0.0, 0.0, -50.0);
glRotatef(xRot, 1.0f, 0.0f, 0.0f);
glRotatef(yRot, 0.0f, 1.0f, 0.0f);
/* First draw the pot without texturing and with specular highlights */
glDisable(GL_BLEND);
glDisable(GL_TEXTURE_2D);
glLightModelfv(GL_LIGHT_MODEL_AMBIENT, dark);
glLightfv(GL_LIGHT0, GL_DIFFUSE, dark);
glLightfv(GL_LIGHT0, GL_SPECULAR, bright);
glLightfv(GL_LIGHT0, GL_POSITION, pos);
glMaterialfv(GL_FRONT, GL_AMBIENT, dark);
glMaterialfv(GL_FRONT, GL_DIFFUSE, dark);
glMaterialfv(GL_FRONT, GL_SPECULAR, bright);
glMateriali(GL_FRONT, GL_SHININESS, 128);
glColor3f(1.0, 1.0, 1.0);
glutSolidTeapot(10.0);
/* Define the 2D texture image. */
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_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexImage2D(GL_TEXTURE_2D, 0, 3, TexInfo->bmiHeader.biWidth,
TexInfo->bmiHeader.biHeight, 0, GL_BGR_EXT,
GL_UNSIGNED_BYTE, TexBits);
/* Draw the teapot with texturing, adding the textured colors... */
glBlendFunc(GL_ONE, GL_ONE);
glEnable(GL_BLEND);
glEnable(GL_TEXTURE_2D);
glLightModelfv(GL_LIGHT_MODEL_AMBIENT, normal);
glLightfv(GL_LIGHT0, GL_AMBIENT, normal);
glLightfv(GL_LIGHT0, GL_DIFFUSE, normal);
glLightfv(GL_LIGHT0, GL_SPECULAR, dark);
glMaterialfv(GL_FRONT, GL_AMBIENT, normal);
glMaterialfv(GL_FRONT, GL_DIFFUSE, normal);
glMaterialfv(GL_FRONT, GL_SPECULAR, dark);
glMateriali(GL_FRONT, GL_SHININESS, 0);
glutSolidTeapot(10.0);
glPopMatrix();
glFinish();
}
void
Resize(int width, /* I - Width of window */
int height) /* I - Height of window */
{
/* Save the new width and height */
Width = width;
Height = height;
/* Reset the viewport... */
glViewport(0, 0, width, height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(30.0, (float)width / (float)height, 0.1, 1000.0);
glMatrixMode(GL_MODELVIEW);
}
- 孙其功陪你学之——opengl纹理贴图(例程)
- 孙其功陪你学之——OpenGL纹理贴图
- 孙其功陪你学之——OpenGL加载OBJ模型文件并进行纹理修饰
- 孙其功陪你学之——OpenGL 光照和材料属性
- OpenGL——纹理贴图
- OpenGL——纹理贴图
- 孙其功陪你学之——VS2010下配置使用OpenGL的glut库
- 孙其功陪你学之——OpenGL加载OBJ文件库glm.c和glm.h
- 孙其功陪你学之——opengl加载obj文件glm.c库中部分函数分析
- OpenGL基本概念入门——纹理贴图
- OpenGL——纹理贴图技术
- OpenGL基本概念入门——纹理贴图
- OpenGL学习笔记——纹理贴图
- OpenGL基本概念入门——纹理贴图
- qt5.6.0 opengl —— 纹理贴图
- OpenGL学习笔记——纹理贴图
- Qt+OpenGL之纹理贴图
- 孙其功陪你学之——gluPerspective();glMatrixMode();glLoadIdentity():函数
- [ git ] git托管代码1
- iOS应用崩溃日志揭秘
- < Linux Kernel > Notification Chain
- 虚拟IP
- REST当中为什么要使用HTTP PUT
- 孙其功陪你学之——opengl纹理贴图(例程)
- InfiniDock——允许Dock栏放置无限图标的收费越狱插件
- MapReduce Join联结实现
- 2013多校联合 MU Puzzle
- linux 下 安装 jdk
- UILabel 与 UITextField
- UVA 301 - Transportation
- spring中的bean是单例,如何保证线程安全。此文解释的不错
- 二分法查找-php实例