2016杭电《实时三维图形绘制》OpenGL课复习提纲、试题展示及参考(2)

2019-01-05 10:50

12、请列举出3种以上的三维模型常见的表示格式,已知一个立方体环境映射对应的六个面上的图片,分别假定为X_POSITVIE_PIC, X_NEGATIVE_PIC, Y_POSITIVE_PIC,Y_NEGATIVE_PIC,Z_POSITIVE_PIC,Z_NEGATIVE_PIC,请用OBJ格式表示一个长度为1的立方体,并把每个面分别贴上给定的六个图片。

答:三种常见格式:.obj .x .3ds .off # vertices

v 0.0 0.0 1.0 v 1.0 0.0 1.0 v 1.0 1.0 1.0 v 0.0 1.0 1.0 v 1.0 0.0 0.0 v 1.0 1.0 0.0 v 0.0 1.0 0.0 v 0.0 0.0 0.0

#normals

vn 0.0 0.0 1.0 vn 0.0 0.0 -1.0 vn 0.0 1.0 0.0 vn 0.0 -1.0 0.0 vn 1.0 0.0 0.0 vn -1.0 0.0 0.0

vt 0.0 0.0 vt 1.0 0.0 vt 1.0 1.0 vt 0.0 1.0

#前面1-2-3-4

g posz_map usemtl posz_map

f 1/1/1 2/2/1 3/3/6 4/4/1

#后面5-6-7-8

g negz_map usemtl negz_map

f 5/1/2 6/2/2 7/3/2 8/4/2

#上面4-3-6-7

g posy_map usemtl posz_map

f 4/1/3 3/2/3 6/3/3 7/4/3

#下面2-1-8-5

g negy_map usemtl negy_map

f 2/1/4 1/2/4 8/3/4 5/4/4

#右面2-5-6-3

g posx_map usemtl posx_map

f 2/1/5 5/2/5 6/3/5 3/4/5

#左面8-1-4-7 g negx_map

usemtl negx_map f 8/1/6 1/2/6 4/3/6 7/4/6 a.mtl

newmtl posx_map

Ka 0.968600 0.968600 0.968600 Kd 0.968600 0.968600 0.968600 Ks 0.900000 0.900000 0.900000 map_Kd X_POSITVIE_PIC.jpg

newmtl negx_map

Ka 0.968600 0.968600 0.968600 Kd 0.968600 0.968600 0.968600 Ks 0.900000 0.900000 0.900000 map_Kd X_NEGATIVE_PIC.jpg

newmtl posy_map

Ka 0.968600 0.968600 0.968600 Kd 0.968600 0.968600 0.968600 Ks 0.900000 0.900000 0.900000 map_Kd Y_POSITIVE_PIC.jpg

newmtl negy_map

Ka 0.968600 0.968600 0.968600 Kd 0.968600 0.968600 0.968600 Ks 0.900000 0.900000 0.900000 map_Kd Y_NEGATIVE_PIC.jpg

newmtl posz_map

Ka 0.968600 0.968600 0.968600 Kd 0.968600 0.968600 0.968600 Ks 0.900000 0.900000 0.900000

map_Kd Z_POSITIVE_PIC.jpg

newmtl negz_map

Ka 0.968600 0.968600 0.968600 Kd 0.968600 0.968600 0.968600 Ks 0.900000 0.900000 0.900000 map_Kd Z_NEGATIVE_PIC.jpg 12、在一个坐标系W中,设模型为一个以(5.0, 0.0, 0.0), (0.0, 5.0, 0.0), (0.0, 0.0, 5.0)为三个点的三角形,现在把照相机按照下列方式设置:

照相机位置设为:(0.0, 0.0, 100.0),看向的目标点为 (0.0, 0.0, 0.0) ,照相机的up方向为(0.0, 1.0, 0.0)

投影为透视投影,竖直张角为60度

取景范围为沿照相机的朝向距离从0.1 到300

现需要把照相机看到的图片放在一个400x300像素分辨率的窗口的右上部分,该部分起始点为 (100, 100), 宽度为200,高度为200 (1)请写出用OpenGL函数表示的照相机设置。 (2)写出视区(viewport)的设置函数。 (3)写出投影变换的设置函数。

(4)求出从坐标系W到照相机坐标系(视点坐标系)的4x4的变换矩阵。 答:

1. gluLookAt(0.0,0.0, 100.0,0.0,0.0,0.0,0.0,1.0,0.0); 2. glViewport (100, 100, 200, 200);

