《计算机图形学》课内实验报告实验一Word格式.docx
- 文档编号:19120887
- 上传时间:2023-01-04
- 格式:DOCX
- 页数:17
- 大小:91.71KB
《计算机图形学》课内实验报告实验一Word格式.docx
《《计算机图形学》课内实验报告实验一Word格式.docx》由会员分享,可在线阅读,更多相关《《计算机图形学》课内实验报告实验一Word格式.docx(17页珍藏版)》请在冰豆网上搜索。
将opengl32.lib等文件放到VC的的相应文件夹中,即放入如下文件夹:
\ProgramFiles\MicrosoftVisualStudio\VC98\Lib
建立Win32的Console工程,在工程的设置中连接所有可能用到的静态库:
opengl32.lib,glu32.lib;
glaux.lib;
glut32.lib;
glut.lib。
实验源代码:
//HighLevelShaders.c
//OpenGLSuperBible,Chapter21
//Demonstrateshigh-levelshaders
//ProgrambyBenjaminLipchak
#include"
../../Common/OpenGLSB.h"
//SystemandOpenGLStuff
../../Common/GLTools.h"
#include<
stdio.h>
PFNGLDELETEOBJECTARBPROCglDeleteObjectARB;
PFNGLGETHANDLEARBPROCglGetHandleARB;
PFNGLDETACHOBJECTARBPROCglDetachObjectARB;
PFNGLCREATESHADEROBJECTARBPROCglCreateShaderObjectARB;
PFNGLSHADERSOURCEARBPROCglShaderSourceARB;
PFNGLCOMPILESHADERARBPROCglCompileShaderARB;
PFNGLCREATEPROGRAMOBJECTARBPROCglCreateProgramObjectARB;
PFNGLATTACHOBJECTARBPROCglAttachObjectARB;
PFNGLLINKPROGRAMARBPROCglLinkProgramARB;
PFNGLVALIDATEPROGRAMARBPROCglValidateProgramARB;
PFNGLUSEPROGRAMOBJECTARBPROCglUseProgramObjectARB;
PFNGLGETOBJECTPARAMETERIVARBPROCglGetObjectParameterivARB;
PFNGLGETINFOLOGARBPROCglGetInfoLogARB;
PFNGLUNIFORM1FARBPROCglUniform1fARB;
PFNGLGETUNIFORMLOCATIONARBPROCglGetUniformLocationARB;
#ifndef__APPLE__
PFNGLSECONDARYCOLOR3FPROCglSecondaryColor3f;
#endif
GLbooleanuseVertexShader=GL_TRUE;
GLbooleanuseFragmentShader=GL_TRUE;
GLbooleandoBlink=GL_FALSE;
GLbooleanneedsValidation=GL_TRUE;
GLhandleARBvShader,fShader,progObj;
GLintflickerLocation=-1;
GLintwindowWidth=512;
//windowsize
GLintwindowHeight=512;
GLfloatcameraPos[]={100.0f,150.0f,200.0f,1.0f};
#defineMAX_INFO_LOG_SIZE2048
voidLink(GLbooleanfirstTime)
{
GLintsuccess;
glLinkProgramARB(progObj);
glGetObjectParameterivARB(progObj,GL_OBJECT_LINK_STATUS_ARB,&
success);
if(!
success)
{
GLbyteinfoLog[MAX_INFO_LOG_SIZE];
glGetInfoLogARB(progObj,MAX_INFO_LOG_SIZE,NULL,infoLog);
fprintf(stderr,"
Errorinprogramlinkage!
\n"
);
Infolog:
%s\n"
infoLog);
Sleep(10000);
exit(0);
}
if(firstTime)
glUseProgramObjectARB(progObj);
//Findoutwheretheflickerconstantlives
flickerLocation=glGetUniformLocationARB(progObj,"
flickerFactor"
//Initiallysettheblinkparameterto1(noflicker)
if(flickerLocation!
=-1)
glUniform1fARB(flickerLocation,1.0f);
//Programobjecthaschanged,soweshouldrevalidate
needsValidation=GL_TRUE;
}
voidRelink()
Link(GL_FALSE);
//Calledtodrawsceneobjects
voidDrawModels(void)
//Drawplanethattheobjectsreston
glColor3f(0.0f,0.0f,0.90f);
//Blue
glNormal3f(0.0f,1.0f,0.0f);
glBegin(GL_QUADS);
glVertex3f(-100.0f,-25.0f,-100.0f);
glVertex3f(-100.0f,-25.0f,100.0f);
glVertex3f(100.0f,-25.0f,100.0f);
glVertex3f(100.0f,-25.0f,-100.0f);
glEnd();
//Drawredcube
glColor3f(1.0f,0.0f,0.0f);
glutSolidCube(48.0f);
//Drawgreensphere
glColor3f(0.0f,1.0f,0.0f);
glPushMatrix();
glTranslatef(-60.0f,0.0f,0.0f);
glutSolidSphere(25.0f,50,50);
glPopMatrix();
//Drawyellowcone
glColor3f(1.0f,1.0f,0.0f);
glRotatef(-90.0f,1.0f,0.0f,0.0f);
glTranslatef(60.0f,0.0f,-24.0f);
glutSolidCone(25.0f,50.0f,50,50);
//Drawmagentatorus
glColor3f(1.0f,0.0f,1.0f);
glTranslatef(0.0f,0.0f,60.0f);
glutSolidTorus(8.0f,16.0f,50,50);
//Drawcyanoctahedron
glColor3f(0.0f,1.0f,1.0f);
glTranslatef(0.0f,0.0f,-60.0f);
glScalef(25.0f,25.0f,25.0f);
glutSolidOctahedron();
//Calledtodrawscene
voidRenderScene(void)
staticGLfloatflickerFactor=1.0f;
//Trackcameraangle
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(45.0f,1.0f,1.0f,1000.0f);
glMatrixMode(GL_MODELVIEW);
gluLookAt(cameraPos[0],cameraPos[1],cameraPos[2],
0.0f,0.0f,0.0f,0.0f,1.0f,0.0f);
glViewport(0,0,windowWidth,windowHeight);
//Clearthewindowwithcurrentclearingcolor
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
if(doBlink&
&
(flickerLocation!
=-1))
//Pickarandomflickerfactor
flickerFactor+=((((GLfloat)rand())/((GLfloat)RAND_MAX))-0.5f)*0.1f;
if(flickerFactor>
1.0f)flickerFactor=1.0f;
if(flickerFactor<
0.0f)flickerFactor=0.0f;
glUniform1fARB(flickerLocation,flickerFactor);
//Validateourshaderbeforefirstuse
if(needsValidation)
glValidateProgramARB(progObj);
glGetObjectParameterivARB(progObj,GL_OBJECT_VALIDATE_STATUS_ARB,&
Errorinprogramvalidation!
needsValidation=GL_FALSE;
//Drawobjectsinthescene
DrawModels();
if(glGetError()!
=GL_NO_ERROR)
GLError!
//Flushdrawingcommands
glutSwapBuffers();
glutPostRedisplay();
//Thisfunctiondoesanyneededinitializationontherendering
//context.
voidSetupRC()
constGLubyte*version;
GLcharARB*vsStringPtr[1];
GLcharARB*fsStringPtr[1];
GLcharARBvsString[]=
"
voidmain(void)\n"
{\n"
//ThisisourHelloWorldvertexshader\n"
//noticehowcommentsareprecededby'
//'
//normalMVPtransform\n"
vec4clipCoord=gl_ModelViewProjectionMatrix*gl_Vertex;
gl_Position=clipCoord;
//Copytheprimarycolor\n"
gl_FrontColor=gl_Color;
//CalculateNDC\n"
vec4ndc=vec4(clipCoord.xyz,0)/clipCoord.w;
//Mapfrom[-1,1]to[0,1]beforeoutputting\n"
gl_FrontSecondaryColor=(ndc*0.5)+0.5;
}\n"
;
GLcharARBfsString[]=
uniformfloatflickerFactor;
//Mixprimaryandsecondarycolors,50/50\n"
vec4temp=mix(gl_Color,vec4(vec3(gl_SecondaryColor),1.0),0.5);
//Multiplybyflickerfactor\n"
gl_FragColor=temp*flickerFactor;
fprintf(stdout,"
High-levelShadersDemo\n\n"
//Makesurerequiredfunctionalityisavailable!
gltIsExtSupported("
GL_ARB_vertex_shader"
)||
!
GL_ARB_fragment_shader"
)||
GL_ARB_shader_objects"
GL_ARB_shading_language_100"
))
GLSLextensionsnotavailable!
Sleep(2000);
version=glGetString(GL_VERSION);
if(((version[0]!
='
1'
)||(version[1]!
.'
(version[2]<
'
4'
)||(version[2]>
9'
))&
//1.4+
(!
GL_EXT_secondary_color"
)))
NeitherOpenGL1.4norGL_EXT_secondary_color"
extensionisavailable!
glCreateShaderObjectARB=gltGetExtensionPointer("
glCreateShaderObjectARB"
glCreateProgramObjectARB=gltGetExtensionPointer("
glCreateProgramObjectARB"
glAttachObjectARB=gltGetExtensionPointer("
glAttachObjectARB"
glDetachObjectARB=gltGetExtensionPointer("
glDetachObjectARB"
glDeleteObjectARB=gltGetExtensionPointer("
glDeleteObjectARB"
glShaderSourceARB=gltGetExtensionPointer("
glShaderSourceARB"
glCompileShaderARB=gltGetExtensionPointer("
glCompileShaderARB"
glLinkProgramARB=gltGetExtensionPointer("
glLinkProgramARB"
glValidateProgramARB=gltGetExtensionPointer("
glValidateProgramARB"
glUseProgramObjectARB=gltGetExtensionPointer("
glUseProgramObjectARB"
glGetObjectParameterivARB=gltGetExtensionPointer("
glGetObjectParameterivARB"
glGetInfoLogARB=gltGetExtensionPointer("
glGetInfoLogARB"
glUniform1fARB=gltGetExtensionPointer("
glUniform1fARB"
glGetUniformLocationARB=gltGetExtensionPointer("
glGetUniformLocationARB"
if(gltIsExtSupported("
glSecondaryColor3f=gltGetExtensionPointer("
glSecondaryColor3fEXT"
else
glSecondaryColor3f"
glCreateShaderObjectARB||!
glCreateProgramObjectARB||
glAttachObjectARB||!
glDetachObjectARB||!
glDeleteObjectARB||
glShaderSourceARB||!
glCompileShaderARB||!
glLinkProgramARB||
glValidateProgramARB||!
glUseProgramObjectARB||
glGetObjectParameterivARB||!
glGetInfoLogARB||
glUniform1fARB||!
glGetUniformLocationARB||
glSecondaryColor3f)
Notallentrypointswereavailable!
Controls:
\tRight-clickformenu\n\n"
\tx/X\t\tMove+/-inxdirection\n"
\ty/Y\t\tMove+/-inydirection\n"
\tz/Z\t\tMove+/-inzdirection\n\n"
\tq\t\tExitdemo\n\n"
//Blackbackground
glClearColor(0.0f,0.0f,0.0f,1.0f);
glSecondaryColor3f(1.0f,1.0f,1.0f);
//Hiddensurfaceremoval
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LEQUAL);
glShadeModel(GL_SMOOTH);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机图形学 计算机 图形学 实验 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)