- 浏览: 163052 次
- 性别:
- 来自: 广州
最新评论
-
雷蕾_ing:
...
python 模拟POST -
blink31:
TextOut不能换行,请问有其他的解决办法吗?
C++下的OpenGL文字显示的完美解决方案 -
lwz7512:
这么强悍!
在优酷的几道笔试题 -
lwz7512:
下了,谢谢分享!
opengl3D台球源代码 -
xltank:
今天过期了。。。
flash builder 序列号
环境VC下控制台编程
Link:
glut32.lib glu32.lib opengl32.lib
事先要搞好glut32环境{网上查}
#include <Windows.h>
#include <GL/glut.h>
#include <GL/glut.h>
GLUnurbsObj *theNurb1;
GLUnurbsObj *theNurb2;
GLUnurbsObj *theNurb2;
GLfloat ctrlpoints[5][5][3] = {{{-3,0.5,0},{-1,1.5,0},{-2,2,0},{1,-1,0},{-5,0,0}},
{{-3,0.5,-1},{-1,1.5,-1},{-2,2,-1},{1,-1,-1},{-5,0,-1}},
{{-3,0.5,-2},{-1,1.5,-2},{-2,2,-2},{1,-1,-2},{-5,0,-2}},
{{-3,0.5,-3},{-1,1.5,-3},{-2,2,-3},{1,-1,-3},{-5,0,-3}},
{{-3,0.5,-4},{-1,1.5,-4},{-2,2,-4},{1,-1,-4},{-5,0,-4}}};//控制点
{{-3,0.5,-1},{-1,1.5,-1},{-2,2,-1},{1,-1,-1},{-5,0,-1}},
{{-3,0.5,-2},{-1,1.5,-2},{-2,2,-2},{1,-1,-2},{-5,0,-2}},
{{-3,0.5,-3},{-1,1.5,-3},{-2,2,-3},{1,-1,-3},{-5,0,-3}},
{{-3,0.5,-4},{-1,1.5,-4},{-2,2,-4},{1,-1,-4},{-5,0,-4}}};//控制点
GLfloat mat_diffuse[] = {1.0,0.5,0.1,1.0};
GLfloat mat_specular[] = {1.0,1.0,1.0,1.0};
GLfloat mat_shininess[] = {100.0};
GLfloat light_position[] = {0.0,-10.0,0.0,1.0};
GLfloat mat_specular[] = {1.0,1.0,1.0,1.0};
GLfloat mat_shininess[] = {100.0};
GLfloat light_position[] = {0.0,-10.0,0.0,1.0};
void myInit(void)
{
glClearColor(1.0,1.0,1.0,0.0);//设置背景色
/*为光照模型指定材质参数*/
glMaterialfv(GL_FRONT,GL_DIFFUSE,mat_diffuse);
glMaterialfv(GL_FRONT,GL_SPECULAR,mat_specular);
glMaterialfv(GL_FRONT,GL_SHININESS,mat_shininess);
{
glClearColor(1.0,1.0,1.0,0.0);//设置背景色
/*为光照模型指定材质参数*/
glMaterialfv(GL_FRONT,GL_DIFFUSE,mat_diffuse);
glMaterialfv(GL_FRONT,GL_SPECULAR,mat_specular);
glMaterialfv(GL_FRONT,GL_SHININESS,mat_shininess);
glLightfv(GL_FRONT,GL_POSITION,light_position);//设置光源参数
glLightModeli(GL_LIGHT_MODEL_TWO_SIDE,GL_TRUE);//设置光照模型参数
glLightModeli(GL_LIGHT_MODEL_TWO_SIDE,GL_TRUE);//设置光照模型参数
/*激活光照*/
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glDepthFunc(GL_LEQUAL);
glEnable(GL_DEPTH_TEST);
glEnable(GL_LEQUAL);
glEnable(GL_AUTO_NORMAL);
glEnable(GL_NORMALIZE);
glEnable(GL_DEPTH_TEST);
glEnable(GL_LEQUAL);
glEnable(GL_AUTO_NORMAL);
glEnable(GL_NORMALIZE);
/*设置特殊效果*/
glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
glHint(GL_LINE_SMOOTH_HINT,GL_DONT_CARE);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
glHint(GL_LINE_SMOOTH_HINT,GL_DONT_CARE);
glEnable(GL_BLEND);
glFrontFace(GL_CW);
glShadeModel(GL_SMOOTH);
glEnable(GL_LINE_SMOOTH);
glShadeModel(GL_SMOOTH);
glEnable(GL_LINE_SMOOTH);
theNurb1 = gluNewNurbsRenderer();//创建NURBS对象theNurb1
gluNurbsProperty(theNurb1,GLU_SAMPLING_TOLERANCE,25.0);
gluNurbsProperty(theNurb1,GLU_DISPLAY_MODE,GLU_OUTLINE_POLYGON);
gluNurbsProperty(theNurb1,GLU_SAMPLING_TOLERANCE,25.0);
gluNurbsProperty(theNurb1,GLU_DISPLAY_MODE,GLU_OUTLINE_POLYGON);
theNurb2 = gluNewNurbsRenderer();//创建NURBS对象theNurb2
gluNurbsProperty(theNurb2,GLU_SAMPLING_TOLERANCE,25.0);
gluNurbsProperty(theNurb2,GLU_DISPLAY_MODE,GLU_FILL);
}
gluNurbsProperty(theNurb2,GLU_SAMPLING_TOLERANCE,25.0);
gluNurbsProperty(theNurb2,GLU_DISPLAY_MODE,GLU_FILL);
}
int spin = 0;
/*接收键盘指令*/
static void myKey(unsigned char key,int x,int y)
{
switch(key)
{
case'd':
spin = spin + 1;
glRotatef(spin,1.0,1.0,0.0);
glutPostRedisplay();
break;
case 27:
exit(0);
default:
break;
}
}
static void myKey(unsigned char key,int x,int y)
{
switch(key)
{
case'd':
spin = spin + 1;
glRotatef(spin,1.0,1.0,0.0);
glutPostRedisplay();
break;
case 27:
exit(0);
default:
break;
}
}
/*绘制曲面*/
void myDisplay(void)
{
GLfloat knots[10] = {0.0,0.0,0.0,0.0,0.0,1.0,1.0,1.0,1.0,1.0};
void myDisplay(void)
{
GLfloat knots[10] = {0.0,0.0,0.0,0.0,0.0,1.0,1.0,1.0,1.0,1.0};
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glRotatef(50.0,1.0,1.0,0.0);
glRotatef(50.0,1.0,1.0,0.0);
/*第一个曲面*/
glPushMatrix();
glTranslatef(1.0,0.0,0.0);
gluBeginSurface(theNurb1);
/*定义曲面形状*/
gluNurbsSurface(theNurb1,10,knots,10,knots,5*3,3,&ctrlpoints[0][0][0],5,5,GL_MAP2_VERTEX_3);
gluEndSurface(theNurb1);
glPopMatrix();
glPushMatrix();
glTranslatef(1.0,0.0,0.0);
gluBeginSurface(theNurb1);
/*定义曲面形状*/
gluNurbsSurface(theNurb1,10,knots,10,knots,5*3,3,&ctrlpoints[0][0][0],5,5,GL_MAP2_VERTEX_3);
gluEndSurface(theNurb1);
glPopMatrix();
/*第二个曲面*/
glPushMatrix();
glTranslatef(7.0,0.0,0.0);
gluBeginSurface(theNurb2);
/*定义曲面形状*/
gluNurbsSurface(theNurb2,10,knots,10,knots,5*3,3,&ctrlpoints[0][0][0],5,5,GL_MAP2_VERTEX_3);
gluEndSurface(theNurb2);
glPopMatrix();
glPushMatrix();
glTranslatef(7.0,0.0,0.0);
gluBeginSurface(theNurb2);
/*定义曲面形状*/
gluNurbsSurface(theNurb2,10,knots,10,knots,5*3,3,&ctrlpoints[0][0][0],5,5,GL_MAP2_VERTEX_3);
gluEndSurface(theNurb2);
glPopMatrix();
glutSwapBuffers();
}
}
void myReshape(GLsizei w,GLsizei h)
{
glViewport(0,0,w,h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(50.0,(GLfloat)w/(GLfloat)h,1.0,15.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glTranslatef(0.0,0.0,-9.0);
}
{
glViewport(0,0,w,h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(50.0,(GLfloat)w/(GLfloat)h,1.0,15.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glTranslatef(0.0,0.0,-9.0);
}
int main(int argc,char ** argv)
{
/*初始化*/
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB|GLUT_DEPTH);
glutInitWindowSize(600,400);
glutInitWindowPosition(200,200);
/*创建窗口*/
glutCreateWindow("NURBS surface");
{
/*初始化*/
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB|GLUT_DEPTH);
glutInitWindowSize(600,400);
glutInitWindowPosition(200,200);
/*创建窗口*/
glutCreateWindow("NURBS surface");
/*绘制与显示*/
myInit();
glutKeyboardFunc(myKey);
glutReshapeFunc(myReshape);
glutDisplayFunc(myDisplay);
myInit();
glutKeyboardFunc(myKey);
glutReshapeFunc(myReshape);
glutDisplayFunc(myDisplay);
/*进入GLUT事件处理循环*/
glutMainLoop();
return(0);
}
glutMainLoop();
return(0);
}
发表评论
-
GUI设计禁忌
2010-01-07 12:02 991本文列举Jeff Johnson:《GUI设计禁忌》一书中 ... -
LOD地形设计(三)
2010-01-05 05:03 1024LOD地形根据视点的变化决定是否进行网格分割,因此系统应设计一 ... -
LOD地形设计(二)
2010-01-05 05:02 1212自从LOD地形第一节推出以来,受到不少朋友的关注,本人真是受宠 ... -
LOD地形设计(一)
2010-01-05 05:01 1123在大规模的三维场 ... -
Windows SDK笔记
2009-04-16 16:45 1407应程序需求需要重写窗体内子控件某一特定消息,可怜我苦苦找了 ... -
关于的glut 的配置
2009-02-09 17:46 1706OpenGL 是一套 用于三维作图的API。与Direct3 ... -
OpenGL的消隐与双缓冲(2)
2009-02-09 17:46 1641#include "stdafx.h" ... -
C语言读取bmp位图文件(含bmp格式定义)
2009-02-09 17:45 3906loadbmp.h #ifndef _LOADBMP_H_ ... -
openGL贴图(借助glx),并测试性能(FPS)2
2009-02-09 17:45 1194client.c #include <sys/type ... -
alpha混合技术
2009-02-09 17:44 1501alpha混合技术 alpha混合技术对熟悉游戏的人来说不会 ... -
C语言将raw data(rgb/rgba)写成bmp文件(bmp24或32)
2009-02-09 17:44 3734int bmp_write(unsigned char *im ... -
OpenGL坐标变换专题
2009-02-09 17:43 2531OpenGL通过相机模拟、可 ... -
对话框中OpenGL的设置
2009-02-09 17:43 2206from:http://huhuiowen.blog.16 ... -
OpenGL曲线绘制:线段
2009-02-09 17:42 1898以线段方式绘制曲线。例如:正弦曲线。 glBegin(GL_ ... -
用VC++做OpenGL程序框架时出现非法错误
2009-02-09 17:40 10171.OpenGL.cpp 文件包含的头文件有没有{}不配对的情 ... -
opengl编写游戏的可移植性 具体表现
2009-02-09 17:39 1090OpenGL是个与硬件无关的软件接口,可以在不同的平台如Win ... -
什么是显卡的OpenGL模式
2009-02-09 17:39 1670OpenGL是近几年发展起来的一个性能卓越的三维图形标准。 ... -
关于-opengl在魔兽中的应用
2009-02-09 17:38 2009OpenGL在画质上是优于Direct的,这个“画质”不是指感 ... -
如何让显卡支持OpenGL模式????????
2009-02-09 17:38 3338OPENGL 不支持问题 这也 ... -
opengl3D台球源代码
2009-01-20 09:59 24383D台球,可以平面也可以从不同角度击球,使用OPENGL渲染, ...
相关推荐
在OpenGL中实现NURBS曲面,需要使用OpenGL的扩展库如GLU(OpenGL Utility Library),它提供了对NURBS的支持。GLU提供了一个NURBS对象,允许程序员定义控制点、权重、曲线和曲面类型,然后进行渲染。 纹理映射是将...
单个文件利用OpenGL语言实现nurbs曲面模型的绘制,内含光照模型。
标签中的"nurbs曲面"和"opengl_nurbs"强调了在OpenGL中处理NURBS曲面的关键点。"nurbs_opengl"表明这是关于在OpenGL环境下实现NURBS的方法。"opengl_曲线"则指出了NURBS曲线在OpenGL中的应用。 文档“OpenGL编程...
在OpenGL中,通常使用GLU(OpenGL Utility Library)库来处理高级图形函数,如NURBS曲面的生成和渲染。 在提供的源代码文件"qumian.cpp"中,我们可以预期看到以下关键知识点: 1. **OpenGL环境设置**:首先,程序...
通过学习和实践这些代码,你可以了解到OpenGL和GLU如何协同工作,以及如何使用控制点来操纵NURBS曲面的形状。 总之,OpenGL和NURBS结合为开发者提供了一种强大的工具,用于创建和显示复杂的3D几何形状。在vc6.0中,...
本压缩包中的资源提供了使用OpenGL实现NURBS曲面绘制的实例代码,对于初学者来说是一份极好的学习资料。 NURBS曲面的基本概念: 1. **控制点(Control Points)**:NURBS曲面的形状由一组控制点决定,改变这些点的...
在VC++(Visual C++)编程环境中,开发者可以利用OpenGL库来实现NURBS曲面的渲染和交互。OpenGL是一个跨语言、跨平台的编程接口,专门用于生成2D和3D图形。它提供了一系列的函数调用来控制图形硬件,包括绘制NURBS...
NURBS曲面是由一系列控制点来定义的,通过权重值和插值函数的组合,可以创建出平滑、可变曲率的表面。 C++编程语言提供了丰富的库和工具,用于实现NURBS曲面的绘制。在给定的标题“用C++绘制NURBS曲面”中,我们...
6. 显示结果:将生成的NURBS曲面在OpenGL或其他图形库中进行绘制。 在编程实现时,需要注意数据结构的选择和内存管理,以及数值稳定性问题。例如,为了避免除以零的情况,可以使用有理B样条的变种——Q-NURBS...
NURBS曲面在图形学中的应用非常广泛,包括但不限于3D建模软件、CAD系统、动画制作和游戏开发。它的优点在于能够精确地表示各种复杂的几何形状,同时保持良好的性能和视觉质量。在实际的编程实现中,需要理解NURBS的...
OpenGL是一个强大的图形库,用于在各种操作系统上生成2D和3D图像。...在分析和学习提供的源代码时,重点关注如何使用OpenGL和GLU库来构建和显示NURBS曲面,以及如何管理控制点和权重,将有助于深入理解这一技术。
以下代码展示了如何在VC++中使用OpenGL的NURBS功能来绘制一个简单的NURBS曲面: ```cpp #include void drawNURBS() { GLUquadricObj *nobj; GLfloat knots[4] = {0.0f, 1.0f, 2.0f, 3.0f}; GLfloat ctrlpts[4]...
for(i=0;i;i++) { for(j=0;j;j++); { glVertex3f(ctlpoints[i][j][0],ctlpoints[i][j][1],ctlpoints[i][j][2]); } } glEnd();
NURBS(Non-Uniform Rational B-Splines,非均匀有理B样条)是...NURBS曲面绘制技术在工程设计、动画制作以及虚拟现实等应用中发挥着至关重要的作用,通过理解和掌握这些知识点,可以创建出高度精确和复杂的三维模型。
本项目是关于使用OpenGL库来实现NURBS曲面的Visual C++程序,适合初学者学习和理解。 OpenGL是一个跨语言、跨平台的编程接口,用于渲染2D和3D图形。在本项目中,OpenGL被用来绘制和展示NURBS曲面。通过OpenGL,...
OpenGL中绘制NURBS曲面,通常需要使用GLU(OpenGL Utility Library)库。GLU提供了gluNurbsSurface函数,用于创建和渲染NURBS曲面。使用这个函数,你需要提供控制点的坐标、Knot向量(定义曲线或曲面的参数空间范围...
7. **绘制过程**: 使用OpenGL或其他图形库,通过定义顶点数组和调用绘制函数,将NURBS曲面渲染到屏幕上。这通常涉及到计算每个像素点在曲面上的映射,以及处理光照、纹理等效果。 在实际应用中,NURBS曲面的优势...
总的来说,这份源代码资源为学习和实践OpenGL中的Bezier曲线和NURBS曲面渲染提供了基础,同时也展示了如何解决常见问题,如屏幕闪烁,以提升用户体验。对于想要深入理解3D图形编程的开发者来说,这是一个宝贵的参考...
NURBS是一种强大的数学模型,常用于3D建模和CAD软件,能够精确地表示复杂的曲线和曲面。在MFC(Microsoft Foundation Classes)环境中,它为开发人员提供了一个用户友好的界面来实现这些功能。 首先,让我们了解...
vc++opengl 绘制NURBS曲面源代码