资源简介
此程序使用Opengl绘制了带6个纹理的立方体(立方体的每个面用bezier曲面表示),实现了键盘和鼠标控制,其中键盘控制如下:
L :控制光照光照
←:向左旋转速度增加
→:向右旋转速度增加
↑:向上旋转速度增加
↓:向下旋转速度增加
PgUp:立方体向屏幕里移动(离观察者越来越远)
PgUp: 立方体向屏幕外移动(离观察者越来越近)
鼠标控制如下:
右键:控制光照
左键:按下左键时可以进行立方体的拖拽使之旋转
代码片段和文件信息
#include
#include
#include
#include
#include
#include
#include
#include
HWND hWnd;
HDC hDC;
HGLRC hRC=NULL; //定义渲染环境
HINSTANCE hInstance; //得到程序的例子
RECT rect;
int sw = 640;
int sh = 480;
bool fullscreen = 1;
GLfloat aspect;
GLfloat xrot; // X轴旋转
GLfloat yrot; // Y轴旋转
GLfloat xspeed; // X轴旋转速度
GLfloat yspeed; // Y轴旋转速度
GLfloat z=-5.0f; // 移入屏幕的深度
int LastXPosLastYPos;
bool IsLBDown;
bool light; //光源-开/关
bool lp; //L键是否按下?
GLfloat LightAmbient[]= { 0.5f 0.5f 0.5f 1.0f }; //环境光的值
GLfloat LightDiffuse[]= { 1.0f 1.0f 1.0f 1.0f }; //散射光的值
GLfloat LightPosition[]= { 0.0f 0.0f 2.0f 1.0f }; //光照位置
GLuint texture[6]; //纹理的存储空间
float array[1000][3];
int c_i=0;
#pragma comment( lib “opengl32.lib“ ) // 链接时使用OpenGL32.lib
#pragma comment( lib “glu32.lib“ ) // 链接时使用GLu32.lib
#pragma comment( lib “glaux.lib“ ) // 链接时使用GLaux.lib
AUX_RGBImageRec *TextureImage[6]; //为纹理创建存储空间
GLUnurbsObj * theNurb;
GLUnurbsObj *theNurb1;
GLUnurbsObj *theNurb2;
GLfloat ctrlpoints[5][5][3] = {{{-30.50}{-11.50}{-220}{1-10}{-500}}
{{-30.5-1}{-11.5-1}{-22-1}{1-1-1}{-50-1}}
{{-30.5-2}{-11.5-2}{-22-2}{1-1-2}{-50-2}}
{{-30.5-3}{-11.5-3}{-22-3}{1-1-3}{-50-3}}
{{-30.5-4}{-11.5-4}{-22-4}{1-1-4}{-50-4}}};//控制点
void __stdcall CALLBACK beginCallback(GLenum Type)
{
glBegin(Type);
}
void __stdcall CALLBACK endCallback()
{
glEnd();
}
void __stdcall CALLBACK vertexCallback(GLfloat *vertex)
{
glVertex3fv(vertex);
array[c_i][ 0 ]=vertex[ 0 ];
array[c_i][ 1 ]=vertex[ 1 ];
array[c_i][ 2 ]=vertex[ 2 ];
c_i++;
}
typedef struct point_3D{
GLdouble xyz;
}POINT_3D;
typedef struct bpatch { // Structure For A 3rd Degree Bezier Patch ( NEW )
POINT_3D anchors[4][4]; // 4x4 Grid Of Anchor Points
GLuint dlBPatch; // Display List For Bezier Patch
GLuint texture; // Texture For The Patch
} BEZIER_PATCH;
POINT_3D pointAdd(POINT_3D p POINT_3D q) {
p.x += q.x; p.y += q.y; p.z += q.z;
return p;
}
// Multiplies A Point And A Constant. Don‘t Just Use ‘*‘
POINT_3D pointTimes(double c POINT_3D p) {
p.x *= c; p.y *= c; p.z *= c;
return p;
}
// Function For Quick Point Creation
POINT_3D makePoint(double a double b double c) {
POINT_3D p;
p.x = a; p.y = b; p.z = c;
return p;
}
POINT_3D Bernstein(float u POINT_3D *p) {
POINT_3D a b c d r;
a = pointTimes(pow(u3) p[0]);
b = pointTimes(3*pow(u2)*(1-u) p[1]);
c = pointTimes(3*u*pow((1-u)2) p[2]);
d = pointTimes(pow((1-u)3) p[3]);
r = pointAdd(pointAdd(a b) pointAdd(c d));
return r;
}
BEZIER_PATCH mybezier;
void initBezier(void) {
mybezier.anchors[0][0] = makePoint(-0.75 -0.75 -0.50); // Set The Bezier Vertices
mybezier.anchors[0][1] = m
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2012-07-16 21:54 bezier曲面的纹理贴图、鼠标交互与光照\
目录 0 2012-07-16 21:56 bezier曲面的纹理贴图、鼠标交互与光照\Backup\
文件 203 2010-05-31 20:47 bezier曲面的纹理贴图、鼠标交互与光照\Backup\MouseAndLight.sln
文件 7168 2010-05-31 20:47 bezier曲面的纹理贴图、鼠标交互与光照\Backup\MouseAndLight.suo
目录 0 2012-07-16 21:56 bezier曲面的纹理贴图、鼠标交互与光照\Debug\
文件 10632 2008-05-27 15:14 bezier曲面的纹理贴图、鼠标交互与光照\Debug\BuildLog.htm
文件 40900 2012-07-16 20:42 bezier曲面的纹理贴图、鼠标交互与光照\Debug\CL.read.1.tlog
文件 1076 2012-07-16 20:42 bezier曲面的纹理贴图、鼠标交互与光照\Debug\CL.write.1.tlog
文件 2873 2012-05-31 21:54 bezier曲面的纹理贴图、鼠标交互与光照\Debug\MouseAndLight.Build.CppClean.log
文件 524800 2012-07-16 20:42 bezier曲面的纹理贴图、鼠标交互与光照\Debug\MouseAndLight.exe
文件 406 2012-05-31 21:54 bezier曲面的纹理贴图、鼠标交互与光照\Debug\MouseAndLight.exe.em
文件 472 2012-06-19 17:03 bezier曲面的纹理贴图、鼠标交互与光照\Debug\MouseAndLight.exe.em
文件 381 2012-07-16 20:42 bezier曲面的纹理贴图、鼠标交互与光照\Debug\MouseAndLight.exe.intermediate.manifest
文件 1368492 2012-07-16 20:42 bezier曲面的纹理贴图、鼠标交互与光照\Debug\MouseAndLight.ilk
文件 87 2012-07-16 20:42 bezier曲面的纹理贴图、鼠标交互与光照\Debug\MouseAndLight.lastbuildstate
文件 2733 2012-07-16 20:42 bezier曲面的纹理贴图、鼠标交互与光照\Debug\MouseAndLight.log
文件 71353 2012-07-16 20:42 bezier曲面的纹理贴图、鼠标交互与光照\Debug\MouseAndLight.obj
文件 2509824 2012-07-16 20:42 bezier曲面的纹理贴图、鼠标交互与光照\Debug\MouseAndLight.pdb
文件 222 2012-05-31 21:54 bezier曲面的纹理贴图、鼠标交互与光照\Debug\MouseAndLight_manifest.rc
文件 2144 2012-07-16 20:42 bezier曲面的纹理贴图、鼠标交互与光照\Debug\cl.command.1.tlog
文件 2 2012-07-16 20:42 bezier曲面的纹理贴图、鼠标交互与光照\Debug\li
文件 2 2012-07-16 20:42 bezier曲面的纹理贴图、鼠标交互与光照\Debug\li
文件 2 2012-07-16 20:42 bezier曲面的纹理贴图、鼠标交互与光照\Debug\li
文件 2 2012-07-16 20:42 bezier曲面的纹理贴图、鼠标交互与光照\Debug\li
文件 2 2012-07-16 20:42 bezier曲面的纹理贴图、鼠标交互与光照\Debug\li
文件 2 2012-07-16 20:42 bezier曲面的纹理贴图、鼠标交互与光照\Debug\li
文件 2 2012-07-16 20:42 bezier曲面的纹理贴图、鼠标交互与光照\Debug\li
文件 2 2012-07-16 20:42 bezier曲面的纹理贴图、鼠标交互与光照\Debug\li
文件 2 2012-07-16 20:42 bezier曲面的纹理贴图、鼠标交互与光照\Debug\li
文件 2 2012-07-16 20:42 bezier曲面的纹理贴图、鼠标交互与光照\Debug\li
文件 2 2012-07-16 20:42 bezier曲面的纹理贴图、鼠标交互与光照\Debug\li
............此处省略190个文件信息
相关资源
- assimp.dll
- OpenGL SDK
- 计算机图形学 Bezier曲线
- OpenGL读取点云文件并绘制
- 计算机图形学大作业
- OpenCV与OpenGL实现增强现实
- 3d opengl 飞行射击游戏源码和论文
- 20个可读的obj模型文件
- opengl实现模型读取以及光照,移动等
- Opengl实现旗帜飘扬效果
- OpenGL星星公转自转
- OpenGL显示三维点云图像
- opengl绘制太阳、地球、月球
- Qt通过控件控制立方体旋转
- OpenGL编程指南 第九版英文版 OpenGL P
- 三维游戏设计师宝典(经典!)——学
- OpenGL课程设计
- OpenGL飘动的雏菊画布
- Bezier曲线(任意次数)程序实现可用
- OpenGL-篮球场.rar
- opengl显示兔子程序
- learnopengl-cn-2018年5月更新.pdf
- OpenGL超级宝典完整源码(第五版)
- OpenGL游戏程序设计+源码
- opengl编程指南第七版
- 基于OpenGL实现的各种粒子特效
- 3D模型obj文件导入渲染光照贴图
- OpenGL配置库与教程实现一个.
- 基于特征点匹配的三维重建OpenCV+Ope
- OpenGL编程指南原书第8版 中文PDF 高清
评论
共有 条评论