#define GLUT_DISABLE_ATEXIT_HACK
#include "windows.h"
#include <gl/glut.h>
#include "math.h"
/** 控制点数组 */
GLfloat points[4][3] = {
{ -4.0f, -2.0f, 0.0f }, { -2.0f, 3.0f, 2.0f},
{ 2.0f, -3.0f, -2.0f }, { 4.0f, 2.0f, 0.0f} };
//初始化OpenGL
void init(void)
{
/** 用户自定义的初始化过程 */
glClearColor(0.0f, 0.0f, 0.0f, 0.5f);
glClearDepth(1.0f);
glDepthFunc(GL_LEQUAL);
glEnable(GL_DEPTH_TEST);
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
/**启用并定义一维求值程序 */
glEnable(GL_MAP1_VERTEX_3);
glMap1f(GL_MAP1_VERTEX_3, 0.0, 1.0, 3, 4, &points[0][0]);
}
//主要的绘制过程
void display(void)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);//清除颜色缓存
glShadeModel(GL_FLAT);
glLoadIdentity();
glTranslatef(-1, 1, -7.0);
//求值
glEnable(GL_DEPTH_TEST);
glEnable(GL_BLEND);
glEnable(GL_LINE_SMOOTH); /**< 开启直线反走样 */
/**< 启用混合 */
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); /**< 指定混合因子 */
glHint(GL_LINE_SMOOTH_HINT, GL_NICEST); /**< 行为控制 */
glBegin(GL_LINE_STRIP);
for (int i = 0; i < 100; i++)
{
/** 执行求值程序 */
glEvalCoord1f((float)i / 100.0f);
}
glEnd();
// glMapGrid1f(100, 0.0, 1.0);
// glEvalMesh1(GL_LINE, 0, 100);
//绘制控制点
glPointSize(4.0);
glBegin(GL_POINTS);
for (int j = 0; j < 4; j++)
glVertex3fv(&points[j][0]);
glEnd();
glFlush(); /**< 强制执行所有的OpenGL命令 */
glutSwapBuffers();
}
//在窗口改变大小时调用
void reshape(int w, int h) {
glViewport(0, 0, w, h);//设置视口
glMatrixMode(GL_PROJECTION);//设置当前为投影变换模式
glLoadIdentity();//用单位矩阵替换当前变换矩阵
gluPerspective(90, (float)w / h, 4, 10.0);//设置正交投影视图体
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(0.0, 0.0, 4.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
}
//处理键盘
void keyboard(unsigned char key, int x, int y) {
switch (key) {
case 27://esc键退出
exit(0);
break;
default:
break;
}
}
int main(int argc, char* argv[]) //主函数: 参数数量&参数值
{
glutInit(&argc, argv);
glutInitWindowSize(640, 480);
glutCreateWindow("Basic");//设置窗口标题
init();//初始化OpenGL
glutDisplayFunc(display);//设置显示回调函数
glutReshapeFunc(reshape);//设置reshape回调函数
glutKeyboardFunc(keyboard);//设置键盘回调函数
glutMainLoop();//进入主循环
}
08-23
1266
04-14
6221
10-30
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交