欧美三区_成人在线免费观看视频_欧美极品少妇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條評論
主站蜘蛛池模板: 日本一道本视频 | 欧美全黄 | 在线不卡视频 | 亚洲精品一区二区三区福利 | 亚洲一区二区三区首页 | 亚洲免费一区 | 九九精品在线 | 91网站在线看 | 色婷亚洲 | 久草看片 | 天天干天天操天天爽 | 久久久久久久国产 | 成人欧美一区二区三区在线观看 | 久久国产亚洲 | 免费日韩| 男生日女生免费视频 | 精品日韩视频 | 成人在线播放 | 亚洲精品久久久久久一区 | 日韩福利视频在线 | 国产精品高清在线 | 国产精品尤物在线 | 精品国产欧美一区二区 | 欧美一区二区精品 | 午夜国产在线视频 | 久久中文字幕一区 | 精品久久久久一区 | 天天干夜夜夜 | 福利四区| 欧美精品免费在线 | 欧美亚洲国产另类在线观看 | 操操影视| 美国一级特色大黄 | 国产xxxx搡xxxxx搡麻豆 | 香蕉久久一区二区不卡无毒影院 | 免费看a| 色呦呦在线观看视频 | 99久久99热久久精品免费看 | www.欧美com | 久久精品免费一区二区三 | 精品中文字幕在线观看 |