opengl入门系列-Bezier曲线
2014-09-23 09:33
441 查看
#include <stdio.h>
#include <GL/glut.h>
#include <stdlib.h>
GLfloat ctrlpoints[4][3] ={
{-4.0, -4.0, 0.0},
{-2.0, 4.0, 0.0},
{2.0, -4.0, 0.0},
{4.0, 4.0, 0.0}
};
void init(void)
{
glClearColor(0.0, 0.0, 0.0, 0.0);
glShadeModel(GL_FLAT);
glMap1f(GL_MAP1_VERTEX_3, 0.0, 1.0, 3, 4, &ctrlpoints[0][0]);
glEnable(GL_MAP1_VERTEX_3);
}
void display(void)
{
int i;
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1.0, 1.0, 1.0);
glBegin(GL_LINE_STRIP);
for(i = 0; i <= 100; i++)
glEvalCoord1f((GLfloat)i/100.0);
glEnd();
glPointSize(5.0);
glColor3f(1.0, 1.0, 0.0);
glBegin(GL_POINTS);
for(i = 0; i<4; i++)
glVertex3fv(&ctrlpoints[i][0]);
glEnd();
glFlush();
}
void reshape(int w, int h)
{
glViewport(0, 0, (GLsizei)w, (GLsizei)h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
if (w <= h)
glOrtho(-5.0, 5.0, -5.0*(GLfloat)h/(GLfloat)w,
5.0*(GLfloat)h/(GLfloat)w, -5.0, 5.0);
else
glOrtho(-5.0*(GLfloat)w/(GLfloat)h,
5.0*(GLfloat)w/(GLfloat)h, -5.0, 5.0, -5.0, 5.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
void keyboard(unsigned char key, int x, int y)
{
switch (key) {
case 27:
exit(0);
break;
}
}
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize (500, 500);
glutInitWindowPosition (100, 100);
glutCreateWindow (argv[0]);
init ();
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutKeyboardFunc (keyboard);
glutMainLoop();
return 0;
}
---
#include <GL/glut.h>
#include <stdlib.h>
GLfloat ctrlpoints[4][3] ={
{-4.0, -4.0, 0.0},
{-2.0, 4.0, 0.0},
{2.0, -4.0, 0.0},
{4.0, 4.0, 0.0}
};
void init(void)
{
glClearColor(0.0, 0.0, 0.0, 0.0);
glShadeModel(GL_FLAT);
glMap1f(GL_MAP1_VERTEX_3, 0.0, 1.0, 3, 4, &ctrlpoints[0][0]);
glEnable(GL_MAP1_VERTEX_3);
}
void display(void)
{
int i;
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1.0, 1.0, 1.0);
glBegin(GL_LINE_STRIP);
for(i = 0; i <= 100; i++)
glEvalCoord1f((GLfloat)i/100.0);
glEnd();
glPointSize(5.0);
glColor3f(1.0, 1.0, 0.0);
glBegin(GL_POINTS);
for(i = 0; i<4; i++)
glVertex3fv(&ctrlpoints[i][0]);
glEnd();
glFlush();
}
void reshape(int w, int h)
{
glViewport(0, 0, (GLsizei)w, (GLsizei)h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
if (w <= h)
glOrtho(-5.0, 5.0, -5.0*(GLfloat)h/(GLfloat)w,
5.0*(GLfloat)h/(GLfloat)w, -5.0, 5.0);
else
glOrtho(-5.0*(GLfloat)w/(GLfloat)h,
5.0*(GLfloat)w/(GLfloat)h, -5.0, 5.0, -5.0, 5.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
void keyboard(unsigned char key, int x, int y)
{
switch (key) {
case 27:
exit(0);
break;
}
}
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize (500, 500);
glutInitWindowPosition (100, 100);
glutCreateWindow (argv[0]);
init ();
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutKeyboardFunc (keyboard);
glutMainLoop();
return 0;
}
---
相关文章推荐
- Joe's OpenGL ES 2.0 系列经典入门教程(第一课:Introduction)
- opengl入门系列2- 模型视图矩阵变换
- cocos2dx opengl入门系列三-画一个四边形
- 入门系列--OpenGL最简单的入门
- cocos2dx opengl入门系列一-序言
- MAC Cocoa Opengl入门系列教程二(OpenGl坐标系)
- opengl入门系列3-裁剪平面
- opengl入门系列-glVertexAttribPointer的解释
- OpenGL入门系列- OpenGL_ES 在 本地操作系统窗口上绘制的过程过程
- cocos2dx opengl入门系列二-画一个三角形
- opengl入门系列- 颜色混合
- opengl入门系列1- OpenGL纹理环绕
- OpenGL入门系列6 - 累积缓冲区用法例子
- opengl入门系列-位图字体
- cocos2dx opengl入门系列五-显示多纹理
- MAC Cocoa Opengl入门系列教程一(基本图元绘制)
- cocos2dx opengl入门系列四-显示图片
- opengl入门系列5-视景体定义
- opengl入门系列-颜色分布住状图
- 入门系列--OpenGL最简单的入门