《计算机图形学》课内实验报告实验一Word格式.docx

上传人:b****6 文档编号:19120887 上传时间:2023-01-04 格式:DOCX 页数:17 大小:91.71KB
下载 相关 举报
《计算机图形学》课内实验报告实验一Word格式.docx_第1页
第1页 / 共17页
《计算机图形学》课内实验报告实验一Word格式.docx_第2页
第2页 / 共17页
《计算机图形学》课内实验报告实验一Word格式.docx_第3页
第3页 / 共17页
《计算机图形学》课内实验报告实验一Word格式.docx_第4页
第4页 / 共17页
《计算机图形学》课内实验报告实验一Word格式.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

《计算机图形学》课内实验报告实验一Word格式.docx

《《计算机图形学》课内实验报告实验一Word格式.docx》由会员分享,可在线阅读,更多相关《《计算机图形学》课内实验报告实验一Word格式.docx(17页珍藏版)》请在冰豆网上搜索。

《计算机图形学》课内实验报告实验一Word格式.docx

将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);

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1