简单 内塞尔曲线 c语言
时间: 2023-08-24 09:29:49 浏览: 40
内塞尔曲线(NURBS)是一种用于表示曲线和曲面的数学方法,它是非常流行的计算机图形学技术之一。在 C 语言中,可以使用 OpenGL 库中的 NURBS 函数库来绘制 NURBS 曲线。下面是一个简单的 C 语言代码示例,用于创建一个内塞尔曲线:
```c
#include <GL/glut.h>
#include <GL/glu.h>
#include <GL/gl.h>
#include <stdio.h>
GLfloat ctlpoints[4][3] = {
{-1.5, -1.5, 4.0}, {-0.5, -1.5, 2.0},
{0.5, -1.5, -1.0}, {1.5, -1.5, 2.0}};
void display(void)
{
int i, j;
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glColor3f(1.0, 1.0, 1.0);
glPushMatrix();
glRotatef(85.0, 1.0, 1.0, 1.0);
glTranslatef(0.0, -1.5, 0.0);
glEvalMesh1(GL_LINE_STRIP, 0, 30);
glPopMatrix();
glFlush();
}
void init(void)
{
glClearColor(0.0, 0.0, 0.0, 0.0);
glMap1f(GL_MAP1_VERTEX_3, 0.0, 1.0, 3, 4, &ctlpoints[0][0]);
glEnable(GL_MAP1_VERTEX_3);
glEnable(GL_DEPTH_TEST);
}
void reshape(int w, int h)
{
glViewport(0, 0, (GLsizei) w, (GLsizei) h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
if (w <= h)
glOrtho(-4.0, 4.0, -4.0*(GLfloat)h/(GLfloat)w,
4.0*(GLfloat)h/(GLfloat)w, -4.0, 4.0);
else
glOrtho(-4.0*(GLfloat)w/(GLfloat)h,
4.0*(GLfloat)w/(GLfloat)h, -4.0, 4.0, -4.0, 4.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH);
glutInitWindowSize(500, 500);
glutInitWindowPosition(100, 100);
glutCreateWindow(argv[0]);
init();
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutMainLoop();
return 0;
}
```
这段代码将创建一个简单的内塞尔曲线,并使用 OpenGL 在窗口中显示它。它使用了 `glMap1f()` 函数来设置曲线的控制点,并启用了 `GL_MAP1_VERTEX_3` 来指定曲线的属性。然后,它使用 `glEvalMesh1()` 函数来将曲线绘制到屏幕上。