3. gluPerspective(60.0f,1.0f,0.1f,300.0f); 4. 变换矩阵为:

[ 1 0 0 0 0 1 0 0 0 0 1 -100 0 0 0 1 ]

void reshape () {

glViewport (100, 100,200, 200);

glMatrixMode (GL_PROJECTION); glLoadIdentity ();

gluPerspective(60.0, 1.0, 0.1, 300.0);

glMatrixMode(GL_MODELVIEW); glLoadIdentity();

gluLookAt (0.0, 0.0, 100.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); }

13、分析下面的程序并计算在下面的例子中,计算对应○1○2○3○4四个顶点所对应的四边形上的一个点(-1.0, 0.5, 0.0)对应的纹理坐标是多少?按照最近邻域滤波方法,该点对应的颜色是什么? /* Create checkerboard texture */ #define checkImageWidth 64 #define checkImageHeight 64

static GLubyte checkImage[checkImageHeight][checkImageWidth][4];

#ifdef GL_VERSION_1_1 static GLuint texName; #endif

void makeCheckImage(void) {

int i, j, c;

for (i = 0; i < checkImageHeight; i++) { for (j = 0; j < checkImageWidth; j++) {

c = ((((i&0x8)==0)^((j&0x8))==0))*255; checkImage[i][j][0] = (GLubyte) c; checkImage[i][j][1] = (GLubyte) c; checkImage[i][j][2] = (GLubyte) c; checkImage[i][j][3] = (GLubyte) 255; } } }

void init(void) {

glClearColor (0.0, 0.0, 0.0, 0.0); glShadeModel(GL_FLAT); glEnable(GL_DEPTH_TEST);

makeCheckImage();

glPixelStorei(GL_UNPACK_ALIGNMENT, 1);

#ifdef GL_VERSION_1_1

glGenTextures(1, &texName);

glBindTexture(GL_TEXTURE_2D, texName); #endif

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);

#ifdef GL_VERSION_1_1

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, checkImageWidth, checkImageHeight,

0, GL_RGBA, GL_UNSIGNED_BYTE, checkImage); #else

glTexImage2D(GL_TEXTURE_2D, 0, 4, checkImageWidth, checkImageHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, checkImage); #endif }

void display(void) {

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glEnable(GL_TEXTURE_2D);

glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL); #ifdef GL_VERSION_1_1

glBindTexture(GL_TEXTURE_2D, texName); #endif

glBegin(GL_QUADS);

○1glTexCoord2f(0.0, 0.0); glVertex3f(-2.0, -1.0, 0.0); ○2glTexCoord2f(0.0, 1.0); glVertex3f(-2.0, 1.0, 0.0); ○3glTexCoord2f(1.0, 1.0); glVertex3f(0.0, 1.0, 0.0); ○4glTexCoord2f(1.0, 0.0); glVertex3f(0.0, -1.0, 0.0);

glTexCoord2f(0.0, 0.0); glVertex3f(1.0, -1.0, 0.0); glTexCoord2f(0.0, 1.0); glVertex3f(1.0, 1.0, 0.0);

glTexCoord2f(1.0, 1.0); glVertex3f(2.41421, 1.0, -1.41421); glTexCoord2f(1.0, 0.0); glVertex3f(2.41421, -1.0, -1.41421); glEnd(); glFlush();

glDisable(GL_TEXTURE_2D); }

void reshape(int w, int h) {

glViewport(0, 0, (GLsizei) w, (GLsizei) h); glMatrixMode(GL_PROJECTION); glLoadIdentity();

gluPerspective(60.0, (GLfloat) w/(GLfloat) h, 1.0, 30.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity();

glTranslatef(0.0, 0.0, -3.6); }

void keyboard (unsigned char key, int x, int y) {

switch (key) { case 27: exit(0); break; default: break; } }

int main(int argc, char** argv) {

glutInit(&argc, argv);

glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH); glutInitWindowSize(250, 250); glutInitWindowPosition(100, 100); glutCreateWindow(argv[0]); init();

glutDisplayFunc(display); glutReshapeFunc(reshape); glutKeyboardFunc(keyboard); glutMainLoop(); return 0; } 答:

(0.5,0.75)*64=(32,48)

c = ((((32&0x8)==0)^((48&0x8))==0))*255 =( (0= =0)^(0= =0))*255 =0

颜色为(0,0,0,255)黑色


2016杭电《实时三维图形绘制》OpenGL课复习提纲、试题展示及参考(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:七上 第12课学案

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: