欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

OpenGL實現3D立體顯示

系統 1852 0

由于左眼和右眼觀看顯示器的角度不同,利用這一角度差遮住光線就可將圖像分配給右眼或者左眼,經過大腦將這兩幅由差別的圖像合成為一副具有空間深度和維度信息的圖像,從而可以看到3D圖像。

完整的實現代碼如下所示:

    #include "stdafx.h"
#include "GL/glut.h"
#include "stdlib.h"
#include "stdio.h"
#include "math.h"

static int big = 0;
static bool isLeftEye = false;

#define PI 3.1415926
const GLfloat R = 8.0;

static GLfloat leftMatrix[16] = {1.0, 0.0, 0.0, 0.0,
0.0, 1.0, 0.0, 0.0,
0.0, 0.0, 1.0,  0.0,
0.0, 0.0, 0.0, 1.0};

static GLfloat rightMatrix[16] = {1.0, 0.0, 0.0, 0.0,
0.0, 1.0, 0.0, 0.0,
0.0, 0.0, 1.0, 0.0,
0.0, 0.0, 0.0, 1.0};

static GLfloat leftPersMatrix[16] = {1.0, 0.0, 0.0, 0.0,
0.0, 1.0, 0.0, 0.0,
0.0, 0.0, 1.0, 0.0,
0.0, 0.0, 0.0, 1.0};

static GLfloat rightPersMatrix[16] = {1.0, 0.0, 0.0, 0.0,
0.0, 1.0, 0.0, 0.0,
0.0, 0.0, 1.0, 0.0,
0.0, 0.0, 0.0, 1.0};
void init(void)
{	
	const GLfloat SD = 0.06;
	GLfloat n = SD*R/2.0;
	//要是轉秩
	//n=0;
	leftMatrix[12] = n;
	rightMatrix[12] = -n;

	//這里假設眼到屏幕為一米,以米為單位
	GLfloat p = SD/(2*1*tan(PI/6)*1);
	//p = 0.0;
	leftPersMatrix[12] = -p;
	rightPersMatrix[12] = p;

	GLfloat mat_specular[] = {0.8, 0.8, 0.0, 1.0};
	GLfloat mat_shininess[] = {50.0};
	GLfloat light_position[] = {1.0, 1.0, 1.0, 0.0};
	GLfloat white_light[] = {1.0, 1.0, 1.0, 1.0};
	GLfloat yellow_light[] = {1.0, 1.0, 0.0, 1.0};
	GLfloat lmodel_ambient[] = {0.0, 0.7, 0.5, 1.0};
	glClearColor(1.0, 1.0, 1.0, 0.0);

	glShadeModel(GL_SMOOTH);
	glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);
	glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess);
	glLightfv(GL_LIGHT0, GL_POSITION, light_position);
	glLightfv(GL_LIGHT0, GL_DIFFUSE, yellow_light);//主體的顏色
	glLightfv(GL_LIGHT0, GL_SPECULAR, white_light);//高光的顏色
	glLightModelfv(GL_LIGHT_MODEL_AMBIENT, lmodel_ambient);

	glEnable(GL_LIGHTING);
	glEnable(GL_LIGHT0);
	glEnable(GL_DEPTH_TEST);
}

void display(void)
{
	glColorMask(1.0, 1.0,1.0,1.0);
	glClearColor(0.0,0.0,0.0,1.0);
	glClearDepth(1.0);

	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
	glColor3f(1.0, 1.0, 1.0);


	// 畫左眼
	glMatrixMode(GL_PROJECTION);
	glPushMatrix();
	float mat[16];
	glGetFloatv(GL_PROJECTION_MATRIX,mat);
	glLoadIdentity();

	glMultMatrixf(leftPersMatrix);
	glMultMatrixf(mat);

	glMatrixMode(GL_MODELVIEW);
	glPushMatrix();
	glGetFloatv(GL_MODELVIEW_MATRIX,mat);
	glLoadIdentity();

	glMultMatrixf(leftMatrix);
	glMultMatrixf(mat);

	glColorMask(1.0, 0.0,0.0,1.0);

	glRotatef((GLfloat) big, 0.0, 1.0, 0.0);
	glutSolidTeapot(2.0);
	glPopMatrix();

	glMatrixMode(GL_PROJECTION);
	glPopMatrix();

	glFlush();

	//畫右眼
	glClearDepth(1.0);
	glClear(GL_DEPTH_BUFFER_BIT);

	glMatrixMode(GL_PROJECTION);
	glPushMatrix();
	glGetFloatv(GL_PROJECTION_MATRIX,mat);
	glLoadIdentity();

	glMultMatrixf(rightPersMatrix);
	glMultMatrixf(mat);

	glMatrixMode(GL_MODELVIEW);
	glPushMatrix();
	glGetFloatv(GL_MODELVIEW_MATRIX,mat);
	glLoadIdentity();

	glMultMatrixf(rightMatrix);
	glMultMatrixf(mat);
	glColorMask(0.0, 1.0,1.0,1.0);
	glRotatef((GLfloat) big, 0.0, 1.0, 0.0);
	glutSolidTeapot(2.0);
	glPopMatrix();

	glMatrixMode(GL_PROJECTION);
	glPopMatrix();
	glFlush();
	//glPopMatrix();
	//if(isLeftEye)
	//{	
	//	glMatrixMode(GL_PROJECTION);
	//	glMultMatrixf(leftPersMatrix);

	//	glMatrixMode(GL_MODELVIEW);
	//	glMultMatrixf(leftMatrix);
	//	glColorMask(1.0, 0.0,0.0,1.0);
	//	
	//	
	//	
	//	isLeftEye = false;
	//}else
	//{	
	//	
	//	glMatrixMode(GL_PROJECTION);
	//	glMultMatrixf(rightPersMatrix);

	//	glMatrixMode(GL_MODELVIEW);
	//	glMultMatrixf(rightMatrix);
	//	glColorMask(0.0, 1.0,1.0,1.0);	
	//	isLeftEye = true;
	//}

	//glRotatef((GLfloat) big, 0.0, 1.0, 0.0);
	//glutSolidTeapot(1.0);

	//glRotatef((GLfloat) big, 0.0, 1.0, 0.0);
	//glTranslatef(3.0, 0.0, 0.0);
	//glutSolidTeapot(0.5);

	glutSwapBuffers();


}
void reshape(int w, int h)
{
	glViewport(0, 0, (GLsizei) w, (GLsizei) h);

	glMatrixMode(GL_PROJECTION);
	glLoadIdentity();
	gluPerspective(60, (GLfloat)w/(GLfloat)h, 0.01, 20.0);

	glMatrixMode(GL_MODELVIEW);
	glLoadIdentity();
	gluLookAt(0.0, 0.0, R, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0 );
}
void keyboard(unsigned char key, int x, int y)
{
	switch (key)
	{
	case 'b':
		big = (big + 1) % 360;
		glutPostRedisplay();
		break;
	case 'B':
		big = (big - 1) % 360;
		glutPostRedisplay();
		break;
	case 27:				// 按ESC鍵時退出程序
		exit (0);
		break;
	default:
		break;
	}
}
void spinDisplay(void)
{
	big = (big + 1) % 360;
	glutPostRedisplay();
}
int main (int argc, char** argv)
{
	glutInit(&argc, argv);
	glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
	glutInitWindowSize(500, 500);
	glutInitWindowPosition(100, 100);
	glutCreateWindow(argv[0]);
	init();
	glutDisplayFunc(display);
	glutReshapeFunc(reshape);
	glutKeyboardFunc(keyboard);
	glutIdleFunc(spinDisplay);
	glutMainLoop();

	return 0;
} 
  

最終效果圖如下所示:

OpenGL實現3D立體顯示

OpenGL實現3D立體顯示


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 清纯唯美综合网 | 成人激情视频在线观看 | 久久精品伊人 | 一级毛片一级毛片一级毛片一级毛片 | 亚洲最大福利视频 | 一级片国语 | 国产成人综合在线观看 | 日韩av日韩 | 我我色综合 | 亚洲色图欧美色 | 250pp久久新| 大香伊蕉国产短视频69 | 国产人成 | 欧美黄色网 | 毛片基地看看成人免费 | 天堂一区二区三区 | 天天操夜夜操视频 | 91香蕉国产视频 | 看黄在线 | 瑟瑟在线 | 亚洲v日本v欧美v综合v | 国产精品福利在线观看秒播 | 91成人在线 | 丰满岳妇乱一区二区三区 | 日本翁熄系列乱在线视频 | 亚洲午夜精品久久久久久成年 | 日韩在线观看毛片 | 6月婷婷 | 永久免费在线播放 | 日本高清在线精品一区二区三区 | 综合天天| 亚洲喷水 | 国产午夜精品在线 | 91麻豆蜜桃一区二区三区 | 欧美爽爽爽高清免费视频 | 欧美成人在线免费 | 国产精品久久久久无码av | 无码色情影片视频在线看免费 | 中文乱码一二三四有限公司 | 奇米影视888狠狠狠777不卡 | 亚洲国产一区二区三区四区 |