为OpenGL考试而准备的代码——鼠标控制视角变换+简单纹理映射+键盘的光照控制+Bezier曲线

这篇博客主要介绍了OpenGL编程中如何实现鼠标控制视角变换、简单纹理映射、键盘操作光照控制以及Bezier曲线的绘制。作者使用CodeBlocks 13.12作为开发环境,并依赖于imageloader库来加载图片资源。通过这段代码,读者可以了解到OpenGL在图形渲染和交互方面的基本技巧。
摘要由CSDN通过智能技术生成

使用背景:

使用codeblocks13.12编译,调用了imageloader.cpp和imageloader.h

代码如下:

#include <windows.h>
#include <iostream>
#include <stdlib.h>
#include <math.h>
#ifdef __APPLE__
#include <OpenGL/OpenGL.h>
#include <GLUT/glut.h>
#else
#include <GL/glut.h>
#endif
#include "imageloader.h"
#define G_PI 3.14159265358979323846f

using namespace std;

const float BOX_SIZE = 7.0f; //立方体长度
static double  _angle = 0;            //立方体自动旋转角度
static double SX=1,SY=1,SZ=1,theta=0,phi=0;
static int du=90,oldmy=-1,oldmx=-1; //du是视点绕y轴的角度,opengl里默认y轴是上方向
static double r=1.5f,h=0.0f; //r是视点绕y轴的半径,h是视点高度即在y轴上的坐标
static double c=G_PI/180.0f; //弧度和角度转换参数
static double ctrlPoints[4][3];
GLuint _textureId;           //纹理的OpenGL的ID
GLuint _textureId1;           //纹理的OpenGL的ID
GLuint _textureId2;           //纹理的OpenGL的ID

//光照控制
void prepare_lighting()
{
    theta = fmodf( theta, 2*G_PI );
    phi = fmodf( phi, 2*G_PI );

    int dis=1;

    float light_diffuse[4] = {1.0, 1.0, 1.0, 1.0};
    float mat_diffuse[4] = {1.0, 1.0, 1.0, 1.0};
    float light_position[4] = { dis*sinf(theta) * cosf(phi), dis*cosf(theta), dis*(-sinf(theta) * sinf(phi)), 0 };

    glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse);
    glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse);
    glLightfv(GL_LIGHT0, GL_POSITION, light_position);
    glEnable( GL_LIGHT0 );
}

//键盘操作
void keyboard(unsigned char key, int x, int y)
{
    switch( key )
    {
    case 'w':
        theta -= .05;
        prepare_lighting();
        glutPostRedisplay();
        break;
    case 's':
        theta += .05;
        prepare_lighting();
        glutPostRedisplay();
        break;
    case 'a':
        phi -= .05;
        prepare_lighting();
        glutPostRedisplay();
        break;
    case 'd':
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值